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.

10838 lines
691 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,string InvCode)
  52. {
  53. try
  54. {
  55. #region 正常入库
  56. ///添加库存(原条码退回,更新库存;新条码直接入库)
  57. //stirng locationcode = "";
  58. string sql = string.Empty;
  59. string locationcode = "";
  60. //string aa = @"update ICSWareHouseLotInfo set EATTRIBUTE10='' where lotno='{0}' and workpoint='{1}'";
  61. //aa = string.Format(aa, LotNo, WorkPoint);
  62. //if (!DBHelper.ExecuteNonQuery(aa, cmd))
  63. //{
  64. // throw new Exception("条码EATTRIBUTE10更新失败!");//"占料标识更新失败!");
  65. //}
  66. ///晶华固定料入库
  67. string aaasql = @"SELECT DISTINCT
  68. b.F_Define1
  69. FROM Sys_SRM_Items a
  70. LEFT JOIN Sys_SRM_ItemsDetail b ON a.F_Id = b.F_ItemId
  71. WHERE a.F_EnCode = 'InventoryLotWareHouseFixed' and b.F_Define1='{0}' and b.F_EnabledMark='1'";
  72. aaasql = string.Format(aaasql, InvCode);
  73. DataTable aadtt = DBHelper.SQlReturnData(aaasql, cmd);
  74. if (aadtt.Rows.Count > 0 && aadtt != null)
  75. {
  76. string ccsql = string.Empty;
  77. if (BusinessCode == TransTypeEnum.JHManufactureReceiveDoc.GetDescription<DBValue>())
  78. {
  79. ccsql = @"SELECT
  80. ext.ProjectCode,a.WorkPoint
  81. FROM
  82. ICSInventoryLot a
  83. LEFT JOIN ICSContainerLot conlot ON a.LotNo = conlot.LotNo AND a.WorkPoint = conlot.WorkPoint
  84. LEFT JOIN ICSContainer con ON conlot.ContainerID = con.ID AND conlot.WorkPoint = con.WorkPoint
  85. INNER JOIN ICSInventoryLotDetail b on a.lotno=b.lotno
  86. INNER JOIN ICSMO c on b.transcode=c.mocode and b.transsequence=c.sequence
  87. INNER JOIN ICSInventory inv ON a.InvCode = inv.InvCode AND a.WorkPoint = inv.WorkPoint
  88. INNER JOIN ICSExtension ext ON c.ExtensionID = ext.ID AND c.WorkPoint = ext.WorkPoint
  89. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  90. }
  91. else
  92. {
  93. ccsql = @"SELECT
  94. ext.ProjectCode,a.WorkPoint
  95. FROM
  96. ICSInventoryLot a
  97. LEFT JOIN ICSContainerLot conlot ON a.LotNo = conlot.LotNo AND a.WorkPoint = conlot.WorkPoint
  98. LEFT JOIN ICSContainer con ON conlot.ContainerID = con.ID AND conlot.WorkPoint = con.WorkPoint
  99. INNER JOIN ICSInventory inv ON a.InvCode = inv.InvCode AND a.WorkPoint = inv.WorkPoint
  100. INNER JOIN ICSExtension ext ON a.ExtensionID = ext.ID AND a.WorkPoint = ext.WorkPoint
  101. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  102. }
  103. ccsql = string.Format(ccsql,LotNo,WorkPoint);
  104. DataTable aadtt2 = DBHelper.SQlReturnData(ccsql, cmd);
  105. if (aadtt2.Rows.Count > 0 && aadtt2 != null)
  106. {
  107. jointLotNo = jointLotNo+ aadtt2.Rows[0]["ProjectCode"].ToString()+ aadtt2.Rows[0]["WorkPoint"].ToString();
  108. }
  109. }
  110. if (BusinessCode != TransTypeEnum.SalesReturnBack.GetDescription<DBValue>())
  111. {
  112. if (string.IsNullOrWhiteSpace(LogID))
  113. {
  114. sql = @"IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}')
  115. BEGIN
  116. RAISERROR('" + language.GetNameByCode("WMSAPIInfo164") + @"',16,1);
  117. RETURN
  118. END ";
  119. }
  120. else
  121. {
  122. sql = @"SELECT LocationCode FROM ICSWareHouseLotInfo a WHERE LotNo='{0}' AND WorkPoint='{1}'";
  123. sql = string.Format(sql, LotNo, WorkPoint);
  124. DataTable dt = DBHelper.SQlReturnData(sql, cmd);
  125. if (dt == null || dt.Rows.Count <= 0)
  126. {
  127. throw new Exception(string.Format(language.GetNameByCode("WMSAPIInfo171"), LotNo));
  128. }
  129. locationcode = dt.Rows[0]["LocationCode"].ToString();
  130. }
  131. }
  132. if (BusinessCode == TransTypeEnum.MOStockINByProductNoTrans.GetDescription<DBValue>())
  133. {
  134. sql += @" IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  135. BEGIN
  136. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  137. RETURN
  138. END
  139. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}')
  140. BEGIN
  141. IF EXISTS(SELECT a.LotNO FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND a.Quantity=0)
  142. BEGIN
  143. UPDATE a SET a.Quantity=ISNULL(a.Quantity,0)+'{3}',WarehouseCode=e.WarehouseCode,LocationCode=d.LocationCode
  144. From ICSWareHouseLotInfo a
  145. INNER JOIN ICSLocation d ON d.LocationCode='{4}' AND a.WorkPoint=d.WorkPoint
  146. INNER JOIN ICSWarehouse e ON d.WHID=e.ID AND d.WorkPoint=e.WorkPoint
  147. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  148. END
  149. ELSE IF EXISTS(SELECT a.LotNO FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND a.LocationCode='{4}')
  150. BEGIN
  151. UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)+'{3}'
  152. WHERE LotNo='{0}' AND WorkPoint='{1}'
  153. END
  154. ELSE IF('" + locationcode + @"' != '{4}')
  155. BEGIN
  156. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo395"), "{4}", locationcode) + @"', 16, 1);
  157. RETURN
  158. END
  159. END
  160. ELSE
  161. BEGIN
  162. IF EXISTS(SELECT il.InvCode FROM ICSInventoryLocation il
  163. INNER JOIN ICSInventoryLot a ON a.InvCode=il.InvCode AND a.WorkPoint=il.WorkPoint
  164. WHERE il.Enable='1' AND a.LotNo='{0}' AND a.WorkPoint='{1}')
  165. BEGIN
  166. IF NOT EXISTS(SELECT il.InvCode FROM ICSInventoryLocation il
  167. INNER JOIN ICSInventoryLot a ON a.InvCode=il.InvCode AND a.WorkPoint=il.WorkPoint
  168. WHERE il.Enable='1' AND a.LotNo='{0}' AND a.WorkPoint='{1}' AND il.LocationCode='{4}')
  169. BEGIN
  170. RAISERROR('" + language.GetNameByCode("WMSAPIInfo180") + @"',16,1);
  171. RETURN
  172. END
  173. END
  174. INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  175. SELECT NEWID(),a.LotNo ,e.WarehouseCode,d.LocationCode,a.InvCode ,'{3}',SYSDATETIME(),'0',f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint ,''
  176. FROM ICSInventoryLot a
  177. LEFT JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  178. --INNER JOIN ICSOApplyNegDetail c ON b.TransCode=c.OApplyNegCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  179. INNER JOIN ICSLocation d ON d.LocationCode='{4}' AND a.WorkPoint=d.WorkPoint
  180. INNER JOIN ICSWarehouse e ON d.WHID=e.ID AND d.WorkPoint=e.WorkPoint
  181. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  182. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  183. END";
  184. }
  185. else if(BusinessCode == TransTypeEnum.CodingInStockIn.GetDescription<DBValue>())
  186. {
  187. sql += @" IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  188. BEGIN
  189. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  190. RETURN
  191. END
  192. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}')
  193. BEGIN
  194. IF EXISTS(SELECT a.LotNO FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND a.Quantity=0)
  195. BEGIN
  196. UPDATE a SET a.Quantity=ISNULL(a.Quantity,0)+'{3}',WarehouseCode=e.WarehouseCode,LocationCode=d.LocationCode
  197. From ICSWareHouseLotInfo a
  198. INNER JOIN ICSLocation d ON d.LocationCode='{4}' AND a.WorkPoint=d.WorkPoint
  199. INNER JOIN ICSWarehouse e ON d.WHID=e.ID AND d.WorkPoint=e.WorkPoint
  200. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  201. END
  202. ELSE IF EXISTS(SELECT a.LotNO FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND a.LocationCode='{4}')
  203. BEGIN
  204. UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)+'{3}'
  205. WHERE LotNo='{0}' AND WorkPoint='{1}'
  206. END
  207. ELSE IF('" + locationcode + @"' != '{4}')
  208. BEGIN
  209. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo395"), "{4}", locationcode) + @"', 16, 1);
  210. RETURN
  211. END
  212. END
  213. ELSE
  214. BEGIN
  215. IF EXISTS(SELECT il.InvCode FROM ICSInventoryLocation il
  216. INNER JOIN ICSInventoryLot a ON a.InvCode=il.InvCode AND a.WorkPoint=il.WorkPoint
  217. WHERE il.Enable='1' AND a.LotNo='{0}' AND a.WorkPoint='{1}')
  218. BEGIN
  219. IF NOT EXISTS(SELECT il.InvCode FROM ICSInventoryLocation il
  220. INNER JOIN ICSInventoryLot a ON a.InvCode=il.InvCode AND a.WorkPoint=il.WorkPoint
  221. WHERE il.Enable='1' AND a.LotNo='{0}' AND a.WorkPoint='{1}' AND il.LocationCode='{4}')
  222. BEGIN
  223. RAISERROR('" + language.GetNameByCode("WMSAPIInfo180") + @"',16,1);
  224. RETURN
  225. END
  226. END
  227. INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  228. SELECT NEWID(),a.LotNo ,e.WarehouseCode,d.LocationCode,a.InvCode ,'{3}',SYSDATETIME(),'0',f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint ,''
  229. FROM ICSInventoryLot a
  230. LEFT JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  231. --INNER JOIN ICSOApplyNegDetail c ON b.TransCode=c.OApplyNegCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  232. INNER JOIN ICSLocation d ON d.LocationCode='{4}' AND a.WorkPoint=d.WorkPoint
  233. INNER JOIN ICSWarehouse e ON d.WHID=e.ID AND d.WorkPoint=e.WorkPoint
  234. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  235. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  236. END";
  237. }
  238. else
  239. {
  240. sql += @" IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  241. BEGIN
  242. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  243. RETURN
  244. END
  245. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}')
  246. BEGIN
  247. IF EXISTS(SELECT a.LotNO FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND a.Quantity=0)
  248. BEGIN
  249. UPDATE a SET a.Quantity=ISNULL(a.Quantity,0)+'{3}',WarehouseCode=e.WarehouseCode,LocationCode=d.LocationCode
  250. From ICSWareHouseLotInfo a
  251. INNER JOIN ICSLocation d ON d.LocationCode='{4}' AND a.WorkPoint=d.WorkPoint
  252. INNER JOIN ICSWarehouse e ON d.WHID=e.ID AND d.WorkPoint=e.WorkPoint
  253. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  254. END
  255. ELSE IF EXISTS(SELECT a.LotNO FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND a.LocationCode='{4}')
  256. BEGIN
  257. UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)+'{3}'
  258. WHERE LotNo='{0}' AND WorkPoint='{1}'
  259. END
  260. ELSE IF('" + locationcode + @"' != '{4}')
  261. BEGIN
  262. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo395"), "{4}", locationcode) + @"', 16, 1);
  263. RETURN
  264. END
  265. END
  266. ELSE
  267. BEGIN
  268. IF EXISTS(SELECT il.InvCode FROM ICSInventoryLocation il
  269. INNER JOIN ICSInventoryLot a ON a.InvCode=il.InvCode AND a.WorkPoint=il.WorkPoint
  270. WHERE il.Enable='1' AND a.LotNo='{0}' AND a.WorkPoint='{1}')
  271. BEGIN
  272. IF NOT EXISTS(SELECT il.InvCode FROM ICSInventoryLocation il
  273. INNER JOIN ICSInventoryLot a ON a.InvCode=il.InvCode AND a.WorkPoint=il.WorkPoint
  274. WHERE il.Enable='1' AND a.LotNo='{0}' AND a.WorkPoint='{1}' AND il.LocationCode='{4}')
  275. BEGIN
  276. RAISERROR('" + language.GetNameByCode("WMSAPIInfo180") + @"',16,1);
  277. RETURN
  278. END
  279. END
  280. INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  281. SELECT NEWID(),a.LotNo ,e.WarehouseCode,d.LocationCode,a.InvCode ,'{3}',SYSDATETIME(),'0',f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint ,''
  282. FROM ICSInventoryLot a
  283. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  284. --INNER JOIN ICSOApplyNegDetail c ON b.TransCode=c.OApplyNegCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  285. INNER JOIN ICSLocation d ON d.LocationCode='{4}' AND a.WorkPoint=d.WorkPoint
  286. INNER JOIN ICSWarehouse e ON d.WHID=e.ID AND d.WorkPoint=e.WorkPoint
  287. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  288. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  289. END";
  290. }
  291. sql = string.Format(sql, LotNo, WorkPoint, User, Quantity, LocationCode);
  292. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  293. {
  294. throw new Exception(language.GetNameByCode("WMSAPIInfo165"));
  295. }
  296. if (BusinessCode == TransTypeEnum.MOStockINByProductNoTrans.GetDescription<DBValue>())
  297. {
  298. ///添加日志
  299. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  300. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  301. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  302. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  303. MTIME,WorkPoint,EATTRIBUTE1,LogID)
  304. SELECT NEWID(),'{3}',b.TransCode,b.TransSequence,a.LotNo ,a.InvCode ,
  305. '','',c.WarehouseCode,c.LocationCode,'{6}',
  306. '','0','{4}','{5}','0','',
  307. '','','',f.F_Account ,f.F_RealName ,
  308. SYSDATETIME() ,a.WorkPoint ,'','{7}'
  309. FROM ICSInventoryLot a
  310. LEFT JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  311. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  312. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  313. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  314. ";
  315. }
  316. else if (BusinessCode == TransTypeEnum.JHManufactureReceiveDoc.GetDescription<DBValue>())
  317. {
  318. if (aadtt.Rows.Count > 0 && aadtt != null)
  319. {
  320. ///添加日志
  321. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  322. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  323. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  324. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  325. MTIME,WorkPoint,EATTRIBUTE1,LogID,EATTRIBUTE2)
  326. SELECT NEWID(),'{3}',b.TransCode,b.TransSequence,a.LotNo ,a.InvCode ,
  327. '','',c.WarehouseCode,c.LocationCode,'{6}',
  328. '','0','{4}','{5}','0','',
  329. '','','',f.F_Account ,f.F_RealName ,
  330. SYSDATETIME() ,a.WorkPoint ,'','{7}','{10}'
  331. FROM ICSInventoryLot a
  332. LEFT JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  333. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  334. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  335. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  336. ";
  337. }
  338. else
  339. {
  340. ///添加日志
  341. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  342. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  343. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  344. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  345. MTIME,WorkPoint,EATTRIBUTE1,LogID)
  346. SELECT NEWID(),'{3}',b.TransCode,b.TransSequence,a.LotNo ,a.InvCode ,
  347. '','',c.WarehouseCode,c.LocationCode,'{6}',
  348. '','0','{4}','{5}','0','',
  349. '','','',f.F_Account ,f.F_RealName ,
  350. SYSDATETIME() ,a.WorkPoint ,'','{7}'
  351. FROM ICSInventoryLot a
  352. LEFT JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  353. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  354. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  355. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  356. ";
  357. }
  358. }
  359. else if (BusinessCode == TransTypeEnum.ReturnDoc.GetDescription<DBValue>()&&!string.IsNullOrEmpty(LogID))
  360. {
  361. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  362. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  363. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  364. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  365. MTIME,WorkPoint,EATTRIBUTE1,LogID)
  366. SELECT NEWID(),'{3}','{8}','{9}',a.LotNo ,a.InvCode ,
  367. '','',c.WarehouseCode,c.LocationCode,'{6}',
  368. '','0','{4}','{5}','0','',
  369. '','','',f.F_Account ,f.F_RealName ,
  370. SYSDATETIME() ,a.WorkPoint ,'','{7}'
  371. FROM ICSInventoryLot a
  372. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  373. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  374. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  375. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  376. ";
  377. }
  378. else if (BusinessCode == TransTypeEnum.CodingInStockIn.GetDescription<DBValue>())
  379. {
  380. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  381. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  382. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  383. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  384. MTIME,WorkPoint,EATTRIBUTE1,LogID)
  385. SELECT NEWID(),'{3}',b.TransCode,b.TransSequence,a.LotNo ,a.InvCode ,
  386. '','',c.WarehouseCode,c.LocationCode,'{6}',
  387. '','0','{4}','{5}','0','',
  388. '','','',f.F_Account ,f.F_RealName ,
  389. SYSDATETIME() ,a.WorkPoint ,'','{7}'
  390. FROM ICSInventoryLot a
  391. LEFT JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  392. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  393. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  394. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  395. ";
  396. }
  397. else
  398. {
  399. if (aadtt.Rows.Count > 0 && aadtt != null)
  400. {
  401. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  402. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  403. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  404. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  405. MTIME,WorkPoint,EATTRIBUTE1,LogID,EATTRIBUTE2)
  406. SELECT NEWID(),'{3}',b.TransCode,b.TransSequence,a.LotNo ,a.InvCode ,
  407. '','',c.WarehouseCode,c.LocationCode,'{6}',
  408. '','0','{4}','{5}','0','',
  409. '','','',f.F_Account ,f.F_RealName ,
  410. SYSDATETIME() ,a.WorkPoint ,'','{7}','{10}'
  411. FROM ICSInventoryLot a
  412. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  413. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  414. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  415. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  416. ";
  417. }
  418. else
  419. {
  420. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  421. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  422. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  423. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  424. MTIME,WorkPoint,EATTRIBUTE1,LogID)
  425. SELECT NEWID(),'{3}',b.TransCode,b.TransSequence,a.LotNo ,a.InvCode ,
  426. '','',c.WarehouseCode,c.LocationCode,'{6}',
  427. '','0','{4}','{5}','0','',
  428. '','','',f.F_Account ,f.F_RealName ,
  429. SYSDATETIME() ,a.WorkPoint ,'','{7}'
  430. FROM ICSInventoryLot a
  431. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  432. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  433. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  434. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  435. ";
  436. }
  437. }
  438. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransType, BusinessCode, Quantity, LogID,TransCode,TransSequence, jointLotNo);
  439. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  440. {
  441. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  442. }
  443. #endregion
  444. #region 管控方式是"料品"时
  445. ControlMode mode = ICSControlModeService.GetControlMode();
  446. //晶华固定料入库
  447. string aasql = @"SELECT DISTINCT
  448. b.F_Define1
  449. FROM Sys_SRM_Items a
  450. LEFT JOIN Sys_SRM_ItemsDetail b ON a.F_Id = b.F_ItemId
  451. WHERE a.F_EnCode = 'InventoryLotWareHouseFixed'";
  452. DataTable adtt = DBHelper.SQlReturnData(aasql, cmd);
  453. if (adtt.Rows.Count > 0 && adtt != null)
  454. {
  455. string checksql = @"SELECT id FROM ICSInventoryLot where LotNo='{0}' AND WorkPoint='{1}' AND InvCode in(
  456. SELECT DISTINCT
  457. b.F_Define1
  458. FROM Sys_SRM_Items a
  459. LEFT JOIN Sys_SRM_ItemsDetail b ON a.F_Id = b.F_ItemId
  460. WHERE a.F_EnCode = 'InventoryLotWareHouseFixed')";
  461. checksql = string.Format(checksql, LotNo, WorkPoint);
  462. DataTable dtt = DBHelper.SQlReturnData(checksql, cmd);
  463. if (dtt.Rows.Count > 0 && dtt != null)
  464. {
  465. if (mode.itemCode.Equals("ControlMode02"))
  466. {
  467. //查询是否存在料品管控的条码
  468. string sqlStrNew = @"SELECT a.ID,
  469. con.ContainerCode,
  470. con.ContainerName,
  471. a.LotNo,
  472. a.InvCode,
  473. inv.InvName,
  474. inv.InvStd,
  475. inv.InvUnit,-- {0}
  476. inv.AmountUnit,
  477. ext.ID AS ExtensionID,
  478. ext.ProjectCode,
  479. ext.Version,
  480. ext.BatchCode,
  481. ext.Brand,
  482. ext.cFree1,
  483. ext.cFree2,
  484. ext.cFree3,
  485. ext.cFree4,
  486. ext.cFree5,
  487. ext.cFree6,
  488. ext.cFree7,
  489. ext.cFree8,
  490. ext.cFree9,
  491. ext.cFree10,
  492. a.MUSER AS [ USER ],
  493. a.MTIME AS [ MTime ]
  494. FROM
  495. ICSInventoryLot a
  496. LEFT JOIN ICSContainerLot conlot ON a.LotNo = conlot.LotNo AND a.WorkPoint = conlot.WorkPoint
  497. LEFT JOIN ICSContainer con ON conlot.ContainerID = con.ID AND conlot.WorkPoint = con.WorkPoint
  498. INNER JOIN ICSInventory inv ON a.InvCode = inv.InvCode AND a.WorkPoint = inv.WorkPoint
  499. INNER JOIN ICSExtension ext ON a.ExtensionID = ext.ID AND a.WorkPoint = ext.WorkPoint
  500. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  501. sqlStrNew = string.Format(sqlStrNew, jointLotNo, WorkPoint);
  502. DataTable table = DBHelper.SQlReturnData(sqlStrNew, cmd);
  503. string json = JsonConvert.SerializeObject(table);
  504. List<LotNoMode> modelNew = JsonConvert.DeserializeObject<List<LotNoMode>>(json);
  505. //当不存在料品管控条码时,生成新条码
  506. if (!(modelNew.Count > 0))
  507. {
  508. //获取旧条码的信息
  509. string jsonStr = ICSControlModeService.QueryLotNo(LotNo, WorkPoint,cmd);
  510. List<LotNoMode> model = JsonConvert.DeserializeObject<List<LotNoMode>>(jsonStr);
  511. //在条码表中插入一条新数据,在条码表中插入一条新数据,并在库存表中添加新数据
  512. LotNoMode lotNoMode = model[0];
  513. CreateLotNo(jointLotNo, Quantity, "", "", WorkPoint, Identification, User, lotNoMode.InvCode, BusinessCode, lotNoMode.ProjectCode, lotNoMode.BatchCode,
  514. lotNoMode.Version, lotNoMode.Brand, lotNoMode.cFree1, lotNoMode.cFree2, lotNoMode.cFree3, lotNoMode.cFree4, lotNoMode.cFree5, lotNoMode.cFree6, lotNoMode.cFree7,
  515. lotNoMode.cFree8, lotNoMode.cFree9, lotNoMode.cFree10, cmd, language, LocationCode, LotNo);
  516. }
  517. try
  518. {
  519. //合并前日志
  520. WareHouseLotInfoLog(Identification, jointLotNo, User, WorkPoint, "2",
  521. TransTypeEnum.LOTMergeBefore.GetDescription<DBValue>(), "", cmd, language);
  522. //更新目标条码库存
  523. WareHouseLotInfoMerge(Identification, jointLotNo, LotNo, Quantity, User, WorkPoint, "2",
  524. TransTypeEnum.LOTMergeAfter.GetDescription<DBValue>(), cmd, language);
  525. //合并后日志
  526. WareHouseLotInfoLog(Identification, jointLotNo, User, WorkPoint, "2",
  527. TransTypeEnum.LOTMergeAfter.GetDescription<DBValue>(), "", cmd, language);
  528. }
  529. catch (Exception)
  530. {
  531. throw;
  532. }
  533. }
  534. }
  535. }
  536. else
  537. {
  538. if (mode.itemCode.Equals("ControlMode02"))
  539. {
  540. //查询是否存在料品管控的条码
  541. string sqlStrNew = @"SELECT a.ID,
  542. con.ContainerCode,
  543. con.ContainerName,
  544. a.LotNo,
  545. a.InvCode,
  546. inv.InvName,
  547. inv.InvStd,
  548. inv.InvUnit,-- {0}
  549. inv.AmountUnit,
  550. ext.ID AS ExtensionID,
  551. ext.ProjectCode,
  552. ext.Version,
  553. ext.BatchCode,
  554. ext.Brand,
  555. ext.cFree1,
  556. ext.cFree2,
  557. ext.cFree3,
  558. ext.cFree4,
  559. ext.cFree5,
  560. ext.cFree6,
  561. ext.cFree7,
  562. ext.cFree8,
  563. ext.cFree9,
  564. ext.cFree10,
  565. a.MUSER AS [ USER ],
  566. a.MTIME AS [ MTime ]
  567. FROM
  568. ICSInventoryLot a
  569. LEFT JOIN ICSContainerLot conlot ON a.LotNo = conlot.LotNo AND a.WorkPoint = conlot.WorkPoint
  570. LEFT JOIN ICSContainer con ON conlot.ContainerID = con.ID AND conlot.WorkPoint = con.WorkPoint
  571. INNER JOIN ICSInventory inv ON a.InvCode = inv.InvCode AND a.WorkPoint = inv.WorkPoint
  572. INNER JOIN ICSExtension ext ON a.ExtensionID = ext.ID AND a.WorkPoint = ext.WorkPoint
  573. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  574. sqlStrNew = string.Format(sqlStrNew, jointLotNo, WorkPoint);
  575. DataTable table = DBHelper.SQlReturnData(sqlStrNew, cmd);
  576. string json = JsonConvert.SerializeObject(table);
  577. List<LotNoMode> modelNew = JsonConvert.DeserializeObject<List<LotNoMode>>(json);
  578. //当不存在料品管控条码时,生成新条码
  579. if (!(modelNew.Count > 0))
  580. {
  581. //获取旧条码的信息
  582. string jsonStr = ICSControlModeService.QueryLotNo(LotNo, WorkPoint,cmd);
  583. List<LotNoMode> model = JsonConvert.DeserializeObject<List<LotNoMode>>(jsonStr);
  584. //在条码表中插入一条新数据,在条码表中插入一条新数据,并在库存表中添加新数据
  585. LotNoMode lotNoMode = model[0];
  586. CreateLotNo(jointLotNo, Quantity, "", "", WorkPoint, Identification, User, lotNoMode.InvCode, BusinessCode, lotNoMode.ProjectCode, lotNoMode.BatchCode,
  587. lotNoMode.Version, lotNoMode.Brand, lotNoMode.cFree1, lotNoMode.cFree2, lotNoMode.cFree3, lotNoMode.cFree4, lotNoMode.cFree5, lotNoMode.cFree6, lotNoMode.cFree7,
  588. lotNoMode.cFree8, lotNoMode.cFree9, lotNoMode.cFree10, cmd, language, LocationCode, LotNo);
  589. }
  590. try
  591. {
  592. //合并前日志
  593. WareHouseLotInfoLog(Identification, jointLotNo, User, WorkPoint, "2",
  594. TransTypeEnum.LOTMergeBefore.GetDescription<DBValue>(), "", cmd, language);
  595. //更新目标条码库存
  596. WareHouseLotInfoMerge(Identification, jointLotNo, LotNo, Quantity, User, WorkPoint, "2",
  597. TransTypeEnum.LOTMergeAfter.GetDescription<DBValue>(), cmd, language);
  598. //合并后日志
  599. WareHouseLotInfoLog(Identification, jointLotNo, User, WorkPoint, "2",
  600. TransTypeEnum.LOTMergeAfter.GetDescription<DBValue>(), "", cmd, language);
  601. }
  602. catch (Exception)
  603. {
  604. throw;
  605. }
  606. }
  607. }
  608. #endregion
  609. string enablesql = @"select * from ICSConfiguration where code = 'MostackInBack001' and enable = '1'";
  610. DataTable flag = DBHelper.SQlReturnData(enablesql, cmd);
  611. #region 成品(生产)入库,倒冲
  612. if (BusinessCode.Equals(TransTypeEnum.ManufactureReceiveDoc.GetDescription<DBValue>())&& (flag.Rows.Count<=0||flag ==null))
  613. {
  614. #region sql
  615. sql = @"-- 1.创建临时表 初始单据数据 maintemp
  616. SELECT
  617. c.MOCode AS TransCode,
  618. a.MODetailID AS DetailID,
  619. a.InvCode,
  620. b.InvName,
  621. b.InvStd,
  622. case when c.Quantity=c.rcvQuantity then a.quantity - a.issuequantity else
  623. a.ParentQuantity/c.Quantity*{2} end AS Quantity,
  624. a.Amount,
  625. a.Sequence AS TransSequence,
  626. a.IssueQuantity,
  627. c.Sequence,
  628. inv.InvUnit,
  629. cast(0 as decimal(18,6)) AS LocationQty,
  630. inv.AmountUnit,
  631. a.ExtensionID,
  632. a.WorkPoint,
  633. ext.ProjectCode,
  634. CASE WHEN ISNULL(inv.BatchEnable, '0')='1' THEN ext.BatchCode ELSE '' END AS BatchCode,
  635. ext.Version,
  636. ext.Brand,
  637. ext.cFree1,
  638. ext.cFree2,
  639. ext.cFree3,
  640. ext.cFree4,
  641. ext.cFree5,
  642. ext.cFree6,
  643. ext.cFree7,
  644. ext.cFree8,
  645. ext.cFree9,
  646. ext.cFree10,a.WHCODE
  647. INTO #maintemp
  648. FROM
  649. ICSMOPick a
  650. inner join ICSMO c on a.MODetailID=c.MODetailID and a.WorkPoint=c.WorkPoint
  651. LEFT JOIN ICSINVENTORY b ON a.InvCode = b.InvCode AND a.WorkPoint=b.WorkPoint
  652. INNER JOIN ICSExtension ext ON a.ExtensionID=ext.ID AND a.WorkPoint=ext.WorkPoint
  653. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  654. INNER JOIN (
  655. SELECT a.MOCode,a.Sequence,a.WorkPoint
  656. FROM ICSMO a
  657. INNER JOIN ICSInventoryLotDetail b ON b.TransCode=a.MOCode AND b.TransSequence=a.Sequence AND b.WorkPoint=a.WorkPoint
  658. INNER JOIN ICSInventoryLot c ON c.LotNo=b.LotNo AND c.WorkPoint=b.WorkPoint
  659. WHERE c.LotNo='{0}' AND c.WorkPoint='{1}'
  660. ) temp ON c.MOCode=temp.MOCode AND a.WorkPoint=temp.WorkPoint AND c.Sequence=temp.Sequence
  661. WHERE a.SupplyType='1'
  662. GROUP BY a.issuequantity,c.rcvQuantity,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,
  663. 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;
  664. select * into #resulttemp from #maintemp
  665. ALTER TABLE #resulttemp ADD LotNo VARCHAR(50)
  666. delete from #resulttemp
  667. -- 2.maintemp barcodetemp
  668. select a.lotno,a.invcode,cast((a.quantity-a.lockQuantity) as decimal(18,6)) as quantity ,ROW_NUMBER() OVER (ORDER BY d.batchCode,a.lotno) as seq,
  669. a.mtime into #barcodetemp from ICSWareHouseLotInfo a inner JOIN
  670. (select #maintemp.invcode,#maintemp.WHCODE from #maintemp group by #maintemp.InvCode,#maintemp.WHCODE) b on a.invcode = b.invcode and a.warehousecode =b.WHCODE
  671. inner JOIN ICSInventoryLot c on a.lotno = c.lotno
  672. LEFT JOIN ICSExtension d on c.extensionid = d.id
  673. where a.Quantity-a.lockQuantity>0
  674. -- 3.maintemp ID barcodetemp
  675. BEGIN
  676. DECLARE @transSequence int;--
  677. DECLARE @qty decimal(18,6);--
  678. DECLARE @needqty decimal(18,6);--
  679. DECLARE @lotno VARCHAR(50);--
  680. DECLARE @DetailID VARCHAR(50);--ID
  681. DECLARE tempCursor CURSOR FOR (select transSequence,DetailID from #maintemp); --tempCursor
  682. OPEN tempCursor; --
  683. FETCH NEXT FROM tempCursor INTO @transSequence,@DetailID; --
  684. WHILE @@fetch_status=0
  685. BEGIN
  686. select @needqty=Quantity from #maintemp where transSequence = @transSequence AND DetailID = @DetailID
  687. PRINT @transSequence
  688. WHILE @needqty>0
  689. BEGIN
  690. select top 1 @qty = isnull(quantity,0),@lotno = isnull(lotno,'') from #barcodetemp a
  691. RIGHT JOIN (select invcode from #maintemp where transSequence = @transSequence AND DetailID = @DetailID) b on a.invcode=b.invcode ORDER BY seq
  692. BEGIN
  693. IF(@needqty-@qty>=0 and ISNULL(@lotno, '')<>'')
  694. BEGIN
  695. insert INTO #resulttemp (lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity,Quantity,
  696. Amount,InvCode,InvName,InvStd,InvUnit,LocationQty,AmountUnit,
  697. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint)
  698. SELECT @lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity, Quantity,
  699. ISNULL(Amount, 0), InvCode,InvName,ISNULL(InvStd, ''),InvUnit,@qty,ISNULL(AmountUnit, ''),
  700. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint from #maintemp
  701. where #maintemp.transSequence = @transSequence AND DetailID = @DetailID
  702. delete from #barcodetemp where lotno = @lotno
  703. SET @needqty=@needqty-@qty
  704. END
  705. ELSE IF(@needqty-@qty<0 and ISNULL(@lotno, '')<>'')
  706. BEGIN
  707. insert INTO #resulttemp (lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity,Quantity,
  708. Amount,InvCode,InvName,InvStd,InvUnit,LocationQty,AmountUnit,
  709. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint)
  710. SELECT @lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity, Quantity,
  711. ISNULL(Amount, 0),InvCode,InvName,ISNULL(InvStd, ''),InvUnit,@needqty,ISNULL(AmountUnit, ''),
  712. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint from #maintemp
  713. where #maintemp.transSequence = @transSequence AND DetailID = @DetailID
  714. update #barcodetemp set quantity = @qty-@needqty where lotno = @lotno
  715. SET @needqty=@needqty-@qty
  716. END
  717. ELSE
  718. BEGIN
  719. insert INTO #resulttemp (lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity,Quantity,
  720. Amount,InvCode,InvName,InvStd,InvUnit,LocationQty,AmountUnit,
  721. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint)
  722. SELECT @lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity, Quantity,
  723. ISNULL(Amount, 0),InvCode,InvName,ISNULL(InvStd, ''),InvUnit,0,ISNULL(AmountUnit, ''),
  724. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint from #maintemp
  725. where #maintemp.transSequence = @transSequence AND DetailID = @DetailID
  726. SET @needqty=0
  727. END
  728. END
  729. END
  730. FETCH NEXT FROM tempCursor INTO @transSequence,@DetailID;
  731. END
  732. CLOSE tempCursor
  733. DEALLOCATE tempCursor
  734. END
  735. select TransCode,LotNo,cast(LocationQty as nvarchar) AS Quantity,InvCode,DetailID,Sequence,TransSequence from #resulttemp
  736. --select * from #resulttemp
  737. DROP table #maintemp
  738. DROP table #resulttemp
  739. DROP table #barcodetemp";
  740. #endregion
  741. sql = String.Format(sql,LotNo,WorkPoint, Quantity);
  742. DataTable table = DBHelper.SQlReturnData(sql,cmd);
  743. string json = JsonConvert.SerializeObject(table);
  744. log.Info(json);
  745. List<DownItemModel> downItemModels = JsonConvert.DeserializeObject<List<DownItemModel>>(json);
  746. foreach (DownItemModel model in downItemModels)
  747. {
  748. if (model != null && model.LotNo == null || "" == model.LotNo)
  749. {
  750. cmd.Transaction.Rollback();
  751. string sqlmsg = @" SELECT
  752. c.MOCode AS TransCode,
  753. a.MODetailID AS DetailID,
  754. a.InvCode,
  755. b.InvName,
  756. b.InvStd,
  757. Convert(decimal(18,6), a.ParentQuantity/c.Quantity*{2})
  758. AS Quantity,
  759. a.Amount,
  760. a.Sequence AS TransSequence,
  761. a.IssueQuantity,
  762. c.Sequence,
  763. inv.InvUnit,
  764. cast(0 as decimal(18,6)) AS LocationQty,
  765. inv.AmountUnit,
  766. a.ExtensionID,
  767. a.WorkPoint,
  768. ext.ProjectCode,
  769. CASE WHEN ISNULL(inv.BatchEnable, '0')='1' THEN ext.BatchCode ELSE '' END AS BatchCode,
  770. ext.Version,
  771. ext.Brand,
  772. ext.cFree1,
  773. ext.cFree2,
  774. ext.cFree3,
  775. ext.cFree4,
  776. ext.cFree5,
  777. ext.cFree6,
  778. ext.cFree7,
  779. ext.cFree8,
  780. ext.cFree9,
  781. ext.cFree10,a.WHCODE,Convert(decimal(18,6), a.ParentQuantity/c.Quantity*{2})-isnull(temp2.quantity,0) as needQty
  782. FROM
  783. ICSMOPick a
  784. inner join ICSMO c on a.MODetailID=c.MODetailID and a.WorkPoint=c.WorkPoint
  785. LEFT JOIN ICSINVENTORY b ON a.InvCode = b.InvCode AND a.WorkPoint=b.WorkPoint
  786. INNER JOIN ICSExtension ext ON a.ExtensionID=ext.ID AND a.WorkPoint=ext.WorkPoint
  787. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  788. INNER JOIN (
  789. SELECT a.MOCode,a.Sequence,a.WorkPoint
  790. FROM ICSMO a
  791. INNER JOIN ICSInventoryLotDetail b ON b.TransCode=a.MOCode AND b.TransSequence=a.Sequence AND b.WorkPoint=a.WorkPoint
  792. INNER JOIN ICSInventoryLot c ON c.LotNo=b.LotNo AND c.WorkPoint=b.WorkPoint
  793. WHERE c.LotNo='{0}' AND c.WorkPoint='{1}'
  794. ) temp ON c.MOCode=temp.MOCode AND a.WorkPoint=temp.WorkPoint AND c.Sequence=temp.Sequence
  795. left join (select warehousecode,invcode,sum(cast((quantity-lockQuantity) as decimal(18,6))) as quantity
  796. from ICSWareHouseLotInfo
  797. where Quantity-lockQuantity>0
  798. group by invcode,warehousecode) temp2 on a.InvCode = temp2.invcode and a.WHCODE = temp2.warehousecode
  799. WHERE a.SupplyType='1'
  800. 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,
  801. 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,temp2.quantity;
  802. ";
  803. sqlmsg = String.Format(sqlmsg, LotNo, WorkPoint, Quantity);
  804. DataTable tablemsg = DBHelper.SQlReturnData(sqlmsg, cmd);
  805. string message = "";
  806. foreach (DataRow dr in tablemsg.Rows)
  807. {
  808. if (Convert.ToDecimal(dr["needQty"]) > 0)
  809. message += "料品:" + dr["InvCode"] + ",仓库:" + dr["WHCODE"] + ",库存差额:" + dr["needQty"] + ",需求数量:" + dr["Quantity"] + ",单位:" + dr["InvUnit"]; }
  810. log.Debug(message + sqlmsg);
  811. throw new Exception(language.GetNameByCode("WMSAPIInfo201")+message);
  812. }
  813. log.Info(model.Quantity + "");
  814. WareHouseLotInfoDown(Identification,model.TransCode,model.Sequence + "~" + model.TransSequence,model.LotNo,model.Quantity+"",User,WorkPoint,"12","61",cmd,language,"","","");
  815. //增加日志表记录 倒冲数据来源(入库批次自由项)
  816. sql = @"update ICSWareHouseLotInfoLog
  817. set EATTRIBUTE3 = (select
  818. 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, '')+
  819. 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, '')
  820. from
  821. ICSWareHouseLotInfo a
  822. inner join ICSInventorylot lot on a.lotno = lot.lotno
  823. inner join ICSExtension ext on lot.ExtensionID=ext.ID and a.workpoint =ext.workpoint
  824. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  825. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.WarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  826. where a.LotNo ='{0}' and a.WorkPoint='{1}')
  827. where Identification ='{2}'AND TransType='12' and BusinessCode ='61' and EATTRIBUTE3 IS null";
  828. sql = String.Format(sql, LotNo, WorkPoint, Identification);
  829. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  830. {
  831. throw new Exception(language.GetNameByCode("WMSAPIInfo199"));
  832. }
  833. //回写已领数量
  834. sql = @"UPDATE ICSMOPick SET IssueQuantity=(ISNULL(IssueQuantity,0)+" + model.Quantity+") WHERE MODetailID='{0}' AND Sequence='{1}' AND WorkPoint='{2}'";
  835. sql = String.Format(sql,model.DetailID,model.TransSequence,WorkPoint);
  836. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  837. {
  838. throw new Exception(language.GetNameByCode("WMSAPIInfo199"));
  839. }
  840. }
  841. }
  842. #endregion
  843. enablesql = @"select * from ICSConfiguration where code = 'OostackInBack002' and enable = '1'";
  844. flag = DBHelper.SQlReturnData(enablesql, cmd);
  845. #region 委外入库,倒冲
  846. if (BusinessCode.Equals(TransTypeEnum.OutsourcingReceiveDoc.GetDescription<DBValue>()) && (flag.Rows.Count <= 0 || flag == null))
  847. {
  848. #region sql
  849. sql = @"-- 1.创建临时表 初始单据数据 maintemp
  850. SELECT
  851. c.OOCode AS TransCode,
  852. a.OODetailID AS DetailID,
  853. a.InvCode,
  854. b.InvName,
  855. b.InvStd,
  856. a.ParentQuantity/c.Quantity*{2} AS Quantity,
  857. a.Amount,
  858. a.Sequence AS TransSequence,
  859. a.IssueQuantity,
  860. c.Sequence,
  861. inv.InvUnit,
  862. cast(0 as decimal(18,6)) AS LocationQty,
  863. inv.AmountUnit,
  864. a.ExtensionID,
  865. a.WorkPoint,
  866. ext.ProjectCode,
  867. CASE WHEN ISNULL(inv.BatchEnable, '0')='1' THEN ext.BatchCode ELSE '' END AS BatchCode,
  868. ext.Version,
  869. ext.Brand,
  870. ext.cFree1,
  871. ext.cFree2,
  872. ext.cFree3,
  873. ext.cFree4,
  874. ext.cFree5,
  875. ext.cFree6,
  876. ext.cFree7,
  877. ext.cFree8,
  878. ext.cFree9,
  879. ext.cFree10,a.WHCODE
  880. INTO #maintemp
  881. FROM
  882. ICSOOPick a
  883. inner join ICSOutsourcingOrder c on a.OODetailID=c.OODetailID and a.WorkPoint=c.WorkPoint
  884. LEFT JOIN ICSINVENTORY b ON a.InvCode = b.InvCode AND a.WorkPoint=b.WorkPoint
  885. INNER JOIN ICSExtension ext ON a.ExtensionID=ext.ID AND a.WorkPoint=ext.WorkPoint
  886. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  887. INNER JOIN (
  888. SELECT a.OOCode,a.Sequence,a.WorkPoint
  889. FROM ICSOutsourcingOrder a
  890. INNER JOIN ICSInventoryLotDetail b ON b.TransCode=a.OOCode AND b.TransSequence=a.Sequence AND b.WorkPoint=a.WorkPoint
  891. INNER JOIN ICSInventoryLot c ON c.LotNo=b.LotNo AND c.WorkPoint=b.WorkPoint
  892. WHERE c.LotNo='{0}' AND c.WorkPoint='{1}'
  893. ) temp ON c.OOCode=temp.OOCode AND a.WorkPoint=temp.WorkPoint AND c.Sequence=temp.Sequence
  894. WHERE a.SupplyType='1'
  895. 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,
  896. 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;
  897. select * into #resulttemp from #maintemp
  898. ALTER TABLE #resulttemp ADD LotNo VARCHAR(50)
  899. delete from #resulttemp
  900. -- 2.maintemp barcodetemp
  901. select a.lotno,a.invcode,cast((a.quantity-a.lockQuantity) as decimal(18,6)) as quantity ,ROW_NUMBER() OVER (ORDER BY d.batchCode,a.lotno) as seq,
  902. a.mtime into #barcodetemp from ICSWareHouseLotInfo a inner JOIN
  903. (select #maintemp.invcode,#maintemp.WHCODE from #maintemp group by #maintemp.InvCode,#maintemp.WHCODE) b on a.invcode = b.invcode and a.warehousecode =b.WHCODE
  904. inner JOIN ICSInventoryLot c on a.lotno = c.lotno
  905. LEFT JOIN ICSExtension d on c.extensionid = d.id where a.Quantity-a.lockQuantity>0
  906. -- 3.maintemp ID barcodetemp
  907. BEGIN
  908. DECLARE @transSequence int;--
  909. DECLARE @qty decimal(18,6);--
  910. DECLARE @needqty decimal(18,6);--
  911. DECLARE @lotno VARCHAR(50);--
  912. DECLARE @DetailID VARCHAR(50);--ID
  913. DECLARE tempCursor CURSOR FOR (select transSequence,DetailID from #maintemp); --tempCursor
  914. OPEN tempCursor; --
  915. FETCH NEXT FROM tempCursor INTO @transSequence,@DetailID; --
  916. WHILE @@fetch_status=0
  917. BEGIN
  918. select @needqty=Quantity from #maintemp where transSequence = @transSequence AND DetailID = @DetailID
  919. PRINT @transSequence
  920. WHILE @needqty>0
  921. BEGIN
  922. select top 1 @qty = isnull(quantity,0),@lotno = isnull(lotno,'') from #barcodetemp a
  923. RIGHT JOIN (select invcode from #maintemp where transSequence = @transSequence AND DetailID = @DetailID) b on a.invcode=b.invcode ORDER BY seq
  924. BEGIN
  925. IF(@needqty-@qty>=0 and ISNULL(@lotno, '')<>'')
  926. BEGIN
  927. insert INTO #resulttemp (lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity,Quantity,
  928. Amount,InvCode,InvName,InvStd,InvUnit,LocationQty,AmountUnit,
  929. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint)
  930. SELECT @lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity, Quantity,
  931. ISNULL(Amount, 0), InvCode,InvName,ISNULL(InvStd, ''),InvUnit,@qty,ISNULL(AmountUnit, ''),
  932. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint from #maintemp
  933. where #maintemp.transSequence = @transSequence AND DetailID = @DetailID
  934. delete from #barcodetemp where lotno = @lotno
  935. SET @needqty=@needqty-@qty
  936. END
  937. ELSE IF(@needqty-@qty<0 and ISNULL(@lotno, '')<>'')
  938. BEGIN
  939. insert INTO #resulttemp (lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity,Quantity,
  940. Amount,InvCode,InvName,InvStd,InvUnit,LocationQty,AmountUnit,
  941. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint)
  942. SELECT @lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity, Quantity,
  943. ISNULL(Amount, 0),InvCode,InvName,ISNULL(InvStd, ''),InvUnit,@needqty,ISNULL(AmountUnit, ''),
  944. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint from #maintemp
  945. where #maintemp.transSequence = @transSequence AND DetailID = @DetailID
  946. update #barcodetemp set quantity = @qty-@needqty where lotno = @lotno
  947. SET @needqty=@needqty-@qty
  948. END
  949. ELSE
  950. BEGIN
  951. insert INTO #resulttemp (lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity,Quantity,
  952. Amount,InvCode,InvName,InvStd,InvUnit,LocationQty,AmountUnit,
  953. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint)
  954. SELECT @lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity, Quantity,
  955. ISNULL(Amount, 0),InvCode,InvName,ISNULL(InvStd, ''),InvUnit,0,ISNULL(AmountUnit, ''),
  956. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint from #maintemp
  957. where #maintemp.transSequence = @transSequence AND DetailID = @DetailID
  958. SET @needqty=0
  959. END
  960. END
  961. END
  962. FETCH NEXT FROM tempCursor INTO @transSequence,@DetailID;
  963. END
  964. CLOSE tempCursor
  965. DEALLOCATE tempCursor
  966. END
  967. select TransCode,LotNo,LocationQty AS Quantity,InvCode,DetailID,Sequence,TransSequence from #resulttemp
  968. --select * from #resulttemp
  969. DROP table #maintemp
  970. DROP table #resulttemp
  971. DROP table #barcodetemp";
  972. #endregion
  973. sql = String.Format(sql, LotNo, WorkPoint, Quantity);
  974. DataTable table = DBHelper.SQlReturnData(sql, cmd);
  975. string json = JsonConvert.SerializeObject(table);
  976. List<DownItemModel> downItemModels = JsonConvert.DeserializeObject<List<DownItemModel>>(json);
  977. foreach (DownItemModel model in downItemModels)
  978. {
  979. if (model != null && model.LotNo == null || "" == model.LotNo)
  980. {
  981. cmd.Transaction.Rollback();
  982. string sqlmsg = @" SELECT
  983. c.OOCode AS TransCode,
  984. a.OODetailID AS DetailID,
  985. a.InvCode,
  986. b.InvName,
  987. b.InvStd,
  988. Convert(decimal(18,6), a.ParentQuantity/c.Quantity*{2})
  989. AS Quantity,
  990. a.Amount,
  991. a.Sequence AS TransSequence,
  992. a.IssueQuantity,
  993. c.Sequence,
  994. inv.InvUnit,
  995. cast(0 as decimal(18,6)) AS LocationQty,
  996. inv.AmountUnit,
  997. a.ExtensionID,
  998. a.WorkPoint,
  999. ext.ProjectCode,
  1000. CASE WHEN ISNULL(inv.BatchEnable, '0')='1' THEN ext.BatchCode ELSE '' END AS BatchCode,
  1001. ext.Version,
  1002. ext.Brand,
  1003. ext.cFree1,
  1004. ext.cFree2,
  1005. ext.cFree3,
  1006. ext.cFree4,
  1007. ext.cFree5,
  1008. ext.cFree6,
  1009. ext.cFree7,
  1010. ext.cFree8,
  1011. ext.cFree9,
  1012. ext.cFree10,a.WHCODE ,(Convert(decimal(18,6), a.ParentQuantity/c.Quantity*{2})-isnull(temp2.quantity,0)) as needQty
  1013. FROM
  1014. ICSOOPick a
  1015. inner join ICSOutsourcingOrder c on a.OODetailID=c.OODetailID and a.WorkPoint=c.WorkPoint
  1016. LEFT JOIN ICSINVENTORY b ON a.InvCode = b.InvCode AND a.WorkPoint=b.WorkPoint
  1017. INNER JOIN ICSExtension ext ON a.ExtensionID=ext.ID AND a.WorkPoint=ext.WorkPoint
  1018. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  1019. INNER JOIN (
  1020. SELECT a.OOCode,a.Sequence,a.WorkPoint
  1021. FROM ICSOutsourcingOrder a
  1022. INNER JOIN ICSInventoryLotDetail b ON b.TransCode=a.OOCode AND b.TransSequence=a.Sequence AND b.WorkPoint=a.WorkPoint
  1023. INNER JOIN ICSInventoryLot c ON c.LotNo=b.LotNo AND c.WorkPoint=b.WorkPoint
  1024. WHERE c.LotNo='{0}' AND c.WorkPoint='{1}'
  1025. ) temp ON c.OOCode=temp.OOCode AND a.WorkPoint=temp.WorkPoint AND c.Sequence=temp.Sequence
  1026. left join (select warehousecode,invcode,sum(cast((quantity-lockQuantity) as decimal(18,6))) as quantity
  1027. from ICSWareHouseLotInfo
  1028. where Quantity-lockQuantity>0
  1029. group by invcode,warehousecode) temp2 on a.InvCode = temp2.invcode and a.WHCODE = temp2.warehousecode
  1030. WHERE a.SupplyType='1'
  1031. 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,
  1032. 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,temp2.quantity;
  1033. ";
  1034. sqlmsg = String.Format(sqlmsg, LotNo, WorkPoint, Quantity);
  1035. DataTable tablemsg = DBHelper.SQlReturnData(sqlmsg, cmd);
  1036. string message = "";
  1037. foreach (DataRow dr in tablemsg.Rows)
  1038. {
  1039. if (Convert.ToDecimal(dr["needQty"])>0)
  1040. message += "料品:" + dr["InvCode"] + ",仓库:" + dr["WHCODE"] + ",库存差额:" + dr["needQty"] + ",需求数量:" + dr["Quantity"] + ",单位:" + dr["InvUnit"];
  1041. }
  1042. log.Debug(message+ sqlmsg);
  1043. throw new Exception(language.GetNameByCode("WMSAPIInfo201") + message);
  1044. }
  1045. WareHouseLotInfoDown(Identification, model.TransCode, model.Sequence + "~" + model.TransSequence, model.LotNo, model.Quantity, User, WorkPoint, "13", "60", cmd, language,"","","");
  1046. log.Debug(model.TransCode + "倒冲" + model.Sequence + "~" + model.TransSequence);
  1047. //增加日志表记录 倒冲数据来源(入库批次自由项)
  1048. sql = @"update ICSWareHouseLotInfoLog
  1049. set EATTRIBUTE3 = (select
  1050. 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, '')+
  1051. 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, '')
  1052. from
  1053. ICSWareHouseLotInfo a
  1054. inner join ICSInventorylot lot on a.lotno = lot.lotno
  1055. inner join ICSExtension ext on lot.ExtensionID=ext.ID and a.workpoint =ext.workpoint
  1056. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  1057. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.WarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  1058. where a.LotNo ='{0}' and a.WorkPoint='{1}')
  1059. where Identification ='{2}'AND TransType='13' and BusinessCode ='60' and EATTRIBUTE3 IS null";
  1060. sql = String.Format(sql, LotNo, WorkPoint, Identification);
  1061. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  1062. {
  1063. throw new Exception(language.GetNameByCode("WMSAPIInfo199"));
  1064. }
  1065. //回写已领数量
  1066. sql = @"UPDATE ICSOOPick SET IssueQuantity=(ISNULL(IssueQuantity,0)+" + model.Quantity+") WHERE OODetailID='{0}' AND Sequence='{1}' AND WorkPoint='{2}'";
  1067. sql = String.Format(sql, model.DetailID, model.TransSequence, WorkPoint);
  1068. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  1069. {
  1070. throw new Exception(language.GetNameByCode("WMSAPIInfo199"));
  1071. }
  1072. }
  1073. }
  1074. #endregion
  1075. }
  1076. catch (Exception)
  1077. {
  1078. throw;
  1079. }
  1080. }
  1081. /// <summary>
  1082. /// 赠品入库
  1083. /// </summary>
  1084. public static void GiftInStorage(SqlConnection conn, SqlTransaction sqlTran, SqlCommand cmd, Dictionary<string, string> language, string Identification, string LotNos, string user, string userName, string MTime, string WorkPoint, string BusinessCode, string TransType)
  1085. {
  1086. try
  1087. {
  1088. DataSet TableNameds = new DataSet();
  1089. DataTable wdt = new DataTable();
  1090. DataTable logdt = new DataTable();
  1091. string cdsql = string.Empty;
  1092. log.Debug("赠品入库传入正式条码:" + LotNos);
  1093. string giftLotSql = string.Format(@"SELECT DISTINCT
  1094. a.LotNo,a.EATTRIBUTE29,a.Quantity,a.WorkPoint,a.InvCode
  1095. INTO #tempDt
  1096. FROM ICSInventoryLot a
  1097. WHERE a.EATTRIBUTE29 IN ({0}) AND a.WorkPoint='{1}'
  1098. select CAST(NEWID() AS NVARCHAR(50)) as ID,a.LotNo AS LotNo,b.WarehouseCode AS WarehouseCode,b.LocationCode AS LocationCode,a.InvCode AS InvCode,
  1099. CAST(a.Quantity AS decimal(18,6)) AS Quantity,'{7}' AS InDate,0 AS LockQuantity,0 as Freeze,0 as Inspect,'{5}' AS MUSER,'{6}' As MUSERName,'{7}' AS MTIME,
  1100. a.WorkPoint AS WorkPoint
  1101. FROM #tempDt a
  1102. LEFT JOIN ICSWareHouseLotInfo b ON b.LotNo=a.EATTRIBUTE29 AND b.WorkPoint=a.WorkPoint
  1103. select CAST(NEWID() AS NVARCHAR(50)) as ID,'{2}' as Identification,de.TransID AS TransID,de.TransCode AS TransCode,de.TransSequence as TransSequence,
  1104. a.LotNo as LotNo,a.InvCode as InvCode,'' as FromWarehouseCode,'' as FromLocationCode,b.WarehouseCode as ToWarehouseCode,b.LocationCode as ToLocationCode,
  1105. CAST(a.Quantity AS decimal(18,6)) AS Quantity,'' AS Memo,0 AS Lock,'{3}' as TransType,'{4}' as BusinessCode,0 as ERPUpload,
  1106. '' as ERPID,'' as ERPDetailID, '' as ERPCode,'' as ERPSequence,
  1107. '' AS LogID,'' as MergeID,'{5}' as MUSER,'{6}' as MUSERName,'{7}' AS MTIME,a.WorkPoint as WorkPoint
  1108. FROM #tempDt a
  1109. INNER JOIN ICSInventoryLotDetail de ON de.LotNo=a.LotNo AND de.WorkPoint=a.WorkPoint
  1110. LEFT JOIN ICSWareHouseLotInfo b ON b.LotNo=a.EATTRIBUTE29 AND b.WorkPoint=a.WorkPoint
  1111. DROP TABLE #tempDt", LotNos, WorkPoint, Identification, TransType, BusinessCode, user, userName, MTime);
  1112. DataSet ds = DBHelper.SQlReturnDataSet(giftLotSql, cmd);
  1113. wdt = ds.Tables[0];
  1114. wdt.TableName = "ICSWareHouseLotInfo";
  1115. logdt = ds.Tables[1];
  1116. logdt.TableName = "ICSWareHouseLotInfoLog";
  1117. TableNameds.Tables.Add(wdt.Copy());
  1118. TableNameds.Tables.Add(logdt.Copy());
  1119. var tableDecimalColumns = new Dictionary<string, string[]>
  1120. {
  1121. { "ICSWareHouseLotInfo", new string[] { "Quantity", "LockQuantity" } },
  1122. { "ICSWareHouseLotInfoLog", new string[] { "Quantity" } }
  1123. };
  1124. HTTPHelper.BatchUpdate(conn, sqlTran, "", "", cdsql, TableNameds);
  1125. }
  1126. catch(Exception ex)
  1127. {
  1128. log.Debug("赠品入库出错:" + ex.Message);
  1129. throw;
  1130. }
  1131. }
  1132. /// <summary>
  1133. /// 锐腾委外入库倒冲
  1134. /// </summary>
  1135. /// <param name="LocationCode"></param>
  1136. /// <param name="LotNo"></param>
  1137. /// <param name="Quantity"></param>
  1138. /// <param name="User"></param>
  1139. /// <param name="WorkPoint"></param>
  1140. /// <param name="TransType"></param>
  1141. /// <param name="BusinessCode"></param>
  1142. /// <param name="cmd"></param>
  1143. /// <param name="jointLotNo"></param>
  1144. public static void WareHouseLotInfoBack(string Identification, string LocationCode, string LotNo, string Quantity, string User,
  1145. string WorkPoint, string TransType, string BusinessCode, SqlCommand cmd, Dictionary<string, string> language, string LogID, string jointLotNo, string TransCode, string TransSequence,string InvCode,string WHCode)
  1146. {
  1147. try
  1148. {
  1149. string VenCode = string.Empty;
  1150. string DisVenCode = string.Empty;
  1151. string LocaCode = string.Empty;
  1152. string newsql = @"select LotNo,WorkPoint,InvCode,ToWarehouseCode,MUSER,Quantity,TransSequence,TransCode
  1153. from ICSWareHouseLotInfoLog
  1154. WHERE Identification='{0}' AND BusinessCode='{1}'";
  1155. newsql = string.Format(newsql, Identification, BusinessCode);
  1156. DataTable dt = DBHelper.SQlReturnData(newsql, cmd);
  1157. for (int i = 0; i < dt.Rows.Count; i++)
  1158. {
  1159. string ssql = @"SELECT a.ODNCode,a.Sequence,a.WorkPoint,a.VenCode
  1160. FROM ICSODeliveryNotice a
  1161. INNER JOIN ICSInventoryLotDetail b ON b.TransCode=a.ODNCode AND b.TransSequence=a.Sequence AND b.WorkPoint=a.WorkPoint
  1162. INNER JOIN ICSInventoryLot c ON c.LotNo=b.LotNo AND c.WorkPoint=b.WorkPoint
  1163. WHERE c.LotNo='{0}' AND c.WorkPoint='{1}'";
  1164. ssql = string.Format(ssql, dt.Rows[i]["LotNo"].ToString(), dt.Rows[i]["WorkPoint"].ToString());
  1165. DataTable ssdt = DBHelper.SQlReturnData(ssql, cmd);
  1166. if (ssdt.Rows.Count > 0)
  1167. {
  1168. DisVenCode = ssdt.Rows[0]["VenCode"].ToString();
  1169. }
  1170. string cheksql = @"select b.F_ItemCode as VenCode ,b.F_ItemName as Name,b.F_EnabledMark AS Enable ,b.F_Define1 AS LocationCode
  1171. from Sys_SRM_Items a
  1172. left join Sys_SRM_ItemsDetail b on a.F_Id=b.F_ItemId
  1173. where a.F_EnCode='WWLocation' AND b.F_ItemCode='{0}'
  1174. ";
  1175. cheksql = string.Format(cheksql, DisVenCode);
  1176. DataTable chekdt = DBHelper.SQlReturnData(cheksql, cmd);
  1177. if (chekdt.Rows.Count > 0)
  1178. {
  1179. LocaCode = chekdt.Rows[0]["LocationCode"].ToString();
  1180. }
  1181. else
  1182. {
  1183. throw new Exception("委外供应商未维护:" + DisVenCode);
  1184. }
  1185. #region 委外入库,倒冲
  1186. #region sql
  1187. string sql = @"-- 1.创建临时表 初始单据数据 maintemp
  1188. SELECT
  1189. c.ODNCode AS TransCode,
  1190. a.OODetailID AS DetailID,
  1191. a.InvCode,
  1192. b.InvName,
  1193. b.InvStd,
  1194. '{2}' AS Quantity,
  1195. a.Amount,
  1196. a.Sequence AS TransSequence,
  1197. a.IssueQuantity,
  1198. c.Sequence,
  1199. inv.InvUnit,
  1200. CAST(0 AS DECIMAL(18, 2)) AS LocationQty,
  1201. inv.AmountUnit,
  1202. a.ExtensionID,
  1203. a.WorkPoint,
  1204. ext.ProjectCode,
  1205. CASE WHEN ISNULL(inv.BatchEnable, '0')='1' THEN ext.BatchCode ELSE '' END AS BatchCode,
  1206. ext.Version,
  1207. ext.Brand,
  1208. ext.cFree1,
  1209. ext.cFree2,
  1210. ext.cFree3,
  1211. ext.cFree4,
  1212. ext.cFree5,
  1213. ext.cFree6,
  1214. ext.cFree7,
  1215. ext.cFree8,
  1216. ext.cFree9,
  1217. ext.cFree10
  1218. INTO #maintemp
  1219. FROM
  1220. ICSOOPick a
  1221. inner join ICSODeliveryNotice c on a.OODetailID=c.OODetailID and a.WorkPoint=c.WorkPoint
  1222. LEFT JOIN ICSINVENTORY b ON a.InvCode = b.InvCode AND a.WorkPoint=b.WorkPoint
  1223. INNER JOIN ICSExtension ext ON a.ExtensionID=ext.ID AND a.WorkPoint=ext.WorkPoint
  1224. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  1225. INNER JOIN (
  1226. SELECT a.ODNCode,a.Sequence,a.WorkPoint
  1227. FROM ICSODeliveryNotice a
  1228. INNER JOIN ICSInventoryLotDetail b ON b.TransCode=a.ODNCode AND b.TransSequence=a.Sequence AND b.WorkPoint=a.WorkPoint
  1229. INNER JOIN ICSInventoryLot c ON c.LotNo=b.LotNo AND c.WorkPoint=b.WorkPoint
  1230. WHERE c.LotNo='{0}' AND c.WorkPoint='{1}'
  1231. ) temp ON c.ODNCode=temp.ODNCode AND a.WorkPoint=temp.WorkPoint AND c.Sequence=temp.Sequence
  1232. WHERE a.invcode='{3}'
  1233. 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,
  1234. 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;
  1235. select * into #resulttemp from #maintemp
  1236. ALTER TABLE #resulttemp ADD LotNo VARCHAR(50)
  1237. delete from #resulttemp
  1238. -- 2.maintemp barcodetemp
  1239. select a.lotno,a.invcode,(a.quantity-a.lockQuantity) as quantity ,a.mtime into #barcodetemp
  1240. from ICSWareHouseLotInfo a inner JOIN
  1241. (select #maintemp.invcode from #maintemp group by #maintemp.InvCode) b on a.invcode = b.invcode where a.Quantity-a.lockQuantity>0
  1242. AND a.WareHouseCode='{4}' and a.LocationCode='{5}'
  1243. ORDER BY a.MTIME ASC
  1244. -- 3.maintemp ID barcodetemp
  1245. BEGIN
  1246. DECLARE @transSequence int;--
  1247. DECLARE @qty int;--
  1248. DECLARE @needqty decimal(10, 2);--
  1249. DECLARE @lotno VARCHAR(50);--
  1250. DECLARE @DetailID VARCHAR(50);--ID
  1251. DECLARE tempCursor CURSOR FOR (select transSequence,DetailID from #maintemp); --tempCursor
  1252. OPEN tempCursor; --
  1253. FETCH NEXT FROM tempCursor INTO @transSequence,@DetailID; --
  1254. WHILE @@fetch_status=0
  1255. BEGIN
  1256. select @needqty=Quantity from #maintemp where transSequence = @transSequence AND DetailID = @DetailID
  1257. PRINT @transSequence
  1258. WHILE @needqty>0
  1259. BEGIN
  1260. select top 1 @qty = isnull(quantity,0),@lotno = isnull(lotno,'') from #barcodetemp a
  1261. RIGHT JOIN (select invcode from #maintemp where transSequence = @transSequence AND DetailID = @DetailID) b on a.invcode=b.invcode ORDER BY mtime
  1262. BEGIN
  1263. IF(@needqty-@qty>=0 and ISNULL(@lotno, '')<>'')
  1264. BEGIN
  1265. insert INTO #resulttemp (LotNo,TransCode,DetailID,Sequence,TransSequence,IssueQuantity,Quantity,
  1266. Amount,InvCode,InvName,InvStd,InvUnit,LocationQty,AmountUnit,
  1267. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint)
  1268. SELECT @lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity, Quantity,
  1269. ISNULL(Amount, 0), InvCode,InvName,ISNULL(InvStd, ''),InvUnit,@qty,ISNULL(AmountUnit, ''),
  1270. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint from #maintemp
  1271. where #maintemp.transSequence = @transSequence AND DetailID = @DetailID
  1272. delete from #barcodetemp where lotno = @lotno
  1273. SET @needqty=@needqty-@qty
  1274. END
  1275. ELSE IF(@needqty-@qty<0 and ISNULL(@lotno, '')<>'')
  1276. BEGIN
  1277. insert INTO #resulttemp (LotNo,TransCode,DetailID,Sequence,TransSequence,IssueQuantity,Quantity,
  1278. Amount,InvCode,InvName,InvStd,InvUnit,LocationQty,AmountUnit,
  1279. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint)
  1280. SELECT @lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity, Quantity,
  1281. ISNULL(Amount, 0),InvCode,InvName,ISNULL(InvStd, ''),InvUnit,@needqty,ISNULL(AmountUnit, ''),
  1282. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint from #maintemp
  1283. where #maintemp.transSequence = @transSequence AND DetailID = @DetailID
  1284. update #barcodetemp set quantity = @qty-@needqty where lotno = @lotno
  1285. SET @needqty=@needqty-@qty
  1286. END
  1287. ELSE
  1288. BEGIN
  1289. insert INTO #resulttemp (LotNo,TransCode,DetailID,Sequence,TransSequence,IssueQuantity,Quantity,
  1290. Amount,InvCode,InvName,InvStd,InvUnit,LocationQty,AmountUnit,
  1291. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint)
  1292. SELECT @lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity, Quantity,
  1293. ISNULL(Amount, 0),InvCode,InvName,ISNULL(InvStd, ''),InvUnit,0,ISNULL(AmountUnit, ''),
  1294. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint from #maintemp
  1295. where #maintemp.transSequence = @transSequence AND DetailID = @DetailID
  1296. SET @needqty=0
  1297. END
  1298. END
  1299. END
  1300. FETCH NEXT FROM tempCursor INTO @transSequence,@DetailID;
  1301. END
  1302. CLOSE tempCursor
  1303. DEALLOCATE tempCursor
  1304. END
  1305. select TransCode,LotNo,LocationQty AS Quantity,InvCode,DetailID,Sequence,TransSequence from #resulttemp
  1306. --select * from #resulttemp
  1307. DROP table #maintemp
  1308. DROP table #resulttemp
  1309. DROP table #barcodetemp";
  1310. #endregion
  1311. sql = String.Format(sql, dt.Rows[i]["LotNo"].ToString(), dt.Rows[i]["WorkPoint"].ToString(), Quantity, InvCode, WHCode, LocaCode);
  1312. DataTable table = DBHelper.SQlReturnData(sql, cmd);
  1313. string json = JsonConvert.SerializeObject(table);
  1314. List<DownItemModel> downItemModels = JsonConvert.DeserializeObject<List<DownItemModel>>(json);
  1315. foreach (DownItemModel model in downItemModels)
  1316. {
  1317. if (model != null && model.LotNo == null || "" == model.LotNo)
  1318. {
  1319. throw new Exception(language.GetNameByCode("WMSAPIInfo201"));
  1320. }
  1321. WareHouseLotInfoDown(Identification, model.TransCode, model.Sequence + "~" + model.TransSequence, model.LotNo, model.Quantity, User, dt.Rows[i]["WorkPoint"].ToString(), "13", "60", cmd, language, "", "", "");
  1322. //回写已领数量
  1323. sql = @"UPDATE ICSOOPick SET IssueQuantity=(ISNULL(IssueQuantity,0)+" + model.Quantity + ") WHERE OODetailID='{0}' AND Sequence='{1}' AND WorkPoint='{2}'";
  1324. sql = String.Format(sql, model.DetailID, model.TransSequence, dt.Rows[i]["WorkPoint"].ToString());
  1325. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  1326. {
  1327. throw new Exception(language.GetNameByCode("WMSAPIInfo199"));
  1328. }
  1329. }
  1330. #endregion
  1331. }
  1332. }
  1333. catch (Exception)
  1334. {
  1335. throw;
  1336. }
  1337. }
  1338. /// <summary>
  1339. /// 入库倒冲(正向)
  1340. /// </summary>
  1341. /// <param name="LocationCode"></param>
  1342. /// <param name="LotNo"></param>
  1343. /// <param name="Quantity"></param>
  1344. /// <param name="User"></param>
  1345. /// <param name="WorkPoint"></param>
  1346. /// <param name="TransType"></param>
  1347. /// <param name="BusinessCode"></param>
  1348. /// <param name="cmd"></param>
  1349. /// <param name="jointLotNo"></param>
  1350. public static void WareHouseLotInfoBackOut(string Identification,
  1351. string TransCode, string TransSequence, string InvCode, string WHCode, string Quantity, string User,
  1352. string WorkPoint, string TransType, string BusinessCode,string ERPID, string ERPDetailID, string ERPCode,string ERPSequence,
  1353. string cFree1, string cFree2, string cFree3, string cFree4, string cFree5, string cFree6, string cFree7, string cFree8, string cFree9, string cFree10,
  1354. string ProjectCode, string Batch, string Version, string Brand,
  1355. SqlCommand cmd, Dictionary<string, string> language)
  1356. {
  1357. try
  1358. {
  1359. string VenCode = string.Empty;
  1360. string DisVenCode = string.Empty;
  1361. string LocaCode = string.Empty;
  1362. string sqlwhere = string.Empty;
  1363. string ssql = @"SELECT a.ODNCode,a.Sequence,a.WorkPoint,a.VenCode
  1364. FROM ICSODeliveryNotice a
  1365. WHERE a.ODNCode='{0}' AND a.WorkPoint='{1}'";
  1366. ssql = string.Format(ssql, TransCode, WorkPoint);
  1367. DataTable ssdt = DBHelper.SQlReturnData(ssql, cmd);
  1368. if (ssdt.Rows.Count > 0)
  1369. {
  1370. DisVenCode = ssdt.Rows[0]["VenCode"].ToString();
  1371. }
  1372. string cheksql = @"select b.F_ItemCode as VenCode ,b.F_ItemName as Name,b.F_EnabledMark AS Enable ,b.F_Define1 AS LocationCode
  1373. from Sys_SRM_Items a
  1374. left join Sys_SRM_ItemsDetail b on a.F_Id=b.F_ItemId
  1375. where a.F_EnCode='WWLocation' AND b.F_ItemCode='{0}'
  1376. ";
  1377. cheksql = string.Format(cheksql, DisVenCode);
  1378. DataTable chekdt = DBHelper.SQlReturnData(cheksql, cmd);
  1379. if (chekdt.Rows.Count > 0)
  1380. {
  1381. LocaCode = chekdt.Rows[0]["LocationCode"].ToString();
  1382. sqlwhere = @"AND a.invcode = '{0}' AND a.warehousecode = '{3}' and a.locationcode='{4}'";
  1383. }
  1384. else
  1385. {
  1386. if (DBHelper.IsRTU9())
  1387. {
  1388. throw new Exception("委外供应商库位未维护:" + DisVenCode);
  1389. }
  1390. else
  1391. {
  1392. sqlwhere = @"AND a.invcode = '{0}' AND a.warehousecode = '{3}'";
  1393. }
  1394. }
  1395. string MTime = string.Empty;
  1396. //1.查询先进先出字段
  1397. string mtimeSql = @"SELECT Top 1 a.F_ItemName
  1398. FROM Sys_SRM_ItemsDetail a
  1399. INNER JOIN Sys_SRM_Items b ON a.F_ItemId=b.F_Id
  1400. WHERE b.F_EnCode='MtimeControl' AND a.F_EnabledMark='1'
  1401. ORDER BY a.F_SortCode DESc";
  1402. DataTable mtimedt = DBHelper.SQlReturnData(mtimeSql, cmd);
  1403. if (mtimedt.Rows[0]["F_ItemName"].ToString() == "失效日期")
  1404. {
  1405. MTime = "ISNULL(b.ExpirationDate,b.ProductDate)";
  1406. }
  1407. else if (mtimedt.Rows[0]["F_ItemName"].ToString() == "生产日期")
  1408. {
  1409. MTime = "b.ProductDate";
  1410. }
  1411. else if(mtimedt.Rows[0]["F_ItemName"].ToString() == "入库日期")
  1412. {
  1413. MTime = "a.InDate";
  1414. }
  1415. else if (mtimedt.Rows[0]["F_ItemName"].ToString() == "批次")
  1416. {
  1417. MTime = "isnull(c.Batchcode ,'0')";
  1418. }
  1419. if (BusinessCode == "9" || BusinessCode == "10") { TransType = "13"; BusinessCode = "60"; } else { TransType = "12"; BusinessCode = "61"; }
  1420. #region 倒冲
  1421. #region sql
  1422. // sqlwhere = @"AND a.invcode = '{0}' AND a.warehousecode = '{3}'";//and c.batchcode ='{1}' and c.cfree1='{2}'
  1423. if (!string.IsNullOrWhiteSpace(cFree1)) { sqlwhere += " AND c.cFree1 ='" + cFree1 + "'"; }
  1424. if (!string.IsNullOrWhiteSpace(cFree2)) { sqlwhere += " AND c.cFree2 ='" + cFree2 + "'"; }
  1425. if (!string.IsNullOrWhiteSpace(cFree3)) { sqlwhere += " AND c.cFree3 ='" + cFree3 + "'"; }
  1426. if (!string.IsNullOrWhiteSpace(cFree4)) { sqlwhere += " AND c.cFree4 ='" + cFree4 + "'"; }
  1427. if (!string.IsNullOrWhiteSpace(cFree5)) { sqlwhere += " AND c.cFree5 ='" + cFree5 + "'"; }
  1428. if (!string.IsNullOrWhiteSpace(cFree6)) { sqlwhere += " AND c.cFree6 ='" + cFree6 + "'"; }
  1429. if (!string.IsNullOrWhiteSpace(cFree7)) { sqlwhere += " AND c.cFree7 ='" + cFree7 + "'"; }
  1430. if (!string.IsNullOrWhiteSpace(cFree8)) { sqlwhere += " AND c.cFree8 ='" + cFree8 + "'"; }
  1431. if (!string.IsNullOrWhiteSpace(cFree9)) { sqlwhere += " AND c.cFree9 ='" + cFree9 + "'"; }
  1432. if (!string.IsNullOrWhiteSpace(cFree10)) { sqlwhere += " AND c.cFree10 ='" + cFree10 + "'"; }
  1433. //string ProjectCode, string Batch, string Version, string Brand,
  1434. if (!string.IsNullOrWhiteSpace(ProjectCode)) { sqlwhere += " AND c.ProjectCode ='" + ProjectCode + "'"; }
  1435. if (!string.IsNullOrWhiteSpace(Batch)) { sqlwhere += " AND c.Batch ='" + Batch + "'"; }
  1436. if (!string.IsNullOrWhiteSpace(Version)) { sqlwhere += " AND c.Version ='" + Version + "'"; }
  1437. if (!string.IsNullOrWhiteSpace(Brand)) { sqlwhere += " AND c.Brand ='" + Brand + "'"; }
  1438. string sql = @"-- 2.根据返回的物料信息 查出库存中对应的条码信息 barcodetemp 批次 序列号 仓库 料号
  1439. 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
  1440. from ICSWareHouseLotInfo a inner JOIN ICSInventoryLot b on a.lotno = b.lotno
  1441. LEFT JOIN ICSExtension c on b.extensionid = c.id
  1442. where a.Quantity-a.lockQuantity>0 {9} --order by {2} asc
  1443. IF NOT EXISTS(SELECT 1 FROM #barcodetemp)
  1444. BEGIN
  1445. RAISERROR('',16,1)
  1446. RETURN;
  1447. END
  1448. -- 3.maintemp ID barcodetemp
  1449. BEGIN
  1450. DECLARE @qty DECIMAL(18,6);--
  1451. DECLARE @needqty DECIMAL(18,6);--
  1452. DECLARE @lotno VARCHAR(50);--
  1453. DECLARE @Mtime VARCHAR(50);--
  1454. --
  1455. set @needqty = {4}
  1456. DECLARE tempCursor CURSOR FOR (select lotno from #barcodetemp ); --tempCursor
  1457. OPEN tempCursor; --
  1458. FETCH NEXT FROM tempCursor INTO @Mtime; --
  1459. WHILE @@fetch_status=0
  1460. BEGIN
  1461. IF @needqty>0
  1462. BEGIN
  1463. select top 1 @qty = isnull(quantity,0),@lotno = isnull(lotno,'') from #barcodetemp a where lotno =@Mtime
  1464. BEGIN
  1465. IF(@needqty-@qty>=0 and ISNULL(@lotno, '')<>'')--
  1466. BEGIN
  1467. -- @qty
  1468. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  1469. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  1470. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  1471. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  1472. MTIME,WorkPoint,EATTRIBUTE1,MergeID,EATTRIBUTE3,EATTRIBUTE4)
  1473. SELECT NEWID(),'{5}','{10}','{11}',@lotno ,a.InvCode ,
  1474. c.WarehouseCode,c.LocationCode,'','',@qty,
  1475. '','0','{12}','{16}','1','{6}',
  1476. '{1}','{13}','{14}',f.F_Account ,f.F_RealName ,
  1477. SYSDATETIME() ,a.WorkPoint ,'','','',''
  1478. FROM ICSInventoryLot a
  1479. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  1480. INNER JOIN Sys_SRM_User f ON f.F_Account='{7}' AND a.WorkPoint=f.F_Location
  1481. WHERE a.LotNo=@lotno AND a.WorkPoint='{8}'
  1482. --
  1483. UPDATE ICSWareHouseLotInfo set Quantity =0 where lotno = @lotno
  1484. SET @needqty=@needqty-@qty
  1485. END
  1486. ELSE IF(@needqty-@qty<0 and ISNULL(@lotno, '')<>'')
  1487. BEGIN
  1488. -- @qty
  1489. -- @qty
  1490. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  1491. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  1492. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  1493. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  1494. MTIME,WorkPoint,EATTRIBUTE1,MergeID,EATTRIBUTE3,EATTRIBUTE4)
  1495. SELECT NEWID(),'{5}','{10}','{11}',@lotno ,a.InvCode ,
  1496. c.WarehouseCode,c.LocationCode,'','',@needqty,
  1497. '','0','{12}','{16}','1','{6}',
  1498. '{1}','{13}','{14}',f.F_Account ,f.F_RealName ,
  1499. SYSDATETIME() ,a.WorkPoint ,'','','',''
  1500. FROM ICSInventoryLot a
  1501. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  1502. INNER JOIN Sys_SRM_User f ON f.F_Account='{7}' AND a.WorkPoint=f.F_Location
  1503. WHERE a.LotNo=@lotno AND a.WorkPoint='{8}'
  1504. --
  1505. update ICSWareHouseLotInfo set quantity = @qty-@needqty where lotno = @lotno
  1506. SET @needqty=@needqty-@qty
  1507. END
  1508. END
  1509. END
  1510. FETCH NEXT FROM tempCursor INTO @Mtime;
  1511. END
  1512. CLOSE tempCursor
  1513. DEALLOCATE tempCursor
  1514. -- 退
  1515. IF(@needqty>0)
  1516. BEGIN
  1517. -- -@needqty异常退料
  1518. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  1519. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  1520. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  1521. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  1522. MTIME,WorkPoint,EATTRIBUTE1,MergeID,EATTRIBUTE3,EATTRIBUTE4,EATTRIBUTE10)
  1523. SELECT NEWID(),'{5}','{10}','{11}',@lotno ,a.InvCode ,
  1524. '{3}','','','',-@needqty,
  1525. '','0','{12}','{16}','1','{6}',
  1526. '{1}','{13}','{14}',f.F_Account ,f.F_RealName ,
  1527. SYSDATETIME() ,a.WorkPoint ,'','','','',''
  1528. FROM ICSInventory a
  1529. LEFT JOIN ICSWareHouseLotInfo c ON a.INVCODE=c.invcode AND a.WorkPoint=c.WorkPoint
  1530. INNER JOIN Sys_SRM_User f ON f.F_Account='{7}' AND a.WorkPoint=f.F_Location
  1531. WHERE c.LotNo=@lotno AND a.WorkPoint='{8}'
  1532. --
  1533. update ICSWareHouseLotInfo set quantity = quantity-@needqty where lotno = @lotno
  1534. END
  1535. END
  1536. DROP table #barcodetemp";
  1537. sqlwhere = string.Format(sqlwhere,InvCode, "", "", WHCode, LocaCode);
  1538. sql = string.Format(sql, InvCode, ERPDetailID, MTime, WHCode,
  1539. Quantity, Identification, ERPID, User, WorkPoint, sqlwhere, TransCode, TransSequence,TransType, ERPCode, ERPSequence,LocaCode,BusinessCode);
  1540. #endregion
  1541. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  1542. {
  1543. throw new Exception(language.GetNameByCode("WMSAPIInfo200"));//"倒冲出错!"
  1544. }
  1545. #endregion
  1546. }
  1547. catch (Exception)
  1548. {
  1549. throw;
  1550. }
  1551. }
  1552. /// <summary>
  1553. /// 退货倒冲(反向)
  1554. /// </summary>
  1555. /// <param name="LocationCode"></param>
  1556. /// <param name="LotNo"></param>
  1557. /// <param name="Quantity"></param>
  1558. /// <param name="User"></param>
  1559. /// <param name="WorkPoint"></param>
  1560. /// <param name="TransType"></param>
  1561. /// <param name="BusinessCode"></param>
  1562. /// <param name="cmd"></param>
  1563. /// <param name="jointLotNo"></param>
  1564. public static void WareHouseLotInfoBackIn(string Identification,
  1565. string TransCode, string TransSequence, string InvCode, string WHCode, string Quantity, string User,
  1566. string WorkPoint, string TransType, string BusinessCode, string ERPID, string ERPDetailID, string ERPCode, string ERPSequence,
  1567. string cFree1, string cFree2, string cFree3, string cFree4, string cFree5, string cFree6, string cFree7, string cFree8, string cFree9, string cFree10,
  1568. string ProjectCode, string Batch, string Version, string Brand,
  1569. SqlCommand cmd, Dictionary<string, string> language)
  1570. {
  1571. try
  1572. {
  1573. string MTime = string.Empty;
  1574. string LocaCode = string.Empty;
  1575. //1.查询先进先出字段
  1576. string mtimeSql = @"SELECT Top 1 a.F_ItemName
  1577. FROM Sys_SRM_ItemsDetail a
  1578. INNER JOIN Sys_SRM_Items b ON a.F_ItemId=b.F_Id
  1579. WHERE b.F_EnCode='MtimeControl' AND a.F_EnabledMark='1'
  1580. ORDER BY a.F_SortCode DESc";
  1581. DataTable mtimedt = DBHelper.SQlReturnData(mtimeSql, cmd);
  1582. if (mtimedt.Rows[0]["F_ItemName"].ToString() == "失效日期")
  1583. {
  1584. MTime = "ISNULL(b.ExpirationDate,b.ProductDate)";
  1585. }
  1586. else if (mtimedt.Rows[0]["F_ItemName"].ToString() == "生产日期")
  1587. {
  1588. MTime = "b.ProductDate";
  1589. }
  1590. else if (mtimedt.Rows[0]["F_ItemName"].ToString() == "入库日期")
  1591. {
  1592. MTime = "a.InDate";
  1593. }
  1594. else if (mtimedt.Rows[0]["F_ItemName"].ToString() == "批次")
  1595. {
  1596. MTime = "isnull(c.Batchcode ,'0')";
  1597. }
  1598. string sqlwhere = @"where a.invcode = '{0}' AND D.TransCode ='{" + TransCode + "}' and D.TransSequence='" + TransSequence + "'";
  1599. string sqlpick = @"";
  1600. if (BusinessCode == "11")
  1601. {
  1602. BusinessCode = "60"; TransType = "13";
  1603. sqlwhere = @"select a.lotno,a.invcode,sum(D.quantity ) as quantity into #barcodetemp
  1604. from
  1605. ICSWareHouseLotInfoLOG D
  1606. inner JOIN ICSWareHouseLotInfo a on a.lotno = d.lotno
  1607. inner JOIN ICSInventoryLot b on a.lotno = b.lotno
  1608. inner join ICSODeliveryNotice e on e.ODNCode = d.TransCode and e.Sequence = '" + TransSequence + @"'
  1609. inner join ICSOOPick f on f.OODetailID = e.ODNDetailID and d.TransSequence=e.Sequence+'~'+f.Sequence
  1610. inner join ICSExtension g on g.id=b.ExtensionID
  1611. where d.invcode = '{0}' AND D.TransCode ='" + TransCode + @"' and businesscode ='60' and g.batchcode ='"+ Batch + @"'
  1612. group by a.lotno,a.invcode";
  1613. sqlpick = @"update f set f.IssueQuantity=f.IssueQuantity-"+ Math.Abs(Convert.ToDecimal(Quantity)) + @"
  1614. from ICSODeliveryNotice e
  1615. inner join ICSOOPick f on f.OODetailID = e.ODNDetailID
  1616. where e.ODNCode ='" + TransCode + @"' and e.Sequence = '" + TransSequence + @"'";
  1617. } else { BusinessCode = "61"; TransType = "12"; }
  1618. #region 倒冲
  1619. #region sql
  1620. //and c.batchcode ='{1}' and c.cfree1='{2}'
  1621. string sql = @"--从原倒冲出库的log里捞出库数据
  1622. {9}
  1623. IF NOT EXISTS(SELECT 1 FROM #barcodetemp)
  1624. BEGIN
  1625. RAISERROR('',16,1)
  1626. RETURN;
  1627. END
  1628. -- 3.maintemp ID barcodetemp
  1629. BEGIN
  1630. DECLARE @qty DECIMAL(18,6);--
  1631. DECLARE @needqty DECIMAL(18,6);--
  1632. DECLARE @lotno VARCHAR(50);--
  1633. DECLARE @Mtime VARCHAR(50);--
  1634. --
  1635. set @needqty = {4}
  1636. DECLARE tempCursor CURSOR FOR (select lotno from #barcodetemp ); --tempCursor
  1637. OPEN tempCursor; --
  1638. FETCH NEXT FROM tempCursor INTO @Mtime; --
  1639. WHILE @@fetch_status=0
  1640. BEGIN
  1641. IF @needqty>0
  1642. BEGIN
  1643. select top 1 @qty = isnull(quantity,0),@lotno = isnull(lotno,'') from #barcodetemp a where lotno =@Mtime
  1644. BEGIN
  1645. IF(@needqty-@qty>=0 and ISNULL(@lotno, '')<>'')--
  1646. BEGIN
  1647. -- @qty
  1648. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  1649. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  1650. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  1651. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  1652. MTIME,WorkPoint,EATTRIBUTE1,MergeID,EATTRIBUTE3,EATTRIBUTE4)
  1653. SELECT NEWID(),'{5}','{10}','{11}',@lotno ,a.InvCode ,
  1654. c.WarehouseCode,c.LocationCode,c.WarehouseCode,c.LocationCode,-@qty,
  1655. '','0','{12}','{15}','1','{6}',
  1656. '{1}','{13}','{14}',f.F_Account ,f.F_RealName ,
  1657. SYSDATETIME() ,a.WorkPoint ,'','','',''
  1658. FROM ICSInventoryLot a
  1659. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  1660. INNER JOIN Sys_SRM_User f ON f.F_Account='{7}' AND a.WorkPoint=f.F_Location
  1661. WHERE a.LotNo=@lotno AND a.WorkPoint='{8}'
  1662. --
  1663. UPDATE ICSWareHouseLotInfo set Quantity = Quantity+@qty where lotno = @lotno
  1664. SET @needqty=@needqty-@qty
  1665. END
  1666. ELSE IF(@needqty-@qty<0 and ISNULL(@lotno, '')<>'')
  1667. BEGIN
  1668. -- @qty
  1669. -- @qty
  1670. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  1671. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  1672. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  1673. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  1674. MTIME,WorkPoint,EATTRIBUTE1,MergeID,EATTRIBUTE3,EATTRIBUTE4)
  1675. SELECT NEWID(),'{5}','{10}','{11}',@lotno ,a.InvCode ,
  1676. c.WarehouseCode,c.LocationCode,c.WarehouseCode,c.LocationCode,-@needqty,
  1677. '','0','{12}','{15}','1','{6}',
  1678. '{1}','{13}','{14}',f.F_Account ,f.F_RealName ,
  1679. SYSDATETIME() ,a.WorkPoint ,'','','',''
  1680. FROM ICSInventoryLot a
  1681. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  1682. INNER JOIN Sys_SRM_User f ON f.F_Account='{7}' AND a.WorkPoint=f.F_Location
  1683. WHERE a.LotNo=@lotno AND a.WorkPoint='{8}'
  1684. --
  1685. update ICSWareHouseLotInfo set quantity = quantity+@needqty where lotno = @lotno
  1686. SET @needqty=@needqty-@qty
  1687. END
  1688. END
  1689. END
  1690. FETCH NEXT FROM tempCursor INTO @Mtime;
  1691. END
  1692. CLOSE tempCursor
  1693. DEALLOCATE tempCursor
  1694. {16}
  1695. END
  1696. DROP table #barcodetemp";
  1697. sqlwhere = string.Format(sqlwhere, InvCode, "", "", WHCode);
  1698. sql = string.Format(sql, InvCode, ERPDetailID, MTime, WHCode,
  1699. Math.Abs(Convert.ToDecimal(Quantity)), Identification, ERPID, User, WorkPoint, sqlwhere, TransCode, TransSequence, TransType, ERPCode, ERPSequence,BusinessCode, sqlpick);
  1700. #endregion
  1701. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  1702. {
  1703. throw new Exception(language.GetNameByCode("WMSAPIInfo200"));//"倒冲出错!"
  1704. }
  1705. #endregion
  1706. }
  1707. catch (Exception)
  1708. {
  1709. throw;
  1710. }
  1711. }
  1712. public static void WareHouseLotInfoBackInMF(string Identification,
  1713. string TransCode, string TransSequence, string InvCode, string WHCode, string Quantity, string User,
  1714. string WorkPoint, string TransType, string BusinessCode, string ERPID, string ERPDetailID, string ERPCode, string ERPSequence,
  1715. string cFree1, string cFree2, string cFree3, string cFree4, string cFree5, string cFree6, string cFree7, string cFree8, string cFree9, string cFree10,
  1716. string ProjectCode, string Batch, string Version, string Brand, string PickID,
  1717. SqlCommand cmd, Dictionary<string, string> language)
  1718. {
  1719. try
  1720. {
  1721. string MTime = string.Empty;
  1722. string LocaCode = string.Empty;
  1723. //1.查询先进先出字段
  1724. string mtimeSql = @"SELECT Top 1 a.F_ItemName
  1725. FROM Sys_SRM_ItemsDetail a
  1726. INNER JOIN Sys_SRM_Items b ON a.F_ItemId=b.F_Id
  1727. WHERE b.F_EnCode='MtimeControl' AND a.F_EnabledMark='1'
  1728. ORDER BY a.F_SortCode DESc";
  1729. DataTable mtimedt = DBHelper.SQlReturnData(mtimeSql, cmd);
  1730. if (mtimedt.Rows[0]["F_ItemName"].ToString() == "失效日期")
  1731. {
  1732. MTime = "ISNULL(b.ExpirationDate,b.ProductDate)";
  1733. }
  1734. else if (mtimedt.Rows[0]["F_ItemName"].ToString() == "生产日期")
  1735. {
  1736. MTime = "b.ProductDate";
  1737. }
  1738. else if (mtimedt.Rows[0]["F_ItemName"].ToString() == "入库日期")
  1739. {
  1740. MTime = "a.InDate";
  1741. }
  1742. else if (mtimedt.Rows[0]["F_ItemName"].ToString() == "批次")
  1743. {
  1744. MTime = "isnull(c.Batchcode ,'0')";
  1745. }
  1746. string sqlwhere = @"where a.invcode = '{0}' AND D.TransCode ='{" + TransCode + "}' and D.TransSequence='" + TransSequence + "'";
  1747. string sqlpick = @"";
  1748. if (BusinessCode == "11")
  1749. {
  1750. BusinessCode = "60"; TransType = "13";
  1751. sqlwhere = @"select a.lotno,a.invcode,sum(a.quantity ) as quantity into #barcodetemp
  1752. from ICSWareHouseLotInfo a
  1753. inner JOIN ICSInventoryLot b on a.lotno = b.lotno
  1754. inner join ICSOOPick f on f.PickID = '" + PickID + @"' and a.WarehouseCode = f.WHCode and a.invcode = f.InvCode
  1755. inner join ICSExtension g on g.id=b.ExtensionID
  1756. where a.invcode = '{0}' and g.batchcode ='" + Batch + @"'
  1757. group by a.lotno,a.invcode";
  1758. sqlpick = @"update f set f.IssueQuantity=f.IssueQuantity-" + Math.Abs(Convert.ToDecimal(Quantity)) + @"
  1759. from ICSODeliveryNotice e
  1760. inner join ICSOOPick f on f.OODetailID = e.ODNDetailID
  1761. where e.ODNCode ='" + TransCode + @"' and e.Sequence = '" + TransSequence + @"'";
  1762. }
  1763. else { BusinessCode = "61"; TransType = "12"; }
  1764. #region 倒冲
  1765. #region sql
  1766. //and c.batchcode ='{1}' and c.cfree1='{2}'
  1767. string sql = @"--从原倒冲出库的log里捞出库数据
  1768. {9}
  1769. IF NOT EXISTS(SELECT 1 FROM #barcodetemp)
  1770. BEGIN
  1771. RAISERROR('',16,1)
  1772. RETURN;
  1773. END
  1774. -- 3.maintemp ID barcodetemp
  1775. BEGIN
  1776. DECLARE @qty DECIMAL(18,6);--
  1777. DECLARE @needqty DECIMAL(18,6);--
  1778. DECLARE @lotno VARCHAR(50);--
  1779. DECLARE @Mtime VARCHAR(50);--
  1780. --
  1781. set @needqty = {4}
  1782. DECLARE tempCursor CURSOR FOR (select lotno from #barcodetemp ); --tempCursor
  1783. OPEN tempCursor; --
  1784. FETCH NEXT FROM tempCursor INTO @Mtime; --
  1785. WHILE @@fetch_status=0
  1786. BEGIN
  1787. IF @needqty>0
  1788. BEGIN
  1789. select top 1 @qty = @needqty,@lotno = isnull(lotno,'') from #barcodetemp a where lotno =@Mtime
  1790. BEGIN
  1791. IF(@needqty-@qty>=0 and ISNULL(@lotno, '')<>'')--
  1792. BEGIN
  1793. -- @qty
  1794. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  1795. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  1796. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  1797. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  1798. MTIME,WorkPoint,EATTRIBUTE1,MergeID,EATTRIBUTE3,EATTRIBUTE4)
  1799. SELECT NEWID(),'{5}','{10}','{11}',@lotno ,a.InvCode ,
  1800. c.WarehouseCode,c.LocationCode,c.WarehouseCode,c.LocationCode,-@qty,
  1801. '','0','{12}','{15}','1','{6}',
  1802. '{1}','{13}','{14}',f.F_Account ,f.F_RealName ,
  1803. SYSDATETIME() ,a.WorkPoint ,'','','',''
  1804. FROM ICSInventoryLot a
  1805. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  1806. INNER JOIN Sys_SRM_User f ON f.F_Account='{7}' AND a.WorkPoint=f.F_Location
  1807. WHERE a.LotNo=@lotno AND a.WorkPoint='{8}'
  1808. --
  1809. UPDATE ICSWareHouseLotInfo set Quantity = Quantity+@qty where lotno = @lotno
  1810. SET @needqty=@needqty-@qty
  1811. END
  1812. ELSE IF(@needqty-@qty<0 and ISNULL(@lotno, '')<>'')
  1813. BEGIN
  1814. -- @qty
  1815. -- @qty
  1816. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  1817. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  1818. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  1819. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  1820. MTIME,WorkPoint,EATTRIBUTE1,MergeID,EATTRIBUTE3,EATTRIBUTE4)
  1821. SELECT NEWID(),'{5}','{10}','{11}',@lotno ,a.InvCode ,
  1822. c.WarehouseCode,c.LocationCode,c.WarehouseCode,c.LocationCode,-@needqty,
  1823. '','0','{12}','{15}','1','{6}',
  1824. '{1}','{13}','{14}',f.F_Account ,f.F_RealName ,
  1825. SYSDATETIME() ,a.WorkPoint ,'','','',''
  1826. FROM ICSInventoryLot a
  1827. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  1828. INNER JOIN Sys_SRM_User f ON f.F_Account='{7}' AND a.WorkPoint=f.F_Location
  1829. WHERE a.LotNo=@lotno AND a.WorkPoint='{8}'
  1830. --
  1831. update ICSWareHouseLotInfo set quantity = quantity+@needqty where lotno = @lotno
  1832. SET @needqty=@needqty-@qty
  1833. END
  1834. END
  1835. END
  1836. FETCH NEXT FROM tempCursor INTO @Mtime;
  1837. END
  1838. CLOSE tempCursor
  1839. DEALLOCATE tempCursor
  1840. {16}
  1841. END
  1842. DROP table #barcodetemp";
  1843. sqlwhere = string.Format(sqlwhere, InvCode, "", "", WHCode);
  1844. sql = string.Format(sql, InvCode, ERPDetailID, MTime, WHCode,
  1845. Math.Abs(Convert.ToDecimal(Quantity)), Identification, ERPID, User, WorkPoint, sqlwhere, TransCode, TransSequence, TransType, ERPCode, ERPSequence, BusinessCode, sqlpick);
  1846. #endregion
  1847. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  1848. {
  1849. throw new Exception(language.GetNameByCode("WMSAPIInfo200"));//"倒冲出错!"
  1850. }
  1851. #endregion
  1852. }
  1853. catch (Exception)
  1854. {
  1855. throw;
  1856. }
  1857. }
  1858. /// <summary>
  1859. /// 倒冲前检验数量
  1860. /// </summary>
  1861. /// <param name="LocationCode"></param>
  1862. /// <param name="LotNo"></param>
  1863. /// <param name="Quantity"></param>
  1864. /// <param name="User"></param>
  1865. /// <param name="WorkPoint"></param>
  1866. /// <param name="TransType"></param>
  1867. /// <param name="BusinessCode"></param>
  1868. /// <param name="cmd"></param>
  1869. /// <param name="jointLotNo"></param>
  1870. public static void WareHouseLotInfoBackOutBefore(string Identification, string LocationCode, string LotNo, string Quantity, string User,
  1871. string WorkPoint, string TransType, string BusinessCode, SqlCommand cmd, Dictionary<string, string> language, string LogID, string jointLotNo, string TransCode, string TransSequence)
  1872. {
  1873. try
  1874. {
  1875. string sql = string.Empty;
  1876. string LocaCode = "";
  1877. string DisVenCode = "";
  1878. string ssql = @"SELECT a.ODNCode,a.Sequence,a.WorkPoint,a.VenCode
  1879. FROM ICSODeliveryNotice a
  1880. WHERE a.ODNCode='{0}' AND a.WorkPoint='{1}'";
  1881. ssql = string.Format(ssql, TransCode, WorkPoint);
  1882. DataTable ssdt = DBHelper.SQlReturnData(ssql, cmd);
  1883. if (ssdt.Rows.Count > 0)
  1884. {
  1885. DisVenCode = ssdt.Rows[0]["VenCode"].ToString();
  1886. }
  1887. string cheksql = @"select b.F_ItemCode as VenCode ,b.F_ItemName as Name,b.F_EnabledMark AS Enable ,b.F_Define1 AS LocationCode
  1888. from Sys_SRM_Items a
  1889. left join Sys_SRM_ItemsDetail b on a.F_Id=b.F_ItemId
  1890. where a.F_EnCode='WWLocation' AND b.F_ItemCode='{0}'
  1891. ";
  1892. cheksql = string.Format(cheksql, DisVenCode);
  1893. DataTable chekdt = DBHelper.SQlReturnData(cheksql, cmd);
  1894. if (chekdt.Rows.Count > 0)
  1895. {
  1896. LocaCode = chekdt.Rows[0]["LocationCode"].ToString();
  1897. }
  1898. string chekscsql = @"SELECT a.InvCode FROM ICSMOPick a
  1899. inner join ICSMO c on a.MODetailID=c.MODetailID and a.WorkPoint=c.WorkPoint
  1900. LEFT JOIN ICSINVENTORY b ON a.InvCode = b.InvCode AND a.WorkPoint=b.WorkPoint
  1901. INNER JOIN ICSExtension ext ON a.ExtensionID=ext.ID AND a.WorkPoint=ext.WorkPoint
  1902. INNER JOIN ICSInventoryLotDetail d ON c.OOCode=d.TransCode AND c.Sequence=d.TransSequence and c.WorkPoint=d.WorkPoint
  1903. where d.LotNo='{0}' and a.WorkPoint='{1}' and a.SupplyType='1' and a.quantity>0";
  1904. chekscsql = string.Format(chekscsql, LotNo, WorkPoint);
  1905. DataTable chekcdts = DBHelper.SQlReturnData(chekscsql, cmd);
  1906. for (int i = 0; i < chekcdts.Rows.Count; i++)
  1907. {
  1908. #region 成品(生产)入库,倒冲
  1909. if (BusinessCode.Equals(TransTypeEnum.ManufactureReceiveDoc.GetDescription<DBValue>()))
  1910. {
  1911. #region sql
  1912. sql = @"-- 1.创建临时表 初始单据数据 maintemp
  1913. SELECT
  1914. c.MOCode AS TransCode,
  1915. a.MODetailID AS DetailID,
  1916. a.InvCode,
  1917. b.InvName,
  1918. b.InvStd,
  1919. a.Quantity AS Quantity,
  1920. a.Amount,
  1921. a.Sequence AS TransSequence,
  1922. a.IssueQuantity,
  1923. c.Sequence,
  1924. inv.InvUnit,
  1925. cast(0 as decimal(18,6)) AS LocationQty,
  1926. inv.AmountUnit,
  1927. a.ExtensionID,
  1928. a.WorkPoint,
  1929. ext.ProjectCode,
  1930. CASE WHEN ISNULL(inv.BatchEnable, '0')='1' THEN ext.BatchCode ELSE '' END AS BatchCode,
  1931. ext.Version,
  1932. ext.Brand,
  1933. ext.cFree1,
  1934. ext.cFree2,
  1935. ext.cFree3,
  1936. ext.cFree4,
  1937. ext.cFree5,
  1938. ext.cFree6,
  1939. ext.cFree7,
  1940. ext.cFree8,
  1941. ext.cFree9,
  1942. ext.cFree10,a.WHCODE
  1943. INTO #maintemp
  1944. FROM
  1945. ICSMOPick a
  1946. inner join ICSMO c on a.MODetailID=c.MODetailID and a.WorkPoint=c.WorkPoint
  1947. LEFT JOIN ICSINVENTORY b ON a.InvCode = b.InvCode AND a.WorkPoint=b.WorkPoint
  1948. INNER JOIN ICSExtension ext ON a.ExtensionID=ext.ID AND a.WorkPoint=ext.WorkPoint
  1949. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  1950. INNER JOIN (
  1951. SELECT a.MOCode,a.Sequence,a.WorkPoint
  1952. FROM ICSMO a
  1953. INNER JOIN ICSInventoryLotDetail b ON b.TransCode=a.MOCode AND b.TransSequence=a.Sequence AND b.WorkPoint=a.WorkPoint
  1954. INNER JOIN ICSInventoryLot c ON c.LotNo=b.LotNo AND c.WorkPoint=b.WorkPoint
  1955. WHERE c.LotNo='{0}' AND c.WorkPoint='{1}'
  1956. ) temp ON c.MOCode=temp.MOCode AND a.WorkPoint=temp.WorkPoint AND c.Sequence=temp.Sequence
  1957. WHERE a.SupplyType='1' and a.invcode='{2}'
  1958. 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,
  1959. 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;
  1960. select * into #resulttemp from #maintemp
  1961. ALTER TABLE #resulttemp ADD LotNo VARCHAR(50)
  1962. delete from #resulttemp
  1963. -- 2.maintemp barcodetemp
  1964. 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
  1965. (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
  1966. -- 3.maintemp ID barcodetemp
  1967. BEGIN
  1968. DECLARE @transSequence int;--
  1969. DECLARE @qty decimal(18,6);--
  1970. DECLARE @needqty decimal(18,6);--
  1971. DECLARE @lotno VARCHAR(50);--
  1972. DECLARE @DetailID VARCHAR(50);--ID
  1973. DECLARE tempCursor CURSOR FOR (select transSequence,DetailID from #maintemp); --tempCursor
  1974. OPEN tempCursor; --
  1975. FETCH NEXT FROM tempCursor INTO @transSequence,@DetailID; --
  1976. WHILE @@fetch_status=0
  1977. BEGIN
  1978. select @needqty=Quantity from #maintemp where transSequence = @transSequence AND DetailID = @DetailID
  1979. PRINT @transSequence
  1980. WHILE @needqty>0
  1981. BEGIN
  1982. select top 1 @qty = isnull(quantity,0),@lotno = isnull(lotno,'') from #barcodetemp a
  1983. RIGHT JOIN (select invcode from #maintemp where transSequence = @transSequence AND DetailID = @DetailID) b on a.invcode=b.invcode ORDER BY mtime
  1984. BEGIN
  1985. IF(@needqty-@qty>=0 and ISNULL(@lotno, '')<>'')
  1986. BEGIN
  1987. insert INTO #resulttemp (lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity,Quantity,
  1988. Amount,InvCode,InvName,InvStd,InvUnit,LocationQty,AmountUnit,
  1989. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint)
  1990. SELECT @lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity, Quantity,
  1991. ISNULL(Amount, 0), InvCode,InvName,ISNULL(InvStd, ''),InvUnit,@qty,ISNULL(AmountUnit, ''),
  1992. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint from #maintemp
  1993. where #maintemp.transSequence = @transSequence AND DetailID = @DetailID
  1994. delete from #barcodetemp where lotno = @lotno
  1995. SET @needqty=@needqty-@qty
  1996. END
  1997. ELSE IF(@needqty-@qty<0 and ISNULL(@lotno, '')<>'')
  1998. BEGIN
  1999. insert INTO #resulttemp (lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity,Quantity,
  2000. Amount,InvCode,InvName,InvStd,InvUnit,LocationQty,AmountUnit,
  2001. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint)
  2002. SELECT @lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity, Quantity,
  2003. ISNULL(Amount, 0),InvCode,InvName,ISNULL(InvStd, ''),InvUnit,@needqty,ISNULL(AmountUnit, ''),
  2004. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint from #maintemp
  2005. where #maintemp.transSequence = @transSequence AND DetailID = @DetailID
  2006. update #barcodetemp set quantity = @qty-@needqty where lotno = @lotno
  2007. SET @needqty=@needqty-@qty
  2008. END
  2009. ELSE
  2010. BEGIN
  2011. insert INTO #resulttemp (lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity,Quantity,
  2012. Amount,InvCode,InvName,InvStd,InvUnit,LocationQty,AmountUnit,
  2013. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint)
  2014. SELECT @lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity, Quantity,
  2015. ISNULL(Amount, 0),InvCode,InvName,ISNULL(InvStd, ''),InvUnit,0,ISNULL(AmountUnit, ''),
  2016. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint from #maintemp
  2017. where #maintemp.transSequence = @transSequence AND DetailID = @DetailID
  2018. SET @needqty=0
  2019. END
  2020. END
  2021. END
  2022. FETCH NEXT FROM tempCursor INTO @transSequence,@DetailID;
  2023. END
  2024. CLOSE tempCursor
  2025. DEALLOCATE tempCursor
  2026. END
  2027. select TransCode,LotNo,LocationQty AS Quantity,InvCode,DetailID,Sequence,TransSequence from #resulttemp
  2028. --select * from #resulttemp
  2029. DROP table #maintemp
  2030. DROP table #resulttemp
  2031. DROP table #barcodetemp";
  2032. #endregion
  2033. sql = String.Format(sql, LotNo, WorkPoint, Quantity, chekcdts.Rows[i]["InvCode"].ToString());
  2034. DataTable table = DBHelper.SQlReturnData(sql, cmd);
  2035. string json = JsonConvert.SerializeObject(table);
  2036. List<DownItemModel> downItemModels = JsonConvert.DeserializeObject<List<DownItemModel>>(json);
  2037. if (downItemModels.Count == 0)
  2038. {
  2039. throw new Exception(language.GetNameByCode("WMSAPIInfo201"));
  2040. }
  2041. //foreach (DownItemModel model in downItemModels)
  2042. //{
  2043. // if (model != null && model.LotNo == null || "" == model.LotNo)
  2044. // {
  2045. // throw new Exception(language.GetNameByCode("WMSAPIInfo201"));
  2046. // }
  2047. //}
  2048. }
  2049. #endregion
  2050. }
  2051. string chekcsql = @"SELECT a.InvCode FROM ICSOOPick a
  2052. inner join ICSOutsourcingOrder c on a.OODetailID=c.OODetailID and a.WorkPoint=c.WorkPoint
  2053. LEFT JOIN ICSINVENTORY b ON a.InvCode = b.InvCode AND a.WorkPoint=b.WorkPoint
  2054. INNER JOIN ICSExtension ext ON a.ExtensionID=ext.ID AND a.WorkPoint=ext.WorkPoint
  2055. INNER JOIN ICSInventoryLotDetail d ON c.OOCode=d.TransCode AND c.Sequence=d.TransSequence and c.WorkPoint=d.WorkPoint
  2056. where d.LotNo='{0}' and a.WorkPoint='{1}' and a.SupplyType='1' and a.quantity>0";
  2057. chekcsql = string.Format(chekcsql, LotNo, WorkPoint);
  2058. DataTable chekcdt = DBHelper.SQlReturnData(chekcsql, cmd);
  2059. for (int i = 0; i < chekcdt.Rows.Count; i++)
  2060. {
  2061. #region 委外入库,倒冲
  2062. if (BusinessCode.Equals(TransTypeEnum.OutsourcingReceiveDoc.GetDescription<DBValue>())|| BusinessCode.Equals(TransTypeEnum.ODeliveryNotice.GetDescription<DBValue>()))
  2063. {
  2064. if (LocaCode.Equals(""))
  2065. {
  2066. #region sql
  2067. sql = @"-- 1.创建临时表 初始单据数据 maintemp
  2068. SELECT
  2069. c.OOCode AS TransCode,
  2070. a.OODetailID AS DetailID,
  2071. a.InvCode,
  2072. b.InvName,
  2073. b.InvStd,
  2074. a.Quantity AS Quantity,
  2075. a.Amount,
  2076. a.Sequence AS TransSequence,
  2077. a.IssueQuantity,
  2078. c.Sequence,
  2079. inv.InvUnit,
  2080. cast(0 as decimal(18,6)) AS LocationQty,
  2081. inv.AmountUnit,
  2082. a.ExtensionID,
  2083. a.WorkPoint,
  2084. ext.ProjectCode,
  2085. CASE WHEN ISNULL(inv.BatchEnable, '0')='1' THEN ext.BatchCode ELSE '' END AS BatchCode,
  2086. ext.Version,
  2087. ext.Brand,
  2088. ext.cFree1,
  2089. ext.cFree2,
  2090. ext.cFree3,
  2091. ext.cFree4,
  2092. ext.cFree5,
  2093. ext.cFree6,
  2094. ext.cFree7,
  2095. ext.cFree8,
  2096. ext.cFree9,
  2097. ext.cFree10,a.WHCODE
  2098. INTO #maintemp
  2099. FROM
  2100. ICSOOPick a
  2101. inner join ICSOutsourcingOrder c on a.OODetailID=c.OODetailID and a.WorkPoint=c.WorkPoint
  2102. LEFT JOIN ICSINVENTORY b ON a.InvCode = b.InvCode AND a.WorkPoint=b.WorkPoint
  2103. INNER JOIN ICSExtension ext ON a.ExtensionID=ext.ID AND a.WorkPoint=ext.WorkPoint
  2104. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  2105. INNER JOIN (
  2106. SELECT a.OOCode,a.Sequence,a.WorkPoint
  2107. FROM ICSOutsourcingOrder a
  2108. INNER JOIN ICSInventoryLotDetail b ON b.TransCode=a.OOCode AND b.TransSequence=a.Sequence AND b.WorkPoint=a.WorkPoint
  2109. INNER JOIN ICSInventoryLot c ON c.LotNo=b.LotNo AND c.WorkPoint=b.WorkPoint
  2110. WHERE c.LotNo='{0}' AND c.WorkPoint='{1}'
  2111. ) temp ON c.OOCode=temp.OOCode AND a.WorkPoint=temp.WorkPoint AND c.Sequence=temp.Sequence
  2112. WHERE a.SupplyType='1' and a.invcode='{4}'
  2113. 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,
  2114. 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;
  2115. select * into #resulttemp from #maintemp
  2116. ALTER TABLE #resulttemp ADD LotNo VARCHAR(50)
  2117. delete from #resulttemp
  2118. -- 2.maintemp barcodetemp
  2119. 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
  2120. (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
  2121. -- 3.maintemp ID barcodetemp
  2122. BEGIN
  2123. DECLARE @transSequence int;--
  2124. DECLARE @qty decimal(18,6);--
  2125. DECLARE @needqty decimal(18,6);--
  2126. DECLARE @lotno VARCHAR(50);--
  2127. DECLARE @DetailID VARCHAR(50);--ID
  2128. DECLARE tempCursor CURSOR FOR (select transSequence,DetailID from #maintemp); --tempCursor
  2129. OPEN tempCursor; --
  2130. FETCH NEXT FROM tempCursor INTO @transSequence,@DetailID; --
  2131. WHILE @@fetch_status=0
  2132. BEGIN
  2133. select @needqty=Quantity from #maintemp where transSequence = @transSequence AND DetailID = @DetailID
  2134. PRINT @transSequence
  2135. WHILE @needqty>0
  2136. BEGIN
  2137. select top 1 @qty = isnull(quantity,0),@lotno = isnull(lotno,'') from #barcodetemp a
  2138. RIGHT JOIN (select invcode from #maintemp where transSequence = @transSequence AND DetailID = @DetailID) b on a.invcode=b.invcode ORDER BY mtime
  2139. BEGIN
  2140. IF(@needqty-@qty>=0 and ISNULL(@lotno, '')<>'')
  2141. BEGIN
  2142. insert INTO #resulttemp (lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity,Quantity,
  2143. Amount,InvCode,InvName,InvStd,InvUnit,LocationQty,AmountUnit,
  2144. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint)
  2145. SELECT @lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity, Quantity,
  2146. ISNULL(Amount, 0), InvCode,InvName,ISNULL(InvStd, ''),InvUnit,@qty,ISNULL(AmountUnit, ''),
  2147. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint from #maintemp
  2148. where #maintemp.transSequence = @transSequence AND DetailID = @DetailID
  2149. delete from #barcodetemp where lotno = @lotno
  2150. SET @needqty=@needqty-@qty
  2151. END
  2152. ELSE IF(@needqty-@qty<0 and ISNULL(@lotno, '')<>'')
  2153. BEGIN
  2154. insert INTO #resulttemp (lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity,Quantity,
  2155. Amount,InvCode,InvName,InvStd,InvUnit,LocationQty,AmountUnit,
  2156. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint)
  2157. SELECT @lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity, Quantity,
  2158. ISNULL(Amount, 0),InvCode,InvName,ISNULL(InvStd, ''),InvUnit,@needqty,ISNULL(AmountUnit, ''),
  2159. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint from #maintemp
  2160. where #maintemp.transSequence = @transSequence AND DetailID = @DetailID
  2161. update #barcodetemp set quantity = @qty-@needqty where lotno = @lotno
  2162. SET @needqty=@needqty-@qty
  2163. END
  2164. ELSE
  2165. BEGIN
  2166. insert INTO #resulttemp (lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity,Quantity,
  2167. Amount,InvCode,InvName,InvStd,InvUnit,LocationQty,AmountUnit,
  2168. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint)
  2169. SELECT @lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity, Quantity,
  2170. ISNULL(Amount, 0),InvCode,InvName,ISNULL(InvStd, ''),InvUnit,0,ISNULL(AmountUnit, ''),
  2171. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint from #maintemp
  2172. where #maintemp.transSequence = @transSequence AND DetailID = @DetailID
  2173. SET @needqty=0
  2174. END
  2175. END
  2176. END
  2177. FETCH NEXT FROM tempCursor INTO @transSequence,@DetailID;
  2178. END
  2179. CLOSE tempCursor
  2180. DEALLOCATE tempCursor
  2181. END
  2182. select TransCode,LotNo,LocationQty AS Quantity,InvCode,DetailID,Sequence,TransSequence from #resulttemp
  2183. --select * from #resulttemp
  2184. DROP table #maintemp
  2185. DROP table #resulttemp
  2186. DROP table #barcodetemp";
  2187. #endregion
  2188. }
  2189. else
  2190. {
  2191. #region sql
  2192. sql = @"-- 1.创建临时表 初始单据数据 maintemp
  2193. SELECT
  2194. c.OOCode AS TransCode,
  2195. a.OODetailID AS DetailID,
  2196. a.InvCode,
  2197. b.InvName,
  2198. b.InvStd,
  2199. a.Quantity AS Quantity,
  2200. a.Amount,
  2201. a.Sequence AS TransSequence,
  2202. a.IssueQuantity,
  2203. c.Sequence,
  2204. inv.InvUnit,
  2205. cast(0 as decimal(18,6)) AS LocationQty,
  2206. inv.AmountUnit,
  2207. a.ExtensionID,
  2208. a.WorkPoint,
  2209. ext.ProjectCode,
  2210. CASE WHEN ISNULL(inv.BatchEnable, '0')='1' THEN ext.BatchCode ELSE '' END AS BatchCode,
  2211. ext.Version,
  2212. ext.Brand,
  2213. ext.cFree1,
  2214. ext.cFree2,
  2215. ext.cFree3,
  2216. ext.cFree4,
  2217. ext.cFree5,
  2218. ext.cFree6,
  2219. ext.cFree7,
  2220. ext.cFree8,
  2221. ext.cFree9,
  2222. ext.cFree10,a.WHCODE
  2223. INTO #maintemp
  2224. FROM
  2225. ICSOOPick a
  2226. inner join ICSOutsourcingOrder c on a.OODetailID=c.OODetailID and a.WorkPoint=c.WorkPoint
  2227. LEFT JOIN ICSINVENTORY b ON a.InvCode = b.InvCode AND a.WorkPoint=b.WorkPoint
  2228. INNER JOIN ICSExtension ext ON a.ExtensionID=ext.ID AND a.WorkPoint=ext.WorkPoint
  2229. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  2230. INNER JOIN (
  2231. SELECT a.OOCode,a.Sequence,a.WorkPoint
  2232. FROM ICSOutsourcingOrder a
  2233. INNER JOIN ICSInventoryLotDetail b ON b.TransCode=a.OOCode AND b.TransSequence=a.Sequence AND b.WorkPoint=a.WorkPoint
  2234. INNER JOIN ICSInventoryLot c ON c.LotNo=b.LotNo AND c.WorkPoint=b.WorkPoint
  2235. WHERE c.LotNo='{0}' AND c.WorkPoint='{1}'
  2236. ) temp ON c.OOCode=temp.OOCode AND a.WorkPoint=temp.WorkPoint AND c.Sequence=temp.Sequence
  2237. WHERE a.SupplyType='1' and a.invcode='{4}'
  2238. 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,
  2239. 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;
  2240. select * into #resulttemp from #maintemp
  2241. ALTER TABLE #resulttemp ADD LotNo VARCHAR(50)
  2242. delete from #resulttemp
  2243. -- 2.maintemp barcodetemp
  2244. 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
  2245. (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
  2246. -- 3.maintemp ID barcodetemp
  2247. BEGIN
  2248. DECLARE @transSequence int;--
  2249. DECLARE @qty decimal(18,6);--
  2250. DECLARE @needqty decimal(18,6);--
  2251. DECLARE @lotno VARCHAR(50);--
  2252. DECLARE @DetailID VARCHAR(50);--ID
  2253. DECLARE tempCursor CURSOR FOR (select transSequence,DetailID from #maintemp); --tempCursor
  2254. OPEN tempCursor; --
  2255. FETCH NEXT FROM tempCursor INTO @transSequence,@DetailID; --
  2256. WHILE @@fetch_status=0
  2257. BEGIN
  2258. select @needqty=Quantity from #maintemp where transSequence = @transSequence AND DetailID = @DetailID
  2259. PRINT @transSequence
  2260. WHILE @needqty>0
  2261. BEGIN
  2262. select top 1 @qty = isnull(quantity,0),@lotno = isnull(lotno,'') from #barcodetemp a
  2263. RIGHT JOIN (select invcode from #maintemp where transSequence = @transSequence AND DetailID = @DetailID) b on a.invcode=b.invcode ORDER BY mtime
  2264. BEGIN
  2265. IF(@needqty-@qty>=0 and ISNULL(@lotno, '')<>'')
  2266. BEGIN
  2267. insert INTO #resulttemp (lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity,Quantity,
  2268. Amount,InvCode,InvName,InvStd,InvUnit,LocationQty,AmountUnit,
  2269. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint)
  2270. SELECT @lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity, Quantity,
  2271. ISNULL(Amount, 0), InvCode,InvName,ISNULL(InvStd, ''),InvUnit,@qty,ISNULL(AmountUnit, ''),
  2272. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint from #maintemp
  2273. where #maintemp.transSequence = @transSequence AND DetailID = @DetailID
  2274. delete from #barcodetemp where lotno = @lotno
  2275. SET @needqty=@needqty-@qty
  2276. END
  2277. ELSE IF(@needqty-@qty<0 and ISNULL(@lotno, '')<>'')
  2278. BEGIN
  2279. insert INTO #resulttemp (lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity,Quantity,
  2280. Amount,InvCode,InvName,InvStd,InvUnit,LocationQty,AmountUnit,
  2281. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint)
  2282. SELECT @lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity, Quantity,
  2283. ISNULL(Amount, 0),InvCode,InvName,ISNULL(InvStd, ''),InvUnit,@needqty,ISNULL(AmountUnit, ''),
  2284. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint from #maintemp
  2285. where #maintemp.transSequence = @transSequence AND DetailID = @DetailID
  2286. update #barcodetemp set quantity = @qty-@needqty where lotno = @lotno
  2287. SET @needqty=@needqty-@qty
  2288. END
  2289. ELSE
  2290. BEGIN
  2291. insert INTO #resulttemp (lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity,Quantity,
  2292. Amount,InvCode,InvName,InvStd,InvUnit,LocationQty,AmountUnit,
  2293. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint)
  2294. SELECT @lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity, Quantity,
  2295. ISNULL(Amount, 0),InvCode,InvName,ISNULL(InvStd, ''),InvUnit,0,ISNULL(AmountUnit, ''),
  2296. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint from #maintemp
  2297. where #maintemp.transSequence = @transSequence AND DetailID = @DetailID
  2298. SET @needqty=0
  2299. END
  2300. END
  2301. END
  2302. FETCH NEXT FROM tempCursor INTO @transSequence,@DetailID;
  2303. END
  2304. CLOSE tempCursor
  2305. DEALLOCATE tempCursor
  2306. END
  2307. select TransCode,LotNo,LocationQty AS Quantity,InvCode,DetailID,Sequence,TransSequence from #resulttemp
  2308. --select * from #resulttemp
  2309. DROP table #maintemp
  2310. DROP table #resulttemp
  2311. DROP table #barcodetemp";
  2312. #endregion
  2313. }
  2314. sql = String.Format(sql, LotNo, WorkPoint, Quantity,LocaCode, chekcdt.Rows[i]["InvCode"].ToString());
  2315. log.Debug("倒冲前检验子件数量sql:"+sql);
  2316. DataTable table = DBHelper.SQlReturnData(sql, cmd);
  2317. string json = JsonConvert.SerializeObject(table);
  2318. List<DownItemModel> downItemModels = JsonConvert.DeserializeObject<List<DownItemModel>>(json);
  2319. if (downItemModels.Count==0)
  2320. {
  2321. throw new Exception(language.GetNameByCode("WMSAPIInfo201"));
  2322. }
  2323. //foreach (DownItemModel model in downItemModels)
  2324. //{
  2325. // if (model != null && model.LotNo == null || "" == model.LotNo)
  2326. // {
  2327. // }
  2328. //}
  2329. }
  2330. #endregion
  2331. }
  2332. }
  2333. catch (Exception ex)
  2334. {
  2335. log.Debug(ex.ToString());
  2336. }
  2337. }
  2338. /// <summary>
  2339. /// 添加库存(奥美专用)
  2340. /// </summary>
  2341. /// <param name="LocationCode"></param>
  2342. /// <param name="LotNo"></param>
  2343. /// <param name="Quantity"></param>
  2344. /// <param name="User"></param>
  2345. /// <param name="WorkPoint"></param>
  2346. /// <param name="TransType"></param>
  2347. /// <param name="BusinessCode"></param>
  2348. /// <param name="cmd"></param>
  2349. /// <param name="jointLotNo"></param>
  2350. public static void WareHouseLotInfoUpAM(string Identification, string LocationCode, string LotNo, string Quantity, string User,
  2351. string WorkPoint, string TransType, string BusinessCode, SqlCommand cmd, Dictionary<string, string> language, string LogID, string jointLotNo,string TransCode,string TransSequence)
  2352. {
  2353. try
  2354. {
  2355. #region 正常入库
  2356. ///添加库存(原条码退回,更新库存;新条码直接入库)
  2357. //stirng locationcode = "";
  2358. string sql = string.Empty;
  2359. string locationcode = "";
  2360. string newlocationcode = "";
  2361. string amount = "";
  2362. //string sqql = @"select a.Amount FROM ICSInventoryLot a
  2363. // WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  2364. //sqql = string.Format(sqql, LotNo, WorkPoint);
  2365. //DataTable dtaa = DBHelper.SQlReturnData(sqql, cmd);
  2366. //amount = dtaa.Rows[0]["Amount"].ToString();
  2367. //string cheksql = @"select d.EATTRIBUTE1 FROM ICSInventoryLot a
  2368. // INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  2369. // INNER JOIN ICSInventory d on a.InvCode=d.InvCode and a.WorkPoint=d.WorkPoint
  2370. // WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' and d.AmountEnable='1'";
  2371. //cheksql = string.Format(cheksql, LotNo, WorkPoint);
  2372. //DataTable dta = DBHelper.SQlReturnData(cheksql, cmd);
  2373. //if (dta.Rows.Count > 0)
  2374. //{
  2375. // Quantity = (decimal.Parse(Quantity) * decimal.Parse(dta.Rows[0]["EATTRIBUTE1"].ToString())).ToString();
  2376. //}
  2377. if (BusinessCode != TransTypeEnum.SalesReturnBack.GetDescription<DBValue>())
  2378. {
  2379. if (string.IsNullOrWhiteSpace(LogID))
  2380. {
  2381. sql = @"IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}')
  2382. BEGIN
  2383. RAISERROR('" + language.GetNameByCode("WMSAPIInfo164") + @"',16,1);
  2384. RETURN
  2385. END ";
  2386. }
  2387. else
  2388. {
  2389. sql = @"SELECT LocationCode FROM ICSWareHouseLotInfo a WHERE LotNo='{0}' AND WorkPoint='{1}'";
  2390. sql = string.Format(sql, LotNo, WorkPoint);
  2391. DataTable dt = DBHelper.SQlReturnData(sql, cmd);
  2392. if (dt == null || dt.Rows.Count <= 0)
  2393. {
  2394. throw new Exception(string.Format(language.GetNameByCode("WMSAPIInfo171"), LotNo));
  2395. }
  2396. locationcode = dt.Rows[0]["LocationCode"].ToString();
  2397. }
  2398. }
  2399. if(BusinessCode == TransTypeEnum.MOIssueDocNegative.GetDescription<DBValue>())
  2400. {
  2401. sql = @"SELECT FromLocationCode FROM ICSWareHouseLotInfoLog a WHERE LotNo='{0}' AND WorkPoint='{1}' AND ID='{2}'";
  2402. sql = string.Format(sql, LotNo, WorkPoint,LogID);
  2403. DataTable dt = DBHelper.SQlReturnData(sql, cmd);
  2404. if (dt == null || dt.Rows.Count <= 0)
  2405. {
  2406. throw new Exception(string.Format(language.GetNameByCode("WMSAPIInfo171"), LotNo));
  2407. }
  2408. newlocationcode = dt.Rows[0]["FromLocationCode"].ToString();
  2409. sql += @" IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  2410. BEGIN
  2411. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  2412. RETURN
  2413. END
  2414. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}')
  2415. BEGIN
  2416. IF EXISTS(SELECT a.LotNO FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND a.Quantity=0)
  2417. BEGIN
  2418. UPDATE a SET a.Quantity=ISNULL(a.Quantity,0)+'{3}',WarehouseCode=e.WarehouseCode,LocationCode=d.LocationCode
  2419. From ICSWareHouseLotInfo a
  2420. INNER JOIN ICSLocation d ON d.LocationCode='{4}' AND a.WorkPoint=d.WorkPoint
  2421. INNER JOIN ICSWarehouse e ON d.WHID=e.ID AND d.WorkPoint=e.WorkPoint
  2422. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  2423. END
  2424. ELSE IF EXISTS(SELECT a.LotNO FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND a.LocationCode='{4}')
  2425. BEGIN
  2426. UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)+'{3}'
  2427. WHERE LotNo='{0}' AND WorkPoint='{1}'
  2428. END
  2429. ELSE IF('" + locationcode + @"' != '{4}')
  2430. BEGIN
  2431. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo395"), "{4}", locationcode) + @"', 16, 1);
  2432. RETURN
  2433. END
  2434. END
  2435. ELSE
  2436. BEGIN
  2437. IF EXISTS(SELECT il.InvCode FROM ICSInventoryLocation il
  2438. INNER JOIN ICSInventoryLot a ON a.InvCode=il.InvCode AND a.WorkPoint=il.WorkPoint
  2439. WHERE il.Enable='1' AND a.LotNo='{0}' AND a.WorkPoint='{1}')
  2440. BEGIN
  2441. IF NOT EXISTS(SELECT il.InvCode FROM ICSInventoryLocation il
  2442. INNER JOIN ICSInventoryLot a ON a.InvCode=il.InvCode AND a.WorkPoint=il.WorkPoint
  2443. WHERE il.Enable='1' AND a.LotNo='{0}' AND a.WorkPoint='{1}' AND il.LocationCode='{4}')
  2444. BEGIN
  2445. RAISERROR('" + language.GetNameByCode("WMSAPIInfo180") + @"',16,1);
  2446. RETURN
  2447. END
  2448. END
  2449. INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  2450. SELECT NEWID(),a.LotNo ,e.WarehouseCode,d.LocationCode,a.InvCode ,'{3}',SYSDATETIME(),'0',f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint ,''
  2451. FROM ICSInventoryLot a
  2452. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  2453. --INNER JOIN ICSOApplyNegDetail c ON b.TransCode=c.OApplyNegCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  2454. INNER JOIN ICSLocation d ON d.LocationCode='{4}' AND a.WorkPoint=d.WorkPoint
  2455. INNER JOIN ICSWarehouse e ON d.WHID=e.ID AND d.WorkPoint=e.WorkPoint
  2456. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  2457. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  2458. END";
  2459. sql = string.Format(sql, LotNo, WorkPoint, User, Quantity, newlocationcode);
  2460. }
  2461. else
  2462. {
  2463. sql += @" IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  2464. BEGIN
  2465. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  2466. RETURN
  2467. END
  2468. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}')
  2469. BEGIN
  2470. IF EXISTS(SELECT a.LotNO FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND a.Quantity=0)
  2471. BEGIN
  2472. UPDATE a SET a.Quantity=ISNULL(a.Quantity,0)+'{3}',WarehouseCode=e.WarehouseCode,LocationCode=d.LocationCode
  2473. From ICSWareHouseLotInfo a
  2474. INNER JOIN ICSLocation d ON d.LocationCode='{4}' AND a.WorkPoint=d.WorkPoint
  2475. INNER JOIN ICSWarehouse e ON d.WHID=e.ID AND d.WorkPoint=e.WorkPoint
  2476. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  2477. END
  2478. ELSE IF EXISTS(SELECT a.LotNO FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND a.LocationCode='{4}')
  2479. BEGIN
  2480. UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)+'{3}'
  2481. WHERE LotNo='{0}' AND WorkPoint='{1}'
  2482. END
  2483. ELSE IF('" + locationcode + @"' != '{4}')
  2484. BEGIN
  2485. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo395"), "{4}", locationcode) + @"', 16, 1);
  2486. RETURN
  2487. END
  2488. END
  2489. ELSE
  2490. BEGIN
  2491. IF EXISTS(SELECT il.InvCode FROM ICSInventoryLocation il
  2492. INNER JOIN ICSInventoryLot a ON a.InvCode=il.InvCode AND a.WorkPoint=il.WorkPoint
  2493. WHERE il.Enable='1' AND a.LotNo='{0}' AND a.WorkPoint='{1}')
  2494. BEGIN
  2495. IF NOT EXISTS(SELECT il.InvCode FROM ICSInventoryLocation il
  2496. INNER JOIN ICSInventoryLot a ON a.InvCode=il.InvCode AND a.WorkPoint=il.WorkPoint
  2497. WHERE il.Enable='1' AND a.LotNo='{0}' AND a.WorkPoint='{1}' AND il.LocationCode='{4}')
  2498. BEGIN
  2499. RAISERROR('" + language.GetNameByCode("WMSAPIInfo180") + @"',16,1);
  2500. RETURN
  2501. END
  2502. END
  2503. INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  2504. SELECT NEWID(),a.LotNo ,e.WarehouseCode,d.LocationCode,a.InvCode ,'{3}',SYSDATETIME(),'0',f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint ,''
  2505. FROM ICSInventoryLot a
  2506. --INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  2507. --INNER JOIN ICSOApplyNegDetail c ON b.TransCode=c.OApplyNegCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  2508. INNER JOIN ICSLocation d ON d.LocationCode='{4}' AND a.WorkPoint=d.WorkPoint
  2509. INNER JOIN ICSWarehouse e ON d.WHID=e.ID AND d.WorkPoint=e.WorkPoint
  2510. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  2511. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  2512. END";
  2513. sql = string.Format(sql, LotNo, WorkPoint, User, Quantity, LocationCode);
  2514. }
  2515. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2516. {
  2517. throw new Exception(language.GetNameByCode("WMSAPIInfo165"));
  2518. }
  2519. if (BusinessCode == TransTypeEnum.MOIssueDocNegative.GetDescription<DBValue>())
  2520. {
  2521. ///添加日志
  2522. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  2523. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  2524. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  2525. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  2526. MTIME,WorkPoint,EATTRIBUTE1,LogID)
  2527. SELECT NEWID(),'{3}','{8}','{9}',a.LotNo ,a.InvCode ,
  2528. '','',c.WarehouseCode,c.LocationCode,'{6}',
  2529. '','0','{4}','{5}','0','',
  2530. '','','',f.F_Account ,f.F_RealName ,
  2531. SYSDATETIME() ,a.WorkPoint ,'','{7}'
  2532. FROM ICSInventoryLot a
  2533. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  2534. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  2535. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  2536. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  2537. ";
  2538. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransType, BusinessCode, Quantity, LogID,TransCode,TransSequence);
  2539. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2540. {
  2541. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  2542. }
  2543. }
  2544. else if (BusinessCode == TransTypeEnum.MOStockINByProduct.GetDescription<DBValue>())
  2545. {
  2546. ///添加日志
  2547. sql = @"IF EXISTS(SELECT 1 FROM ICSInventoryLot lot WHERE lot.LotNo='{0}' AND lot.WorkPoint='{1}' AND lot.Type=19)
  2548. BEGIN
  2549. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  2550. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  2551. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  2552. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  2553. MTIME,WorkPoint,EATTRIBUTE1,LogID)
  2554. SELECT NEWID(),'{3}','','',a.LotNo ,a.InvCode ,
  2555. '','',c.WarehouseCode,c.LocationCode,'{6}',
  2556. '','0','{4}','{5}','0','',
  2557. '','','',f.F_Account ,f.F_RealName ,
  2558. SYSDATETIME() ,a.WorkPoint ,'','{7}'
  2559. FROM ICSInventoryLot a
  2560. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  2561. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  2562. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  2563. END
  2564. ELSE
  2565. BEGIN
  2566. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  2567. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  2568. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  2569. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  2570. MTIME,WorkPoint,EATTRIBUTE1,LogID)
  2571. SELECT NEWID(),'{3}',b.TransCode,b.TransSequence,a.LotNo ,a.InvCode ,
  2572. '','',c.WarehouseCode,c.LocationCode,'{6}',
  2573. '','0','{4}','{5}','0','',
  2574. '','','',f.F_Account ,f.F_RealName ,
  2575. SYSDATETIME() ,a.WorkPoint ,'','{7}'
  2576. FROM ICSInventoryLot a
  2577. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  2578. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  2579. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  2580. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  2581. END
  2582. ";
  2583. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransType, BusinessCode, Quantity, LogID);
  2584. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2585. {
  2586. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  2587. }
  2588. }
  2589. else if (BusinessCode == TransTypeEnum.OOStockINByProduct.GetDescription<DBValue>())
  2590. {
  2591. ///添加日志
  2592. sql = @"IF EXISTS(SELECT 1 FROM ICSInventoryLot lot WHERE lot.LotNo='{0}' AND lot.WorkPoint='{1}' AND lot.Type=19)
  2593. BEGIN
  2594. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  2595. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  2596. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  2597. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  2598. MTIME,WorkPoint,EATTRIBUTE1,LogID)
  2599. SELECT NEWID(),'{3}','','',a.LotNo ,a.InvCode ,
  2600. '','',c.WarehouseCode,c.LocationCode,'{6}',
  2601. '','0','{4}','{5}','0','',
  2602. '','','',f.F_Account ,f.F_RealName ,
  2603. SYSDATETIME() ,a.WorkPoint ,'','{7}'
  2604. FROM ICSInventoryLot a
  2605. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  2606. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  2607. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  2608. END
  2609. ELSE
  2610. BEGIN
  2611. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  2612. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  2613. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  2614. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  2615. MTIME,WorkPoint,EATTRIBUTE1,LogID)
  2616. SELECT NEWID(),'{3}',b.TransCode,b.TransSequence,a.LotNo ,a.InvCode ,
  2617. '','',c.WarehouseCode,c.LocationCode,'{6}',
  2618. '','0','{4}','{5}','0','',
  2619. '','','',f.F_Account ,f.F_RealName ,
  2620. SYSDATETIME() ,a.WorkPoint ,'','{7}'
  2621. FROM ICSInventoryLot a
  2622. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  2623. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  2624. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  2625. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  2626. END
  2627. ";
  2628. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransType, BusinessCode, Quantity, LogID);
  2629. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2630. {
  2631. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  2632. }
  2633. }
  2634. else
  2635. {
  2636. ///添加日志
  2637. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  2638. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  2639. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  2640. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  2641. MTIME,WorkPoint,EATTRIBUTE1,LogID)
  2642. SELECT NEWID(),'{3}',b.TransCode,b.TransSequence,a.LotNo ,a.InvCode ,
  2643. '','',c.WarehouseCode,c.LocationCode,'{6}',
  2644. '','0','{4}','{5}','0','',
  2645. '','','',f.F_Account ,f.F_RealName ,
  2646. SYSDATETIME() ,a.WorkPoint ,'','{7}'
  2647. FROM ICSInventoryLot a
  2648. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  2649. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  2650. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  2651. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  2652. ";
  2653. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransType, BusinessCode, Quantity, LogID);
  2654. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2655. {
  2656. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  2657. }
  2658. }
  2659. #endregion
  2660. #region 管控方式是"料品"时
  2661. ControlMode mode = ICSControlModeService.GetControlMode();
  2662. if (mode.itemCode.Equals("ControlMode02"))
  2663. {
  2664. //查询是否存在料品管控的条码
  2665. string sqlStrNew = @"SELECT a.ID,
  2666. con.ContainerCode,
  2667. con.ContainerName,
  2668. a.LotNo,
  2669. a.InvCode,
  2670. inv.InvName,
  2671. inv.InvStd,
  2672. inv.InvUnit,-- {0}
  2673. inv.AmountUnit,
  2674. ext.ID AS ExtensionID,
  2675. ext.ProjectCode,
  2676. ext.Version,
  2677. ext.BatchCode,
  2678. ext.Brand,
  2679. ext.cFree1,
  2680. ext.cFree2,
  2681. ext.cFree3,
  2682. ext.cFree4,
  2683. ext.cFree5,
  2684. ext.cFree6,
  2685. ext.cFree7,
  2686. ext.cFree8,
  2687. ext.cFree9,
  2688. ext.cFree10,
  2689. a.MUSER AS [ USER ],
  2690. a.MTIME AS [ MTime ]
  2691. FROM
  2692. ICSInventoryLot a
  2693. LEFT JOIN ICSContainerLot conlot ON a.LotNo = conlot.LotNo AND a.WorkPoint = conlot.WorkPoint
  2694. LEFT JOIN ICSContainer con ON conlot.ContainerID = con.ID AND conlot.WorkPoint = con.WorkPoint
  2695. INNER JOIN ICSInventory inv ON a.InvCode = inv.InvCode AND a.WorkPoint = inv.WorkPoint
  2696. INNER JOIN ICSExtension ext ON a.ExtensionID = ext.ID AND a.WorkPoint = ext.WorkPoint
  2697. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  2698. sqlStrNew = string.Format(sqlStrNew, jointLotNo, WorkPoint);
  2699. DataTable table = DBHelper.SQlReturnData(sqlStrNew, cmd);
  2700. string json = JsonConvert.SerializeObject(table);
  2701. List<LotNoMode> modelNew = JsonConvert.DeserializeObject<List<LotNoMode>>(json);
  2702. //当不存在料品管控条码时,生成新条码
  2703. if (!(modelNew.Count > 0))
  2704. {
  2705. //获取旧条码的信息
  2706. string jsonStr = ICSControlModeService.QueryLotNo(LotNo, WorkPoint);
  2707. List<LotNoMode> model = JsonConvert.DeserializeObject<List<LotNoMode>>(jsonStr);
  2708. //在条码表中插入一条新数据,在条码表中插入一条新数据,并在库存表中添加新数据
  2709. LotNoMode lotNoMode = model[0];
  2710. CreateLotNo(jointLotNo, Quantity, "", "", WorkPoint, Identification, User, lotNoMode.InvCode, BusinessCode, lotNoMode.ProjectCode, lotNoMode.BatchCode,
  2711. lotNoMode.Version, lotNoMode.Brand, lotNoMode.cFree1, lotNoMode.cFree2, lotNoMode.cFree3, lotNoMode.cFree4, lotNoMode.cFree5, lotNoMode.cFree6, lotNoMode.cFree7,
  2712. lotNoMode.cFree8, lotNoMode.cFree9, lotNoMode.cFree10, cmd, language, LocationCode, LotNo);
  2713. }
  2714. try
  2715. {
  2716. //合并前日志
  2717. WareHouseLotInfoLog(Identification, jointLotNo, User, WorkPoint, "2",
  2718. TransTypeEnum.LOTMergeBefore.GetDescription<DBValue>(), "", cmd, language);
  2719. //更新目标条码库存
  2720. WareHouseLotInfoMerge(Identification, jointLotNo, LotNo, Quantity, User, WorkPoint, "2",
  2721. TransTypeEnum.LOTMergeAfter.GetDescription<DBValue>(), cmd, language);
  2722. //合并后日志
  2723. WareHouseLotInfoLog(Identification, jointLotNo, User, WorkPoint, "2",
  2724. TransTypeEnum.LOTMergeAfter.GetDescription<DBValue>(), "", cmd, language);
  2725. }
  2726. catch (Exception)
  2727. {
  2728. throw;
  2729. }
  2730. }
  2731. #endregion
  2732. #region 成品(生产)入库,倒冲
  2733. if (BusinessCode.Equals(TransTypeEnum.ManufactureReceiveDoc.GetDescription<DBValue>()))
  2734. {
  2735. #region sql
  2736. sql = @"-- 1.创建临时表 初始单据数据 maintemp
  2737. SELECT
  2738. c.MOCode AS TransCode,
  2739. a.MODetailID AS DetailID,
  2740. a.InvCode,
  2741. b.InvName,
  2742. b.InvStd,
  2743. a.ParentQuantity/c.Quantity*{2} AS Quantity,
  2744. a.Amount,
  2745. a.Sequence AS TransSequence,
  2746. a.IssueQuantity,
  2747. c.Sequence,
  2748. inv.InvUnit,
  2749. 0 AS LocationQty,
  2750. inv.AmountUnit,
  2751. a.ExtensionID,
  2752. a.WorkPoint,
  2753. ext.ProjectCode,
  2754. CASE WHEN ISNULL(inv.BatchEnable, '0')='1' THEN ext.BatchCode ELSE '' END AS BatchCode,
  2755. ext.Version,
  2756. ext.Brand,
  2757. ext.cFree1,
  2758. ext.cFree2,
  2759. ext.cFree3,
  2760. ext.cFree4,
  2761. ext.cFree5,
  2762. ext.cFree6,
  2763. ext.cFree7,
  2764. ext.cFree8,
  2765. ext.cFree9,
  2766. ext.cFree10
  2767. INTO #maintemp
  2768. FROM
  2769. ICSMOPick a
  2770. inner join ICSMO c on a.MODetailID=c.MODetailID and a.WorkPoint=c.WorkPoint
  2771. LEFT JOIN ICSINVENTORY b ON a.InvCode = b.InvCode AND a.WorkPoint=b.WorkPoint
  2772. INNER JOIN ICSExtension ext ON a.ExtensionID=ext.ID AND a.WorkPoint=ext.WorkPoint
  2773. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  2774. INNER JOIN (
  2775. SELECT a.MOCode,a.Sequence,a.WorkPoint
  2776. FROM ICSMO a
  2777. INNER JOIN ICSInventoryLotDetail b ON b.TransCode=a.MOCode AND b.TransSequence=a.Sequence AND b.WorkPoint=a.WorkPoint
  2778. INNER JOIN ICSInventoryLot c ON c.LotNo=b.LotNo AND c.WorkPoint=b.WorkPoint
  2779. WHERE c.LotNo='{0}' AND c.WorkPoint='{1}'
  2780. ) temp ON c.MOCode=temp.MOCode AND a.WorkPoint=temp.WorkPoint AND c.Sequence=temp.Sequence
  2781. WHERE a.SupplyType='1'
  2782. 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,
  2783. 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;
  2784. select * into #resulttemp from #maintemp
  2785. ALTER TABLE #resulttemp ADD LotNo VARCHAR(50)
  2786. delete from #resulttemp
  2787. -- 2.maintemp barcodetemp
  2788. select a.lotno,a.invcode,(a.quantity-a.lockQuantity) as quantity ,a.mtime into #barcodetemp from ICSWareHouseLotInfo a LEFT JOIN
  2789. (select #maintemp.invcode from #maintemp group by #maintemp.InvCode) b on a.invcode = b.invcode where a.Quantity-a.lockQuantity>0 ORDER BY a.MTIME ASC
  2790. -- 3.maintemp ID barcodetemp
  2791. BEGIN
  2792. DECLARE @transSequence int;--
  2793. DECLARE @qty int;--
  2794. DECLARE @needqty int;--
  2795. DECLARE @lotno VARCHAR(50);--
  2796. DECLARE @DetailID VARCHAR(50);--ID
  2797. DECLARE tempCursor CURSOR FOR (select transSequence,DetailID from #maintemp); --tempCursor
  2798. OPEN tempCursor; --
  2799. FETCH NEXT FROM tempCursor INTO @transSequence,@DetailID; --
  2800. WHILE @@fetch_status=0
  2801. BEGIN
  2802. select @needqty=Quantity from #maintemp where transSequence = @transSequence AND DetailID = @DetailID
  2803. PRINT @transSequence
  2804. WHILE @needqty>0
  2805. BEGIN
  2806. select top 1 @qty = isnull(quantity,0),@lotno = isnull(lotno,'') from #barcodetemp a
  2807. RIGHT JOIN (select invcode from #maintemp where transSequence = @transSequence AND DetailID = @DetailID) b on a.invcode=b.invcode ORDER BY mtime
  2808. BEGIN
  2809. IF(@needqty-@qty>=0 and ISNULL(@lotno, '')<>'')
  2810. BEGIN
  2811. insert INTO #resulttemp (lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity,Quantity,
  2812. Amount,InvCode,InvName,InvStd,InvUnit,LocationQty,AmountUnit,
  2813. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint)
  2814. SELECT @lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity, Quantity,
  2815. ISNULL(Amount, 0), InvCode,InvName,ISNULL(InvStd, ''),InvUnit,@qty,ISNULL(AmountUnit, ''),
  2816. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint from #maintemp
  2817. where #maintemp.transSequence = @transSequence AND DetailID = @DetailID
  2818. delete from #barcodetemp where lotno = @lotno
  2819. SET @needqty=@needqty-@qty
  2820. END
  2821. ELSE IF(@needqty-@qty<0 and ISNULL(@lotno, '')<>'')
  2822. BEGIN
  2823. insert INTO #resulttemp (lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity,Quantity,
  2824. Amount,InvCode,InvName,InvStd,InvUnit,LocationQty,AmountUnit,
  2825. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint)
  2826. SELECT @lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity, Quantity,
  2827. ISNULL(Amount, 0),InvCode,InvName,ISNULL(InvStd, ''),InvUnit,@needqty,ISNULL(AmountUnit, ''),
  2828. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint from #maintemp
  2829. where #maintemp.transSequence = @transSequence AND DetailID = @DetailID
  2830. update #barcodetemp set quantity = @qty-@needqty where lotno = @lotno
  2831. SET @needqty=@needqty-@qty
  2832. END
  2833. ELSE
  2834. BEGIN
  2835. insert INTO #resulttemp (lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity,Quantity,
  2836. Amount,InvCode,InvName,InvStd,InvUnit,LocationQty,AmountUnit,
  2837. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint)
  2838. SELECT @lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity, Quantity,
  2839. ISNULL(Amount, 0),InvCode,InvName,ISNULL(InvStd, ''),InvUnit,0,ISNULL(AmountUnit, ''),
  2840. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint from #maintemp
  2841. where #maintemp.transSequence = @transSequence AND DetailID = @DetailID
  2842. SET @needqty=0
  2843. END
  2844. END
  2845. END
  2846. FETCH NEXT FROM tempCursor INTO @transSequence,@DetailID;
  2847. END
  2848. CLOSE tempCursor
  2849. DEALLOCATE tempCursor
  2850. END
  2851. select TransCode,LotNo,LocationQty AS Quantity,InvCode,DetailID,Sequence,TransSequence from #resulttemp
  2852. --select * from #resulttemp
  2853. DROP table #maintemp
  2854. DROP table #resulttemp
  2855. DROP table #barcodetemp";
  2856. #endregion
  2857. sql = String.Format(sql, LotNo, WorkPoint, Quantity);
  2858. DataTable table = DBHelper.SQlReturnData(sql, cmd);
  2859. string json = JsonConvert.SerializeObject(table);
  2860. List<DownItemModel> downItemModels = JsonConvert.DeserializeObject<List<DownItemModel>>(json);
  2861. foreach (DownItemModel model in downItemModels)
  2862. {
  2863. if (model != null && model.LotNo == null || "" == model.LotNo)
  2864. {
  2865. throw new Exception(language.GetNameByCode("WMSAPIInfo201"));
  2866. }
  2867. WareHouseLotInfoDown(Identification, model.TransCode, model.Sequence + "~" + model.TransSequence, model.LotNo, model.Quantity, User, WorkPoint, "12", BusinessCode, cmd, language, "", "","");
  2868. //回写已领数量
  2869. sql = @"UPDATE ICSMOPick SET IssueQuantity=(ISNULL(IssueQuantity,0)+" + model.Quantity + ") WHERE MODetailID='{0}' AND Sequence='{1}' AND WorkPoint='{2}'";
  2870. sql = String.Format(sql, model.DetailID, model.TransSequence, WorkPoint);
  2871. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2872. {
  2873. throw new Exception(language.GetNameByCode("WMSAPIInfo199"));
  2874. }
  2875. }
  2876. }
  2877. #endregion
  2878. #region 委外入库,倒冲
  2879. if (BusinessCode.Equals(TransTypeEnum.OutsourcingReceiveDoc.GetDescription<DBValue>()))
  2880. {
  2881. #region sql
  2882. sql = @"-- 1.创建临时表 初始单据数据 maintemp
  2883. SELECT
  2884. c.OOCode AS TransCode,
  2885. a.OODetailID AS DetailID,
  2886. a.InvCode,
  2887. b.InvName,
  2888. b.InvStd,
  2889. a.ParentQuantity/c.Quantity*{2} AS Quantity,
  2890. a.Amount,
  2891. a.Sequence AS TransSequence,
  2892. a.IssueQuantity,
  2893. c.Sequence,
  2894. inv.InvUnit,
  2895. 0 AS LocationQty,
  2896. inv.AmountUnit,
  2897. a.ExtensionID,
  2898. a.WorkPoint,
  2899. ext.ProjectCode,
  2900. CASE WHEN ISNULL(inv.BatchEnable, '0')='1' THEN ext.BatchCode ELSE '' END AS BatchCode,
  2901. ext.Version,
  2902. ext.Brand,
  2903. ext.cFree1,
  2904. ext.cFree2,
  2905. ext.cFree3,
  2906. ext.cFree4,
  2907. ext.cFree5,
  2908. ext.cFree6,
  2909. ext.cFree7,
  2910. ext.cFree8,
  2911. ext.cFree9,
  2912. ext.cFree10
  2913. INTO #maintemp
  2914. FROM
  2915. ICSOOPick a
  2916. inner join ICSOutsourcingOrder c on a.OODetailID=c.OODetailID and a.WorkPoint=c.WorkPoint
  2917. LEFT JOIN ICSINVENTORY b ON a.InvCode = b.InvCode AND a.WorkPoint=b.WorkPoint
  2918. INNER JOIN ICSExtension ext ON a.ExtensionID=ext.ID AND a.WorkPoint=ext.WorkPoint
  2919. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  2920. INNER JOIN (
  2921. SELECT a.OOCode,a.Sequence,a.WorkPoint
  2922. FROM ICSOutsourcingOrder a
  2923. INNER JOIN ICSInventoryLotDetail b ON b.TransCode=a.OOCode AND b.TransSequence=a.Sequence AND b.WorkPoint=a.WorkPoint
  2924. INNER JOIN ICSInventoryLot c ON c.LotNo=b.LotNo AND c.WorkPoint=b.WorkPoint
  2925. WHERE c.LotNo='{0}' AND c.WorkPoint='{1}'
  2926. ) temp ON c.OOCode=temp.OOCode AND a.WorkPoint=temp.WorkPoint AND c.Sequence=temp.Sequence
  2927. WHERE a.SupplyType='1'
  2928. 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,
  2929. 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;
  2930. select * into #resulttemp from #maintemp
  2931. ALTER TABLE #resulttemp ADD LotNo VARCHAR(50)
  2932. delete from #resulttemp
  2933. -- 2.maintemp barcodetemp
  2934. select a.lotno,a.invcode,(a.quantity-a.lockQuantity) as quantity ,a.mtime into #barcodetemp from ICSWareHouseLotInfo a LEFT JOIN
  2935. (select #maintemp.invcode from #maintemp group by #maintemp.InvCode) b on a.invcode = b.invcode where a.Quantity-a.lockQuantity>0 ORDER BY a.MTIME ASC
  2936. -- 3.maintemp ID barcodetemp
  2937. BEGIN
  2938. DECLARE @transSequence int;--
  2939. DECLARE @qty int;--
  2940. DECLARE @needqty int;--
  2941. DECLARE @lotno VARCHAR(50);--
  2942. DECLARE @DetailID VARCHAR(50);--ID
  2943. DECLARE tempCursor CURSOR FOR (select transSequence,DetailID from #maintemp); --tempCursor
  2944. OPEN tempCursor; --
  2945. FETCH NEXT FROM tempCursor INTO @transSequence,@DetailID; --
  2946. WHILE @@fetch_status=0
  2947. BEGIN
  2948. select @needqty=Quantity from #maintemp where transSequence = @transSequence AND DetailID = @DetailID
  2949. PRINT @transSequence
  2950. WHILE @needqty>0
  2951. BEGIN
  2952. select top 1 @qty = isnull(quantity,0),@lotno = isnull(lotno,'') from #barcodetemp a
  2953. RIGHT JOIN (select invcode from #maintemp where transSequence = @transSequence AND DetailID = @DetailID) b on a.invcode=b.invcode ORDER BY mtime
  2954. BEGIN
  2955. IF(@needqty-@qty>=0 and ISNULL(@lotno, '')<>'')
  2956. BEGIN
  2957. insert INTO #resulttemp (lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity,Quantity,
  2958. Amount,InvCode,InvName,InvStd,InvUnit,LocationQty,AmountUnit,
  2959. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint)
  2960. SELECT @lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity, Quantity,
  2961. ISNULL(Amount, 0), InvCode,InvName,ISNULL(InvStd, ''),InvUnit,@qty,ISNULL(AmountUnit, ''),
  2962. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint from #maintemp
  2963. where #maintemp.transSequence = @transSequence AND DetailID = @DetailID
  2964. delete from #barcodetemp where lotno = @lotno
  2965. SET @needqty=@needqty-@qty
  2966. END
  2967. ELSE IF(@needqty-@qty<0 and ISNULL(@lotno, '')<>'')
  2968. BEGIN
  2969. insert INTO #resulttemp (lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity,Quantity,
  2970. Amount,InvCode,InvName,InvStd,InvUnit,LocationQty,AmountUnit,
  2971. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint)
  2972. SELECT @lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity, Quantity,
  2973. ISNULL(Amount, 0),InvCode,InvName,ISNULL(InvStd, ''),InvUnit,@needqty,ISNULL(AmountUnit, ''),
  2974. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint from #maintemp
  2975. where #maintemp.transSequence = @transSequence AND DetailID = @DetailID
  2976. update #barcodetemp set quantity = @qty-@needqty where lotno = @lotno
  2977. SET @needqty=@needqty-@qty
  2978. END
  2979. ELSE
  2980. BEGIN
  2981. insert INTO #resulttemp (lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity,Quantity,
  2982. Amount,InvCode,InvName,InvStd,InvUnit,LocationQty,AmountUnit,
  2983. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint)
  2984. SELECT @lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity, Quantity,
  2985. ISNULL(Amount, 0),InvCode,InvName,ISNULL(InvStd, ''),InvUnit,0,ISNULL(AmountUnit, ''),
  2986. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint from #maintemp
  2987. where #maintemp.transSequence = @transSequence AND DetailID = @DetailID
  2988. SET @needqty=0
  2989. END
  2990. END
  2991. END
  2992. FETCH NEXT FROM tempCursor INTO @transSequence,@DetailID;
  2993. END
  2994. CLOSE tempCursor
  2995. DEALLOCATE tempCursor
  2996. END
  2997. select TransCode,LotNo,LocationQty AS Quantity,InvCode,DetailID,Sequence,TransSequence from #resulttemp
  2998. --select * from #resulttemp
  2999. DROP table #maintemp
  3000. DROP table #resulttemp
  3001. DROP table #barcodetemp";
  3002. #endregion
  3003. sql = String.Format(sql, LotNo, WorkPoint, Quantity);
  3004. DataTable table = DBHelper.SQlReturnData(sql, cmd);
  3005. string json = JsonConvert.SerializeObject(table);
  3006. List<DownItemModel> downItemModels = JsonConvert.DeserializeObject<List<DownItemModel>>(json);
  3007. foreach (DownItemModel model in downItemModels)
  3008. {
  3009. if (model != null && model.LotNo == null || "" == model.LotNo)
  3010. {
  3011. throw new Exception(language.GetNameByCode("WMSAPIInfo201"));
  3012. }
  3013. WareHouseLotInfoDown(Identification, model.TransCode, model.Sequence + "~" + model.TransSequence, model.LotNo, model.Quantity, User, WorkPoint, "13", BusinessCode, cmd, language, "", "", "");
  3014. //回写已领数量
  3015. sql = @"UPDATE ICSOOPick SET IssueQuantity=(ISNULL(IssueQuantity,0)+" + model.Quantity + ") WHERE OODetailID='{0}' AND Sequence='{1}' AND WorkPoint='{2}'";
  3016. sql = String.Format(sql, model.DetailID, model.TransSequence, WorkPoint);
  3017. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3018. {
  3019. throw new Exception(language.GetNameByCode("WMSAPIInfo199"));
  3020. }
  3021. }
  3022. }
  3023. #endregion
  3024. }
  3025. catch (Exception)
  3026. {
  3027. throw;
  3028. }
  3029. }
  3030. /// <summary>
  3031. /// 减少库存
  3032. /// </summary>
  3033. /// <param name="Identification"></param>
  3034. /// <param name="TransCode"></param>
  3035. /// <param name="TransSequence"></param>
  3036. /// <param name="LotNo"></param>
  3037. /// <param name="Quantity"></param>
  3038. /// <param name="User"></param>
  3039. /// <param name="WorkPoint"></param>
  3040. /// <param name="TransType"></param>
  3041. /// <param name="BusinessCode"></param>
  3042. /// <param name="cmd"></param>
  3043. public static DataTable WareHouseLotInfoDown(string Identification, string TransCode, string TransSequence, string LotNo, string Quantity, string User,
  3044. string WorkPoint, string TransType, string BusinessCode, SqlCommand cmd, Dictionary<string, string> language, string LogID, string TransID,string MergeID = "")
  3045. {
  3046. decimal LotQTYYY = 0;
  3047. decimal LotQTY = 0;
  3048. decimal SUMQTY = 0;
  3049. string INVCODE = "";
  3050. string Inspect = "";
  3051. string LotEnable = "";
  3052. string LotDocEnable = "";
  3053. string InvOQc = "";
  3054. string chekEnable = "";
  3055. string DisPrintEnable = "";
  3056. string PrintEnable = "";
  3057. string sql = "";
  3058. string lotstr = "";
  3059. int result = 0;
  3060. bool isDis = false;
  3061. List<string> NewBarCodeList = new List<string>();
  3062. DataTable dtLotno = new DataTable();
  3063. DataTable lstDt = new DataTable();
  3064. DataTable ZLtable = new DataTable();
  3065. try
  3066. {
  3067. string aa = @"update ICSWareHouseLotInfo set EATTRIBUTE10='' where lotno='{0}' and workpoint='{1}'";
  3068. aa = string.Format(aa, LotNo, WorkPoint);
  3069. if (!DBHelper.ExecuteNonQuery(aa, cmd))
  3070. {
  3071. throw new Exception("条码EATTRIBUTE10更新失败!");//"占料标识更新失败!");
  3072. }
  3073. //检验是否分批
  3074. sql = @"SELECT b.LotEnable,b.PrintEnable,b.InvOQC,b.LotDocEnable FROM ICSInventoryLot a
  3075. LEFT JOIN ICSInventory b ON a.InvCode=b.InvCode AND a.WorkPoint=b.WorkPoint
  3076. where a.LotNo='{0}' and a.WorkPoint='{1}'
  3077. ";
  3078. sql = string.Format(sql, LotNo, WorkPoint);
  3079. DataTable dt = DBHelper.SQlReturnData(sql, cmd);
  3080. if (dt.Rows.Count == 0)
  3081. {
  3082. throw new Exception("条码"+ LotNo + "不存在!");
  3083. }
  3084. else
  3085. {
  3086. LotEnable = dt.Rows[0]["LotEnable"].ToString();
  3087. LotDocEnable = dt.Rows[0]["LotDocEnable"].ToString();
  3088. PrintEnable = dt.Rows[0]["PrintEnable"].ToString();
  3089. InvOQc = dt.Rows[0]["InvOQC"].ToString();
  3090. }
  3091. log.Debug("INVOQC:"+InvOQc);
  3092. 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
  3093. from Sys_SRM_Items a
  3094. left join Sys_SRM_ItemsDetail b on a.F_Id=b.F_ItemId
  3095. where a.F_EnCode='TransBatch' and b.F_ItemCode='{0}' )
  3096. BEGIN
  3097. RAISERROR('" + language.GetNameByCode("WMSAPIInfo470") + @"',16,1);
  3098. RETURN
  3099. END
  3100. select b.F_ItemCode as Code ,b.F_ItemName as Name,b.F_EnabledMark AS Enable ,b.F_IsDefault AS DisPrintEnable
  3101. from Sys_SRM_Items a
  3102. left join Sys_SRM_ItemsDetail b on a.F_Id=b.F_ItemId
  3103. where a.F_EnCode='TransBatch' and b.F_ItemCode='{0}'
  3104. ";
  3105. cheksql = string.Format(cheksql, BusinessCode);
  3106. DataTable chekdt = DBHelper.SQlReturnData(cheksql, cmd);
  3107. if (chekdt.Rows.Count == 0)
  3108. {
  3109. throw new Exception("单据分批自定义配置查询失败,请先维护配置!");
  3110. }
  3111. else
  3112. {
  3113. chekEnable = chekdt.Rows[0]["Enable"].ToString();
  3114. DisPrintEnable = chekdt.Rows[0]["DisPrintEnable"].ToString();
  3115. }
  3116. sql = @"select Quantity,invcode,Inspect from ICSWareHouseLotInfo
  3117. where LotNO='{0}' AND WorkPoint='{1}'";
  3118. sql = string.Format(sql, LotNo, WorkPoint);
  3119. DataTable dtt = DBHelper.SQlReturnData(sql, cmd);
  3120. if (dtt.Rows.Count > 0&& dtt!=null)
  3121. {
  3122. log.Info(Convert.ToDecimal(dtt.Rows[0]["Quantity"].ToString()));
  3123. log.Info(Quantity);
  3124. log.Info(Convert.ToDecimal(Quantity));
  3125. LotQTYYY = Convert.ToDecimal(dtt.Rows[0]["Quantity"].ToString());
  3126. LotQTY = Convert.ToDecimal(Quantity);
  3127. INVCODE = dtt.Rows[0]["invcode"].ToString();
  3128. Inspect = dtt.Rows[0]["Inspect"].ToString();
  3129. }
  3130. sql = @"SELECT isNULL(SUM(a.quantity)-'{3}',0) AS SumQTY FROM ICSWareHouseLotInfo a
  3131. INNER JOIN ICSReserve b ON a.invcode=b.invcode and a.workpoint=b.workpoint and a.warehousecode=b.whcode
  3132. where a.invcode='{2}' and a.workpoint='{1}' ";
  3133. sql = string.Format(sql, LotNo, WorkPoint,INVCODE, Quantity);
  3134. DataTable Sumdtt = DBHelper.SQlReturnData(sql, cmd);
  3135. if (Sumdtt.Rows.Count > 0) {
  3136. log.Debug(Sumdtt.Rows[0]["SumQTY"]);
  3137. SUMQTY = Convert.ToDecimal(Sumdtt.Rows[0]["SumQTY"]);
  3138. }
  3139. //Convert.ToDecimal(Sumdtt.Rows[0]["SumQTY"]);
  3140. if (LotDocEnable.Equals("True"))
  3141. {
  3142. if (LotEnable.Equals("True") && chekEnable.Equals("True") && LotQTYYY - LotQTY > 0)
  3143. {
  3144. ZLtable = ICSControlModeService.GetZL();
  3145. if (ZLtable == null)
  3146. {
  3147. throw new Exception(language.GetNameByCode("WMSAPIInfo471"));
  3148. }
  3149. for (int i = 0; i < ZLtable.Rows.Count; i++)
  3150. {
  3151. string zlName = ZLtable.Rows[i]["Name"].ToString();
  3152. string zlTransCode = ZLtable.Rows[i]["BusinessCode"].ToString();
  3153. string Enable = ZLtable.Rows[i]["Enable"].ToString();
  3154. if (zlTransCode.Equals(BusinessCode))
  3155. {
  3156. if (Enable.Equals("True"))
  3157. {
  3158. ///更新日志
  3159. sql = @"
  3160. 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}')
  3161. BEGIN
  3162. RAISERROR('" + language.GetNameByCode("WMSAPIInfo472") + @"',16,1);
  3163. RETURN
  3164. END
  3165. UPDATE ICSWareHouseLotInfoLog SET EATTRIBUTE2='1' WHERE LotNo='{0}' AND WorkPoint='{1}' and transtype='15' and TransCode='{3}' and TransSequence='{4}'
  3166. ";
  3167. sql = string.Format(sql, LotNo, WorkPoint, LogID,TransCode,TransSequence);
  3168. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3169. {
  3170. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"占料标识更新失败!");
  3171. }
  3172. ///更新库存
  3173. sql = @"DECLARE @ReservedQuantity VARCHAR(10);
  3174. SELECT @ReservedQuantity = CAST(b.Quantity AS VARCHAR(10))
  3175. FROM ICSReserve b
  3176. INNER JOIN ICSWareHouseLotInfo a
  3177. ON a.invcode = b.invcode
  3178. AND a.workpoint = b.workpoint
  3179. AND a.warehousecode = b.whcode
  3180. WHERE '{4}' < b.Quantity
  3181. AND b.invcode = '{3}'
  3182. AND GETDATE() > b.BeginTime
  3183. AND GETDATE() < b.EndTime;
  3184. IF EXISTS(SELECT * FROM ICSWareHouseLotInfo a
  3185. INNER JOIN ICSReserve b ON a.invcode=b.invcode
  3186. AND a.workpoint=b.workpoint
  3187. AND a.warehousecode=b.whcode
  3188. WHERE a.invcode='{3}'
  3189. AND a.workpoint='{1}'
  3190. AND SYSDATETIME() > b.BeginTime
  3191. AND SYSDATETIME() < b.EndTime
  3192. AND b.enable='1')
  3193. BEGIN
  3194. IF @ReservedQuantity IS NOT NULL
  3195. BEGIN
  3196. RAISERROR('''{3}'',''{4}'''' + @ReservedQuantity + ''!', 16, 1);
  3197. RETURN
  3198. END
  3199. END
  3200. UPDATE ICSWareHouseLotInfo
  3201. SET Quantity = ISNULL(Quantity, 0) - '{2}',
  3202. LockQuantity = ISNULL(LockQuantity, 0) - '{2}'
  3203. WHERE LotNo = '{0}'
  3204. AND WorkPoint = '{1}';
  3205. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a
  3206. WHERE a.LotNo = '{0}'
  3207. AND a.WorkPoint = '{1}'
  3208. AND Quantity - LockQuantity < 0)
  3209. BEGIN
  3210. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"', 16, 1);
  3211. RETURN
  3212. END
  3213. ";
  3214. sql = string.Format(sql, LotNo, WorkPoint, Quantity, INVCODE, SUMQTY);
  3215. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3216. {
  3217. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  3218. }
  3219. }
  3220. else
  3221. {
  3222. if (InvOQc.Equals("True"))
  3223. {
  3224. sql = @"select a.id from ICSWareHouseLotInfo a
  3225. inner JOIN ICSInspectDetail b ON a.WorkPoint=b.WorkPoint and a.LotNo=b.LotNo
  3226. where a.LotNo='{0}' and a.WorkPoint='{1}' ";//and a.Inspect = '0'
  3227. sql = string.Format(sql, LotNo, WorkPoint);
  3228. DataTable Inspectdtt = DBHelper.SQlReturnData(sql, cmd);
  3229. if (Inspectdtt.Rows.Count > 0 && Inspectdtt != null)
  3230. {
  3231. sql = @"select a.id from ICSWareHouseLotInfo a
  3232. inner JOIN ICSInspectDetail b ON a.WorkPoint=b.WorkPoint and a.LotNo=b.LotNo
  3233. where a.LotNo='{0}' and a.WorkPoint='{1}' and a.Inspect = '0'";
  3234. sql = string.Format(sql, LotNo, WorkPoint);
  3235. DataTable InspectNewdtt = DBHelper.SQlReturnData(sql, cmd);
  3236. if (InspectNewdtt.Rows.Count == 0 || InspectNewdtt == null)
  3237. {
  3238. throw new Exception("条码在库检验,未检验完成,请确认!");
  3239. }
  3240. }
  3241. }
  3242. ///更新库存
  3243. sql = @"DECLARE @ReservedQuantity VARCHAR(10);
  3244. SELECT @ReservedQuantity = CAST(b.Quantity AS VARCHAR(10))
  3245. FROM ICSReserve b
  3246. INNER JOIN ICSWareHouseLotInfo a
  3247. ON a.invcode = b.invcode
  3248. AND a.workpoint = b.workpoint
  3249. AND a.warehousecode = b.whcode
  3250. WHERE '{4}' < b.Quantity
  3251. AND b.invcode = '{3}'
  3252. AND GETDATE() > b.BeginTime
  3253. AND GETDATE() < b.EndTime;
  3254. IF EXISTS(SELECT * FROM ICSWareHouseLotInfo a
  3255. INNER JOIN ICSReserve b ON a.invcode=b.invcode
  3256. AND a.workpoint=b.workpoint
  3257. AND a.warehousecode=b.whcode
  3258. WHERE a.invcode='{3}'
  3259. AND a.workpoint='{1}'
  3260. AND SYSDATETIME() > b.BeginTime
  3261. AND SYSDATETIME() < b.EndTime
  3262. AND b.enable='1')
  3263. BEGIN
  3264. IF @ReservedQuantity IS NOT NULL
  3265. BEGIN
  3266. RAISERROR('''{3}'',''{4}'''' + @ReservedQuantity + ''!', 16, 1);
  3267. RETURN
  3268. END
  3269. END
  3270. UPDATE ICSWareHouseLotInfo
  3271. SET Quantity = ISNULL(Quantity, 0) - '{2}'
  3272. WHERE LotNo = '{0}'
  3273. AND WorkPoint = '{1}';
  3274. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a
  3275. WHERE a.LotNo = '{0}'
  3276. AND a.WorkPoint = '{1}'
  3277. AND Quantity - LockQuantity < 0)
  3278. BEGIN
  3279. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"', 16, 1);
  3280. RETURN
  3281. END
  3282. ";
  3283. sql = string.Format(sql, LotNo, WorkPoint, Quantity, INVCODE, SUMQTY);
  3284. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3285. {
  3286. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  3287. }
  3288. }
  3289. }
  3290. }
  3291. ///分批前添加日志
  3292. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  3293. BEGIN
  3294. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  3295. RETURN
  3296. END
  3297. IF NOT EXISTS(SELECT id FROM ICSInventoryLot WHERE LotNo='{0}' AND WorkPoint='{1}')
  3298. BEGIN
  3299. RAISERROR('! ' + '{0}',16,1);
  3300. RETURN
  3301. END
  3302. IF NOT EXISTS(SELECT id FROM ICSWareHouseLotInfo WHERE LotNo='{0}' AND WorkPoint='{1}' AND Quantity>0)
  3303. BEGIN
  3304. RAISERROR('! ' + '{0}',16,1);
  3305. RETURN
  3306. END
  3307. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransID,TransCode,TransSequence,LotNo,InvCode,
  3308. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  3309. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  3310. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  3311. MTIME,WorkPoint,EATTRIBUTE1)
  3312. SELECT NEWID(),'{3}','{9}','{7}','{8}',a.LotNo ,a.InvCode ,
  3313. c.WarehouseCode,c.LocationCode,'','',c.Quantity+{6},
  3314. '','0','{4}','31','0','',
  3315. '','','',f.F_Account ,f.F_RealName ,
  3316. SYSDATETIME() ,a.WorkPoint ,''
  3317. FROM ICSInventoryLot a
  3318. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  3319. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  3320. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  3321. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  3322. ";
  3323. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransType, BusinessCode, Quantity, TransCode, TransSequence, TransID);
  3324. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3325. {
  3326. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  3327. }
  3328. #region 获取分批后的条码(lotstr)
  3329. sql = @"SELECT TOP 1 LotNO FROM ICSInventoryLot WHERE EATTRIBUTE1='{0}' AND WorkPoint='{1}'
  3330. ORDER BY CAST(SUBSTRING(LotNO, (LEN(LotNO)-CHARINDEX('-',REVERSE(LotNO))+1)+1,CHARINDEX('-',REVERSE(LotNO))-1) AS INT) DESC";
  3331. sql = string.Format(sql, LotNo, WorkPoint);
  3332. dt = DBHelper.SQlReturnData(sql, cmd);
  3333. if (dt.Rows.Count == 0)
  3334. {
  3335. lotstr = LotNo + "-" + 1;
  3336. }
  3337. else
  3338. {
  3339. lotstr = LotNo + "-" + (Convert.ToInt32(dt.Rows[0]["LotNO"].ToString().Split('-')[dt.Rows[0]["LotNO"].ToString().Split('-').Length - 1]) + 1).ToString();
  3340. }
  3341. NewBarCodeList.Add(lotstr);//将分批后新条码添加到新集合
  3342. #endregion
  3343. #region 将分批后的条码记录插入条码表,库存表及日志表并将原条码库存数量清零
  3344. sql = @"INSERT INTO ICSInventoryLot(ID,LotNo,InvCode,ProductDate,ExpirationDate,
  3345. Quantity,Amount,ExtensionID,Type,PrintTimes,
  3346. LastPrintUser,LastPrintTime,MUSER,MUSERName,MTIME,
  3347. WorkPoint,EATTRIBUTE1,EATTRIBUTE2,EATTRIBUTE3,EATTRIBUTE4,EATTRIBUTE5,EATTRIBUTE6,EATTRIBUTE7,EATTRIBUTE8,
  3348. EATTRIBUTE9,EATTRIBUTE10,EATTRIBUTE11,EATTRIBUTE12,EATTRIBUTE13,EATTRIBUTE14,EATTRIBUTE15,EATTRIBUTE16,EATTRIBUTE17,EATTRIBUTE18,EATTRIBUTE19,EATTRIBUTE20,
  3349. EATTRIBUTE21,EATTRIBUTE22,EATTRIBUTE23,EATTRIBUTE24,EATTRIBUTE25,EATTRIBUTE26,EATTRIBUTE27,EATTRIBUTE28,EATTRIBUTE29,EATTRIBUTE30)
  3350. SELECT TOP 1 NEWID(),'{0}',a.InvCode,a.ProductDate,a.ExpirationDate,
  3351. '{2}',a.Amount/a.Quantity*Quantity,a.ExtensionID,a.Type,a.PrintTimes,
  3352. a.LastPrintUser,a.LastPrintTime,a.MUSER ,a.MUSERName ,GETDATE(),
  3353. a.WorkPoint ,'{1}',a.EATTRIBUTE2,a.EATTRIBUTE3,a.EATTRIBUTE4,a.EATTRIBUTE5,a.EATTRIBUTE6,a.EATTRIBUTE7,a.EATTRIBUTE8,
  3354. a.EATTRIBUTE9,a.EATTRIBUTE10,a.EATTRIBUTE11,a.EATTRIBUTE12,a.EATTRIBUTE13,a.EATTRIBUTE14,a.EATTRIBUTE15,a.EATTRIBUTE16,a.EATTRIBUTE17,a.EATTRIBUTE18,a.EATTRIBUTE19,a.EATTRIBUTE20,
  3355. a.EATTRIBUTE21,a.EATTRIBUTE22,a.EATTRIBUTE23,a.EATTRIBUTE24,a.EATTRIBUTE25,a.EATTRIBUTE26,a.EATTRIBUTE27,a.EATTRIBUTE28,a.EATTRIBUTE29,a.EATTRIBUTE30
  3356. From ICSInventoryLot a
  3357. where a.LotNo='{1}' and a.WorkPoint='{3}'";
  3358. sql = string.Format(sql, lotstr, LotNo, Quantity, WorkPoint);
  3359. cmd.CommandText = sql;
  3360. result = cmd.ExecuteNonQuery();
  3361. if (result <= 0)
  3362. {
  3363. throw new Exception(language.GetNameByCode("WMSAPIInfo195"));//条码分批后条码表存入失败!
  3364. }
  3365. sql = @"INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  3366. select NEWID(),'{0}',WarehouseCode,LocationCode,InvCode,'0',InDate,LockQuantity
  3367. ,MUSER,MUSERName,GETDATE(),'{3}',''
  3368. from ICSWareHouseLotInfo
  3369. where LotNO='{1}' AND WorkPoint='{3}'";
  3370. sql = string.Format(sql, lotstr, LotNo, Quantity, WorkPoint);
  3371. cmd.CommandText = sql;
  3372. result = cmd.ExecuteNonQuery();
  3373. if (result <= 0)
  3374. {
  3375. throw new Exception(language.GetNameByCode("WMSAPIInfo196"));//条码分批后库存表存入失败!
  3376. }
  3377. //插入条码单据表
  3378. sql = @"INSERT INTO ICSInventoryLotDetail(LotNo,TransID,TransCode,TransSequence,MUSER,MUSERName,MTIME,WorkPoint)
  3379. SELECT '{3}','{4}',b.TransCode,b.TransSequence,f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint
  3380. FROM ICSInventoryLot a
  3381. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  3382. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  3383. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  3384. sql = string.Format(sql, LotNo, WorkPoint, User, lotstr, TransID);
  3385. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3386. {
  3387. throw new Exception(language.GetNameByCode("WMSAPIInfo174"));//"条码单据表写入失败!");
  3388. }
  3389. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransID,TransCode,TransSequence,LotNo,InvCode,
  3390. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  3391. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  3392. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  3393. MTIME,WorkPoint,EATTRIBUTE1,LogID)
  3394. SELECT NEWID(),'{3}','{11}','{4}','{5}','{10}' ,a.InvCode ,
  3395. c.WarehouseCode,c.LocationCode,'','','{6}',
  3396. '','0','{7}','{8}','0','',
  3397. '','','',f.F_Account ,f.F_RealName ,
  3398. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  3399. FROM ICSInventoryLot a
  3400. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  3401. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  3402. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  3403. ";
  3404. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID, lotstr, TransID);
  3405. cmd.CommandText = sql;
  3406. result = cmd.ExecuteNonQuery();
  3407. if (result <= 0)
  3408. {
  3409. throw new Exception(language.GetNameByCode("WMSAPIInfo197"));//条码分批后库存日志表存入失败!
  3410. }
  3411. ///添加日志
  3412. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  3413. BEGIN
  3414. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  3415. RETURN
  3416. END
  3417. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransID,TransCode,TransSequence,LotNo,InvCode,
  3418. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  3419. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  3420. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  3421. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  3422. SELECT NEWID(),'{3}','{10}','{4}','{5}',a.LotNo ,a.InvCode ,
  3423. c.WarehouseCode,c.LocationCode,'','',c.Quantity,
  3424. '','0','{7}','32','0','',
  3425. '','','',f.F_Account ,f.F_RealName ,
  3426. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  3427. FROM ICSInventoryLot a
  3428. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  3429. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  3430. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  3431. ";
  3432. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID, TransID);
  3433. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3434. {
  3435. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  3436. }
  3437. if (PrintEnable.Equals("True") && DisPrintEnable.Equals("True"))
  3438. {
  3439. string PrintData = DBHelper.ReadPrintStream();
  3440. sql = @""+PrintData+"";
  3441. //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
  3442. // from ICSWareHouseLotInfolog A
  3443. // left join ICSInventoryLot B on A.LotNO=B.LotNO and a.WorkPoint=b.WorkPoint
  3444. // left join ICSWareHouseLotInfo C ON A.LotNO=C.LotNO and a.WorkPoint=c.WorkPoint
  3445. // left join ICSInventory D on b.INVCODE=d.INVCODE and b.WorkPoint=d.WorkPoint
  3446. // where A.lotno ='{0}' and a.workpoint='{1}' and a.BusinessCode='{2}'
  3447. // ";
  3448. sql = string.Format(sql, LotNo, WorkPoint, BusinessCode, Identification);
  3449. log.Debug("打印数据源:" + Environment.NewLine + sql);
  3450. dtLotno = DBHelper.SQlReturnData(sql, cmd);
  3451. lstDt = dtLotno;
  3452. }
  3453. #endregion
  3454. }
  3455. else
  3456. {
  3457. NewBarCodeList.Add(LotNo);
  3458. ///添加日志
  3459. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  3460. BEGIN
  3461. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  3462. RETURN
  3463. END
  3464. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransID,TransCode,TransSequence,LotNo,InvCode,
  3465. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  3466. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  3467. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  3468. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  3469. SELECT NEWID(),'{3}','{10}','{4}','{5}',a.LotNo ,a.InvCode ,
  3470. c.WarehouseCode,c.LocationCode,'','','{6}',
  3471. '','0','{7}','{8}','0','',
  3472. '','','',f.F_Account ,f.F_RealName ,
  3473. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  3474. FROM ICSInventoryLot a
  3475. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  3476. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  3477. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  3478. ";
  3479. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID, TransID);
  3480. log.Debug("出库日志" + sql);
  3481. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3482. {
  3483. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  3484. }
  3485. ZLtable = ICSControlModeService.GetZL();
  3486. if (ZLtable == null)
  3487. {
  3488. throw new Exception(language.GetNameByCode("WMSAPIInfo471"));
  3489. }
  3490. for (int i = 0; i < ZLtable.Rows.Count; i++)
  3491. {
  3492. string zlTransCode = ZLtable.Rows[i]["BusinessCode"].ToString();
  3493. string Enable = ZLtable.Rows[i]["Enable"].ToString();
  3494. if (zlTransCode.Equals(BusinessCode))
  3495. {
  3496. isDis = true;
  3497. if (Enable.Equals("True"))
  3498. {
  3499. ///更新日志
  3500. sql = @"
  3501. 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}')
  3502. BEGIN
  3503. RAISERROR('" + language.GetNameByCode("WMSAPIInfo472") + @"',16,1);
  3504. RETURN
  3505. END
  3506. UPDATE ICSWareHouseLotInfoLog SET EATTRIBUTE2='1' WHERE LotNo='{0}' AND WorkPoint='{1}' and transtype='15' and TransCode='{3}' and TransSequence='{4}'
  3507. ";
  3508. sql = string.Format(sql, LotNo, WorkPoint, LogID, TransCode, TransSequence);
  3509. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3510. {
  3511. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"占料标识更新失败!");
  3512. }
  3513. ///更新库存
  3514. sql = @"DECLARE @ReservedQuantity VARCHAR(10);
  3515. SELECT @ReservedQuantity = CAST(b.Quantity AS VARCHAR(10))
  3516. FROM ICSReserve b
  3517. INNER JOIN ICSWareHouseLotInfo a
  3518. ON a.invcode = b.invcode
  3519. AND a.workpoint = b.workpoint
  3520. AND a.warehousecode = b.whcode
  3521. WHERE '{4}' < b.Quantity
  3522. AND b.invcode = '{3}'
  3523. AND GETDATE() > b.BeginTime
  3524. AND GETDATE() < b.EndTime;
  3525. IF EXISTS(SELECT * FROM ICSWareHouseLotInfo a
  3526. INNER JOIN ICSReserve b ON a.invcode=b.invcode
  3527. AND a.workpoint=b.workpoint
  3528. AND a.warehousecode=b.whcode
  3529. WHERE a.invcode='{3}'
  3530. AND a.workpoint='{1}'
  3531. AND SYSDATETIME() > b.BeginTime
  3532. AND SYSDATETIME() < b.EndTime
  3533. AND b.enable='1')
  3534. BEGIN
  3535. IF @ReservedQuantity IS NOT NULL
  3536. BEGIN
  3537. RAISERROR('''{3}'',''{4}'''' + @ReservedQuantity + ''!', 16, 1);
  3538. RETURN
  3539. END
  3540. END
  3541. UPDATE ICSWareHouseLotInfo
  3542. SET Quantity = ISNULL(Quantity, 0) - '{2}',
  3543. LockQuantity = ISNULL(LockQuantity, 0) - '{2}'
  3544. WHERE LotNo = '{0}'
  3545. AND WorkPoint = '{1}';
  3546. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a
  3547. WHERE a.LotNo = '{0}'
  3548. AND a.WorkPoint = '{1}'
  3549. AND Quantity - LockQuantity < 0)
  3550. BEGIN
  3551. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"', 16, 1);
  3552. RETURN
  3553. END
  3554. ";
  3555. sql = string.Format(sql, LotNo, WorkPoint, Quantity, INVCODE, SUMQTY);
  3556. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3557. {
  3558. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  3559. }
  3560. }
  3561. else
  3562. {
  3563. if (InvOQc.Equals("True"))
  3564. {
  3565. sql = @"select a.id from ICSWareHouseLotInfo a
  3566. inner JOIN ICSInspectDetail b ON a.WorkPoint=b.WorkPoint and a.LotNo=b.LotNo
  3567. where a.LotNo='{0}' and a.WorkPoint='{1}' ";//and a.Inspect = '0'
  3568. sql = string.Format(sql, LotNo, WorkPoint);
  3569. DataTable Inspectdtt = DBHelper.SQlReturnData(sql, cmd);
  3570. if (Inspectdtt.Rows.Count > 0 && Inspectdtt != null)
  3571. {
  3572. sql = @"select a.id from ICSWareHouseLotInfo a
  3573. inner JOIN ICSInspectDetail b ON a.WorkPoint=b.WorkPoint and a.LotNo=b.LotNo
  3574. where a.LotNo='{0}' and a.WorkPoint='{1}' and a.Inspect = '0'";
  3575. sql = string.Format(sql, LotNo, WorkPoint);
  3576. DataTable InspectNewdtt = DBHelper.SQlReturnData(sql, cmd);
  3577. if (InspectNewdtt.Rows.Count == 0 || InspectNewdtt == null)
  3578. {
  3579. throw new Exception("条码在库检验,未检验完成,请确认!");
  3580. }
  3581. }
  3582. }
  3583. ///更新库存
  3584. sql = @"DECLARE @ReservedQuantity VARCHAR(10);
  3585. SELECT @ReservedQuantity = CAST(b.Quantity AS VARCHAR(10))
  3586. FROM ICSReserve b
  3587. INNER JOIN ICSWareHouseLotInfo a
  3588. ON a.invcode = b.invcode
  3589. AND a.workpoint = b.workpoint
  3590. AND a.warehousecode = b.whcode
  3591. WHERE '{4}' < b.Quantity
  3592. AND b.invcode = '{3}'
  3593. AND GETDATE() > b.BeginTime
  3594. AND GETDATE() < b.EndTime;
  3595. IF EXISTS(SELECT * FROM ICSWareHouseLotInfo a
  3596. INNER JOIN ICSReserve b ON a.invcode=b.invcode
  3597. AND a.workpoint=b.workpoint
  3598. AND a.warehousecode=b.whcode
  3599. WHERE a.invcode='{3}'
  3600. AND a.workpoint='{1}'
  3601. AND SYSDATETIME() > b.BeginTime
  3602. AND SYSDATETIME() < b.EndTime
  3603. AND b.enable='1')
  3604. BEGIN
  3605. IF @ReservedQuantity IS NOT NULL
  3606. BEGIN
  3607. RAISERROR('''{3}'',''{4}'''' + @ReservedQuantity + ''!', 16, 1);
  3608. RETURN
  3609. END
  3610. END
  3611. UPDATE ICSWareHouseLotInfo
  3612. SET Quantity = ISNULL(Quantity, 0) - '{2}'
  3613. WHERE LotNo = '{0}'
  3614. AND WorkPoint = '{1}';
  3615. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a
  3616. WHERE a.LotNo = '{0}'
  3617. AND a.WorkPoint = '{1}'
  3618. AND Quantity - LockQuantity < 0)
  3619. BEGIN
  3620. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"', 16, 1);
  3621. RETURN
  3622. END
  3623. ";
  3624. sql = string.Format(sql, LotNo, WorkPoint, Quantity, INVCODE, SUMQTY);
  3625. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3626. {
  3627. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  3628. }
  3629. }
  3630. }
  3631. // else { throw new Exception("单据类型未配置!"); }
  3632. }
  3633. //if (isDis == false)
  3634. //{
  3635. // throw new Exception("单据类型未配置!");
  3636. //}
  3637. /////更新库存
  3638. //sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  3639. // IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity<0)
  3640. // BEGIN
  3641. // RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  3642. // RETURN
  3643. // END";
  3644. //sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  3645. //if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3646. //{
  3647. // throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  3648. //}
  3649. }
  3650. }
  3651. else
  3652. {
  3653. if (LotEnable.Equals("True") && LotQTYYY - LotQTY > 0)
  3654. {
  3655. ZLtable = ICSControlModeService.GetZL();
  3656. if (ZLtable == null)
  3657. {
  3658. throw new Exception(language.GetNameByCode("WMSAPIInfo471"));
  3659. }
  3660. for (int i = 0; i < ZLtable.Rows.Count; i++)
  3661. {
  3662. string zlName = ZLtable.Rows[i]["Name"].ToString();
  3663. string zlTransCode = ZLtable.Rows[i]["BusinessCode"].ToString();
  3664. string Enable = ZLtable.Rows[i]["Enable"].ToString();
  3665. if (zlTransCode.Equals(BusinessCode))
  3666. {
  3667. if (Enable.Equals("True"))
  3668. {
  3669. ///更新日志
  3670. sql = @"
  3671. 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}')
  3672. BEGIN
  3673. RAISERROR('" + language.GetNameByCode("WMSAPIInfo472") + @"',16,1);
  3674. RETURN
  3675. END
  3676. UPDATE ICSWareHouseLotInfoLog SET EATTRIBUTE2='1' WHERE LotNo='{0}' AND WorkPoint='{1}' and transtype='15' and TransCode='{3}' and TransSequence='{4}'
  3677. ";
  3678. sql = string.Format(sql, LotNo, WorkPoint, LogID, TransCode, TransSequence);
  3679. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3680. {
  3681. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"占料标识更新失败!");
  3682. }
  3683. ///更新库存
  3684. sql = @"DECLARE @ReservedQuantity VARCHAR(10);
  3685. SELECT @ReservedQuantity = CAST(b.Quantity AS VARCHAR(10))
  3686. FROM ICSReserve b
  3687. INNER JOIN ICSWareHouseLotInfo a
  3688. ON a.invcode = b.invcode
  3689. AND a.workpoint = b.workpoint
  3690. AND a.warehousecode = b.whcode
  3691. WHERE '{4}' < b.Quantity
  3692. AND b.invcode = '{3}'
  3693. AND GETDATE() > b.BeginTime
  3694. AND GETDATE() < b.EndTime;
  3695. IF EXISTS(SELECT * FROM ICSWareHouseLotInfo a
  3696. INNER JOIN ICSReserve b ON a.invcode=b.invcode
  3697. AND a.workpoint=b.workpoint
  3698. AND a.warehousecode=b.whcode
  3699. WHERE a.invcode='{3}'
  3700. AND a.workpoint='{1}'
  3701. AND SYSDATETIME() > b.BeginTime
  3702. AND SYSDATETIME() < b.EndTime
  3703. AND b.enable='1')
  3704. BEGIN
  3705. IF @ReservedQuantity IS NOT NULL
  3706. BEGIN
  3707. RAISERROR('''{3}'',''{4}'''' + @ReservedQuantity + ''!', 16, 1);
  3708. RETURN
  3709. END
  3710. END
  3711. UPDATE ICSWareHouseLotInfo
  3712. SET Quantity = ISNULL(Quantity, 0) - '{2}',
  3713. LockQuantity = ISNULL(LockQuantity, 0) - '{2}'
  3714. WHERE LotNo = '{0}'
  3715. AND WorkPoint = '{1}';
  3716. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a
  3717. WHERE a.LotNo = '{0}'
  3718. AND a.WorkPoint = '{1}'
  3719. AND Quantity - LockQuantity < 0)
  3720. BEGIN
  3721. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"', 16, 1);
  3722. RETURN
  3723. END
  3724. ";
  3725. sql = string.Format(sql, LotNo, WorkPoint, Quantity, INVCODE, SUMQTY, TransCode, TransSequence);
  3726. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3727. {
  3728. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  3729. }
  3730. }
  3731. else
  3732. {
  3733. if (InvOQc.Equals("True"))
  3734. {
  3735. sql = @"select a.id from ICSWareHouseLotInfo a
  3736. inner JOIN ICSInspectDetail b ON a.WorkPoint=b.WorkPoint and a.LotNo=b.LotNo
  3737. where a.LotNo='{0}' and a.WorkPoint='{1}' ";//and a.Inspect = '0'
  3738. sql = string.Format(sql, LotNo, WorkPoint);
  3739. DataTable Inspectdtt = DBHelper.SQlReturnData(sql, cmd);
  3740. if (Inspectdtt.Rows.Count > 0 && Inspectdtt != null)
  3741. {
  3742. sql = @"select a.id from ICSWareHouseLotInfo a
  3743. inner JOIN ICSInspectDetail b ON a.WorkPoint=b.WorkPoint and a.LotNo=b.LotNo
  3744. where a.LotNo='{0}' and a.WorkPoint='{1}' and a.Inspect = '0'";
  3745. sql = string.Format(sql, LotNo, WorkPoint);
  3746. DataTable InspectNewdtt = DBHelper.SQlReturnData(sql, cmd);
  3747. if (InspectNewdtt.Rows.Count == 0 || InspectNewdtt == null)
  3748. {
  3749. throw new Exception("条码在库检验,未检验完成,请确认!");
  3750. }
  3751. }
  3752. }
  3753. ///更新库存
  3754. sql = @"DECLARE @ReservedQuantity VARCHAR(10);
  3755. SELECT @ReservedQuantity = CAST(b.Quantity AS VARCHAR(10))
  3756. FROM ICSReserve b
  3757. INNER JOIN ICSWareHouseLotInfo a
  3758. ON a.invcode = b.invcode
  3759. AND a.workpoint = b.workpoint
  3760. AND a.warehousecode = b.whcode
  3761. WHERE '{4}' < b.Quantity
  3762. AND b.invcode = '{3}'
  3763. AND GETDATE() > b.BeginTime
  3764. AND GETDATE() < b.EndTime;
  3765. IF EXISTS(SELECT * FROM ICSWareHouseLotInfo a
  3766. INNER JOIN ICSReserve b ON a.invcode=b.invcode
  3767. AND a.workpoint=b.workpoint
  3768. AND a.warehousecode=b.whcode
  3769. WHERE a.invcode='{3}'
  3770. AND a.workpoint='{1}'
  3771. AND SYSDATETIME() > b.BeginTime
  3772. AND SYSDATETIME() < b.EndTime
  3773. AND b.enable='1')
  3774. BEGIN
  3775. IF @ReservedQuantity IS NOT NULL
  3776. BEGIN
  3777. RAISERROR('''{3}'',''{4}'''' + @ReservedQuantity + ''!', 16, 1);
  3778. RETURN
  3779. END
  3780. END
  3781. UPDATE ICSWareHouseLotInfo
  3782. SET Quantity = ISNULL(Quantity, 0) - '{2}'
  3783. WHERE LotNo = '{0}'
  3784. AND WorkPoint = '{1}';
  3785. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a
  3786. WHERE a.LotNo = '{0}'
  3787. AND a.WorkPoint = '{1}'
  3788. AND Quantity - LockQuantity < 0)
  3789. BEGIN
  3790. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"', 16, 1);
  3791. RETURN
  3792. END
  3793. ";
  3794. sql = string.Format(sql, LotNo, WorkPoint, Quantity, INVCODE, SUMQTY);
  3795. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3796. {
  3797. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  3798. }
  3799. }
  3800. }
  3801. }
  3802. ///分批前添加日志
  3803. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  3804. BEGIN
  3805. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  3806. RETURN
  3807. END
  3808. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransID,TransCode,TransSequence,LotNo,InvCode,
  3809. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  3810. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  3811. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  3812. MTIME,WorkPoint,EATTRIBUTE1)
  3813. SELECT NEWID(),'{3}','{9}','{7}','{8}',a.LotNo ,a.InvCode ,
  3814. c.WarehouseCode,c.LocationCode,'','',c.Quantity+{6},
  3815. '','0','{4}','31','0','',
  3816. '','','',f.F_Account ,f.F_RealName ,
  3817. SYSDATETIME() ,a.WorkPoint ,''
  3818. FROM ICSInventoryLot a
  3819. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  3820. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  3821. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  3822. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  3823. ";
  3824. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransType, BusinessCode, Quantity, TransCode, TransSequence, TransID);
  3825. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3826. {
  3827. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  3828. }
  3829. #region 获取分批后的条码(lotstr)
  3830. sql = @"SELECT TOP 1 LotNO FROM ICSInventoryLot WHERE EATTRIBUTE1='{0}' AND WorkPoint='{1}'
  3831. ORDER BY CAST(SUBSTRING(LotNO, (LEN(LotNO)-CHARINDEX('-',REVERSE(LotNO))+1)+1,CHARINDEX('-',REVERSE(LotNO))-1) AS INT) DESC";
  3832. sql = string.Format(sql, LotNo, WorkPoint);
  3833. dt = DBHelper.SQlReturnData(sql, cmd);
  3834. if (dt.Rows.Count == 0)
  3835. {
  3836. lotstr = LotNo + "-" + 1;
  3837. }
  3838. else
  3839. {
  3840. lotstr = LotNo + "-" + (Convert.ToInt32(dt.Rows[0]["LotNO"].ToString().Split('-')[dt.Rows[0]["LotNO"].ToString().Split('-').Length - 1]) + 1).ToString();
  3841. }
  3842. NewBarCodeList.Add(lotstr);//将分批后新条码添加到新集合
  3843. #endregion
  3844. #region 将分批后的条码记录插入条码表,库存表及日志表并将原条码库存数量清零
  3845. sql = @"INSERT INTO ICSInventoryLot(ID,LotNo,InvCode,ProductDate,ExpirationDate,
  3846. Quantity,Amount,ExtensionID,Type,PrintTimes,
  3847. LastPrintUser,LastPrintTime,MUSER,MUSERName,MTIME,
  3848. WorkPoint,EATTRIBUTE1,EATTRIBUTE2,EATTRIBUTE3,EATTRIBUTE4,EATTRIBUTE5,EATTRIBUTE6,EATTRIBUTE7,EATTRIBUTE8,
  3849. EATTRIBUTE9,EATTRIBUTE10,EATTRIBUTE11,EATTRIBUTE12,EATTRIBUTE13,EATTRIBUTE14,EATTRIBUTE15,EATTRIBUTE16,EATTRIBUTE17,EATTRIBUTE18,EATTRIBUTE19,EATTRIBUTE20,
  3850. EATTRIBUTE21,EATTRIBUTE22,EATTRIBUTE23,EATTRIBUTE24,EATTRIBUTE25,EATTRIBUTE26,EATTRIBUTE27,EATTRIBUTE28,EATTRIBUTE29,EATTRIBUTE30)
  3851. SELECT TOP 1 NEWID(),'{0}',a.InvCode,a.ProductDate,a.ExpirationDate,
  3852. '{2}',a.Amount/a.Quantity*Quantity,a.ExtensionID,a.Type,a.PrintTimes,
  3853. a.LastPrintUser,a.LastPrintTime,a.MUSER ,a.MUSERName ,GETDATE(),
  3854. a.WorkPoint ,'{1}',a.EATTRIBUTE2,a.EATTRIBUTE3,a.EATTRIBUTE4,a.EATTRIBUTE5,a.EATTRIBUTE6,a.EATTRIBUTE7,a.EATTRIBUTE8,
  3855. a.EATTRIBUTE9,a.EATTRIBUTE10,a.EATTRIBUTE11,a.EATTRIBUTE12,a.EATTRIBUTE13,a.EATTRIBUTE14,a.EATTRIBUTE15,a.EATTRIBUTE16,a.EATTRIBUTE17,a.EATTRIBUTE18,a.EATTRIBUTE19,a.EATTRIBUTE20,
  3856. a.EATTRIBUTE21,a.EATTRIBUTE22,a.EATTRIBUTE23,a.EATTRIBUTE24,a.EATTRIBUTE25,a.EATTRIBUTE26,a.EATTRIBUTE27,a.EATTRIBUTE28,a.EATTRIBUTE29,a.EATTRIBUTE30
  3857. From ICSInventoryLot a
  3858. where a.LotNo='{1}' and a.WorkPoint='{3}'";
  3859. sql = string.Format(sql, lotstr, LotNo, Quantity, WorkPoint);
  3860. cmd.CommandText = sql;
  3861. result = cmd.ExecuteNonQuery();
  3862. if (result <= 0)
  3863. {
  3864. throw new Exception(language.GetNameByCode("WMSAPIInfo195"));//条码分批后条码表存入失败!
  3865. }
  3866. sql = @"INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  3867. select NEWID(),'{0}',WarehouseCode,LocationCode,InvCode,'0',InDate,LockQuantity
  3868. ,MUSER,MUSERName,GETDATE(),'{3}',''
  3869. from ICSWareHouseLotInfo
  3870. where LotNO='{1}' AND WorkPoint='{3}'";
  3871. sql = string.Format(sql, lotstr, LotNo, Quantity, WorkPoint);
  3872. cmd.CommandText = sql;
  3873. result = cmd.ExecuteNonQuery();
  3874. if (result <= 0)
  3875. {
  3876. throw new Exception(language.GetNameByCode("WMSAPIInfo196"));//条码分批后库存表存入失败!
  3877. }
  3878. //插入条码单据表
  3879. sql = @"INSERT INTO ICSInventoryLotDetail(LotNo,TransID,TransCode,TransSequence,MUSER,MUSERName,MTIME,WorkPoint)
  3880. SELECT '{3}','{4}',b.TransCode,b.TransSequence,f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint
  3881. FROM ICSInventoryLot a
  3882. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  3883. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  3884. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  3885. sql = string.Format(sql, LotNo, WorkPoint, User, lotstr, TransID);
  3886. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3887. {
  3888. throw new Exception(language.GetNameByCode("WMSAPIInfo174"));//"条码单据表写入失败!");
  3889. }
  3890. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransID,TransCode,TransSequence,LotNo,InvCode,
  3891. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  3892. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  3893. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  3894. MTIME,WorkPoint,EATTRIBUTE1,LogID)
  3895. SELECT NEWID(),'{3}','{11}','{4}','{5}','{10}' ,a.InvCode ,
  3896. c.WarehouseCode,c.LocationCode,'','','{6}',
  3897. '','0','{7}','{8}','0','',
  3898. '','','',f.F_Account ,f.F_RealName ,
  3899. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  3900. FROM ICSInventoryLot a
  3901. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  3902. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  3903. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  3904. ";
  3905. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID, lotstr, TransID);
  3906. cmd.CommandText = sql;
  3907. result = cmd.ExecuteNonQuery();
  3908. if (result <= 0)
  3909. {
  3910. throw new Exception(language.GetNameByCode("WMSAPIInfo197"));//条码分批后库存日志表存入失败!
  3911. }
  3912. ///添加日志
  3913. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  3914. BEGIN
  3915. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  3916. RETURN
  3917. END
  3918. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransID,TransCode,TransSequence,LotNo,InvCode,
  3919. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  3920. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  3921. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  3922. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  3923. SELECT NEWID(),'{3}','{10}','{4}','{5}',a.LotNo ,a.InvCode ,
  3924. c.WarehouseCode,c.LocationCode,'','',c.Quantity,
  3925. '','0','{7}','32','0','',
  3926. '','','',f.F_Account ,f.F_RealName ,
  3927. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  3928. FROM ICSInventoryLot a
  3929. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  3930. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  3931. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  3932. ";
  3933. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID, TransID);
  3934. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3935. {
  3936. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  3937. }
  3938. if (PrintEnable.Equals("True") && DisPrintEnable.Equals("True"))
  3939. {
  3940. string PrintData = DBHelper.ReadPrintStream();
  3941. sql = @"" + PrintData + "";
  3942. //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
  3943. // from ICSWareHouseLotInfolog A
  3944. // left join ICSInventoryLot B on A.LotNO=B.LotNO and a.WorkPoint=b.WorkPoint
  3945. // left join ICSWareHouseLotInfo C ON A.LotNO=C.LotNO and a.WorkPoint=c.WorkPoint
  3946. // left join ICSInventory D on b.INVCODE=d.INVCODE and b.WorkPoint=d.WorkPoint
  3947. // where A.lotno ='{0}' and a.workpoint='{1}' and a.BusinessCode='{2}'
  3948. // ";
  3949. sql = string.Format(sql, LotNo, WorkPoint, BusinessCode, Identification);
  3950. log.Debug("打印数据源:" + Environment.NewLine + sql);
  3951. dtLotno = DBHelper.SQlReturnData(sql, cmd);
  3952. lstDt = dtLotno;
  3953. }
  3954. #endregion
  3955. }
  3956. else
  3957. {
  3958. NewBarCodeList.Add(LotNo);
  3959. ///添加日志
  3960. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  3961. BEGIN
  3962. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  3963. RETURN
  3964. END
  3965. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransID,TransCode,TransSequence,LotNo,InvCode,
  3966. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  3967. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  3968. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  3969. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  3970. SELECT NEWID(),'{3}','{10}','{4}','{5}',a.LotNo ,a.InvCode ,
  3971. c.WarehouseCode,c.LocationCode,'','','{6}',
  3972. '','0','{7}','{8}','0','',
  3973. '','','',f.F_Account ,f.F_RealName ,
  3974. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  3975. FROM ICSInventoryLot a
  3976. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  3977. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  3978. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  3979. ";
  3980. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID, TransID);
  3981. log.Debug("出库日志" + sql);
  3982. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3983. {
  3984. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  3985. }
  3986. ZLtable = ICSControlModeService.GetZL();
  3987. if (ZLtable == null)
  3988. {
  3989. throw new Exception(language.GetNameByCode("WMSAPIInfo471"));
  3990. }
  3991. for (int i = 0; i < ZLtable.Rows.Count; i++)
  3992. {
  3993. string zlTransCode = ZLtable.Rows[i]["BusinessCode"].ToString();
  3994. string Enable = ZLtable.Rows[i]["Enable"].ToString();
  3995. if (zlTransCode.Equals(BusinessCode))
  3996. {
  3997. isDis = true;
  3998. if (Enable.Equals("True"))
  3999. {
  4000. ///更新日志
  4001. sql = @"
  4002. 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}')
  4003. BEGIN
  4004. RAISERROR('" + language.GetNameByCode("WMSAPIInfo472") + @"',16,1);
  4005. RETURN
  4006. END
  4007. UPDATE ICSWareHouseLotInfoLog SET EATTRIBUTE2='1' WHERE LotNo='{0}' AND WorkPoint='{1}' and transtype='15' and TransCode='{3}' and TransSequence='{4}'
  4008. ";
  4009. sql = string.Format(sql, LotNo, WorkPoint, LogID, TransCode, TransSequence);
  4010. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4011. {
  4012. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"占料标识更新失败!");
  4013. }
  4014. ///更新库存
  4015. sql = @"DECLARE @ReservedQuantity VARCHAR(10);
  4016. SELECT @ReservedQuantity = CAST(b.Quantity AS VARCHAR(10))
  4017. FROM ICSReserve b
  4018. INNER JOIN ICSWareHouseLotInfo a
  4019. ON a.invcode = b.invcode
  4020. AND a.workpoint = b.workpoint
  4021. AND a.warehousecode = b.whcode
  4022. WHERE '{4}' < b.Quantity
  4023. AND b.invcode = '{3}'
  4024. AND GETDATE() > b.BeginTime
  4025. AND GETDATE() < b.EndTime;
  4026. IF EXISTS(SELECT * FROM ICSWareHouseLotInfo a
  4027. INNER JOIN ICSReserve b ON a.invcode=b.invcode
  4028. AND a.workpoint=b.workpoint
  4029. AND a.warehousecode=b.whcode
  4030. WHERE a.invcode='{3}'
  4031. AND a.workpoint='{1}'
  4032. AND SYSDATETIME() > b.BeginTime
  4033. AND SYSDATETIME() < b.EndTime
  4034. AND b.enable='1')
  4035. BEGIN
  4036. IF @ReservedQuantity IS NOT NULL
  4037. BEGIN
  4038. RAISERROR('''{3}'',''{4}'''' + @ReservedQuantity + ''!', 16, 1);
  4039. RETURN
  4040. END
  4041. END
  4042. UPDATE ICSWareHouseLotInfo
  4043. SET Quantity = ISNULL(Quantity, 0) - '{2}',
  4044. LockQuantity = ISNULL(LockQuantity, 0) - '{2}'
  4045. WHERE LotNo = '{0}'
  4046. AND WorkPoint = '{1}';
  4047. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a
  4048. WHERE a.LotNo = '{0}'
  4049. AND a.WorkPoint = '{1}'
  4050. AND Quantity - LockQuantity < 0)
  4051. BEGIN
  4052. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"', 16, 1);
  4053. RETURN
  4054. END
  4055. ";
  4056. sql = string.Format(sql, LotNo, WorkPoint, Quantity, INVCODE, SUMQTY);
  4057. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4058. {
  4059. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  4060. }
  4061. }
  4062. else
  4063. {
  4064. if (InvOQc.Equals("True"))
  4065. {
  4066. sql = @"select a.id from ICSWareHouseLotInfo a
  4067. inner JOIN ICSInspectDetail b ON a.WorkPoint=b.WorkPoint and a.LotNo=b.LotNo
  4068. where a.LotNo='{0}' and a.WorkPoint='{1}' ";//and a.Inspect = '0'
  4069. sql = string.Format(sql, LotNo, WorkPoint);
  4070. DataTable Inspectdtt = DBHelper.SQlReturnData(sql, cmd);
  4071. if (Inspectdtt.Rows.Count > 0 && Inspectdtt != null)
  4072. {
  4073. sql = @"select a.id from ICSWareHouseLotInfo a
  4074. inner JOIN ICSInspectDetail b ON a.WorkPoint=b.WorkPoint and a.LotNo=b.LotNo
  4075. where a.LotNo='{0}' and a.WorkPoint='{1}' and a.Inspect = '0'";
  4076. sql = string.Format(sql, LotNo, WorkPoint);
  4077. DataTable InspectNewdtt = DBHelper.SQlReturnData(sql, cmd);
  4078. if (InspectNewdtt.Rows.Count == 0 || InspectNewdtt == null)
  4079. {
  4080. throw new Exception("条码在库检验,未检验完成,请确认!");
  4081. }
  4082. }
  4083. }
  4084. ///更新库存
  4085. sql = @"DECLARE @ReservedQuantity VARCHAR(10);
  4086. SELECT @ReservedQuantity = CAST(b.Quantity AS VARCHAR(10))
  4087. FROM ICSReserve b
  4088. INNER JOIN ICSWareHouseLotInfo a
  4089. ON a.invcode = b.invcode
  4090. AND a.workpoint = b.workpoint
  4091. AND a.warehousecode = b.whcode
  4092. WHERE '{4}' < b.Quantity
  4093. AND b.invcode = '{3}'
  4094. AND GETDATE() > b.BeginTime
  4095. AND GETDATE() < b.EndTime;
  4096. IF EXISTS(SELECT * FROM ICSWareHouseLotInfo a
  4097. INNER JOIN ICSReserve b ON a.invcode=b.invcode
  4098. AND a.workpoint=b.workpoint
  4099. AND a.warehousecode=b.whcode
  4100. WHERE a.invcode='{3}'
  4101. AND a.workpoint='{1}'
  4102. AND SYSDATETIME() > b.BeginTime
  4103. AND SYSDATETIME() < b.EndTime
  4104. AND b.enable='1')
  4105. BEGIN
  4106. IF @ReservedQuantity IS NOT NULL
  4107. BEGIN
  4108. RAISERROR('''{3}'',''{4}'''' + @ReservedQuantity + ''!', 16, 1);
  4109. RETURN
  4110. END
  4111. END
  4112. UPDATE ICSWareHouseLotInfo
  4113. SET Quantity = ISNULL(Quantity, 0) - '{2}'
  4114. WHERE LotNo = '{0}'
  4115. AND WorkPoint = '{1}';
  4116. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a
  4117. WHERE a.LotNo = '{0}'
  4118. AND a.WorkPoint = '{1}'
  4119. AND Quantity - LockQuantity < 0)
  4120. BEGIN
  4121. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"', 16, 1);
  4122. RETURN
  4123. END
  4124. ";
  4125. sql = string.Format(sql, LotNo, WorkPoint, Quantity, INVCODE, SUMQTY);
  4126. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4127. {
  4128. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  4129. }
  4130. }
  4131. }
  4132. // else { throw new Exception("单据类型未配置!"); }
  4133. }
  4134. //if (isDis == false)
  4135. //{
  4136. // throw new Exception("单据类型未配置!");
  4137. //}
  4138. /////更新库存
  4139. //sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  4140. // IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity<0)
  4141. // BEGIN
  4142. // RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  4143. // RETURN
  4144. // END";
  4145. //sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  4146. //if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4147. //{
  4148. // throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  4149. //}
  4150. }
  4151. }
  4152. }
  4153. catch (Exception)
  4154. {
  4155. throw;
  4156. }
  4157. return lstDt;
  4158. }
  4159. /// <summary>
  4160. /// 减少库存(库存表四舍五入)
  4161. /// </summary>
  4162. /// <param name="Identification"></param>
  4163. /// <param name="TransCode"></param>
  4164. /// <param name="TransSequence"></param>
  4165. /// <param name="LotNo"></param>
  4166. /// <param name="Quantity"></param>
  4167. /// <param name="User"></param>
  4168. /// <param name="WorkPoint"></param>
  4169. /// <param name="TransType"></param>
  4170. /// <param name="BusinessCode"></param>
  4171. /// <param name="cmd"></param>
  4172. /// <param name="language"></param>
  4173. /// <param name="LogID"></param>
  4174. /// <param name="TransID"></param>
  4175. /// <param name="MergeID"></param>
  4176. /// <returns></returns>
  4177. public static DataTable WareHouseLotInfoDownRound(string Identification, string TransCode, string TransSequence, string LotNo, string Quantity, string User,
  4178. string WorkPoint, string TransType, string BusinessCode, SqlCommand cmd, Dictionary<string, string> language, string LogID, string TransID, string MergeID = "")
  4179. {
  4180. decimal LotQTYYY = 0;
  4181. decimal LotQTY = 0;
  4182. decimal SUMQTY = 0;
  4183. string INVCODE = "";
  4184. string Inspect = "";
  4185. string LotEnable = "";
  4186. string LotDocEnable = "";
  4187. string InvOQc = "";
  4188. string chekEnable = "";
  4189. string DisPrintEnable = "";
  4190. string PrintEnable = "";
  4191. string sql = "";
  4192. string lotstr = "";
  4193. string RoundedQuantity = Quantity;//记录四舍五入后的数量
  4194. int result = 0;
  4195. bool isDis = false;
  4196. List<string> NewBarCodeList = new List<string>();
  4197. DataTable dtLotno = new DataTable();
  4198. DataTable lstDt = new DataTable();
  4199. DataTable ZLtable = new DataTable();
  4200. try
  4201. {
  4202. //获取小数位数
  4203. sql = @"SELECT Figure FROM ICSConfiguration WHERE Code='Figure001' AND WorkPoint='{0}'";
  4204. sql = string.Format(sql, WorkPoint);
  4205. int figureNum = (int)(DBHelper.ExecuteScalar(sql, cmd));
  4206. decimal numericQuantity;
  4207. //进行四舍五入操作
  4208. if (decimal.TryParse(Quantity,out numericQuantity))
  4209. {
  4210. RoundedQuantity = Math.Round(numericQuantity,figureNum).ToString();
  4211. }
  4212. //检验是否分批
  4213. sql = @"SELECT b.LotEnable,b.PrintEnable,b.InvOQC,b.LotDocEnable FROM ICSInventoryLot a
  4214. LEFT JOIN ICSInventory b ON a.InvCode=b.InvCode AND a.WorkPoint=b.WorkPoint
  4215. where a.LotNo='{0}' and a.WorkPoint='{1}'
  4216. ";
  4217. sql = string.Format(sql, LotNo, WorkPoint);
  4218. DataTable dt = DBHelper.SQlReturnData(sql, cmd);
  4219. if (dt.Rows.Count == 0)
  4220. {
  4221. throw new Exception(language.GetNameByCode("WMSAPIInfo369"));
  4222. }
  4223. else
  4224. {
  4225. LotEnable = dt.Rows[0]["LotEnable"].ToString();
  4226. LotDocEnable = dt.Rows[0]["LotDocEnable"].ToString();
  4227. PrintEnable = dt.Rows[0]["PrintEnable"].ToString();
  4228. InvOQc = dt.Rows[0]["InvOQC"].ToString();
  4229. }
  4230. log.Debug("INVOQC:" + InvOQc);
  4231. 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
  4232. from Sys_SRM_Items a
  4233. left join Sys_SRM_ItemsDetail b on a.F_Id=b.F_ItemId
  4234. where a.F_EnCode='TransBatch' and b.F_ItemCode='{0}' )
  4235. BEGIN
  4236. RAISERROR('" + language.GetNameByCode("WMSAPIInfo470") + @"',16,1);
  4237. RETURN
  4238. END
  4239. select b.F_ItemCode as Code ,b.F_ItemName as Name,b.F_EnabledMark AS Enable ,b.F_IsDefault AS DisPrintEnable
  4240. from Sys_SRM_Items a
  4241. left join Sys_SRM_ItemsDetail b on a.F_Id=b.F_ItemId
  4242. where a.F_EnCode='TransBatch' and b.F_ItemCode='{0}'
  4243. ";
  4244. cheksql = string.Format(cheksql, BusinessCode);
  4245. DataTable chekdt = DBHelper.SQlReturnData(cheksql, cmd);
  4246. if (chekdt.Rows.Count == 0)
  4247. {
  4248. throw new Exception(language.GetNameByCode("WMSAPIInfo369"));
  4249. }
  4250. else
  4251. {
  4252. chekEnable = chekdt.Rows[0]["Enable"].ToString();
  4253. DisPrintEnable = chekdt.Rows[0]["DisPrintEnable"].ToString();
  4254. }
  4255. sql = @"select Quantity,invcode,Inspect from ICSWareHouseLotInfo
  4256. where LotNO='{0}' AND WorkPoint='{1}'";
  4257. sql = string.Format(sql, LotNo, WorkPoint);
  4258. DataTable dtt = DBHelper.SQlReturnData(sql, cmd);
  4259. LotQTYYY = Convert.ToDecimal(dtt.Rows[0]["Quantity"]);
  4260. LotQTY = Convert.ToDecimal(RoundedQuantity);
  4261. INVCODE = dtt.Rows[0]["invcode"].ToString();
  4262. Inspect = dtt.Rows[0]["Inspect"].ToString();
  4263. sql = @"SELECT SUM(a.quantity)-'{3}' AS SumQTY FROM ICSWareHouseLotInfo a
  4264. INNER JOIN ICSReserve b ON a.invcode=b.invcode and a.workpoint=b.workpoint
  4265. where a.invcode='{2}' and a.workpoint='{1}' and GETDATE()>b.BeginTime and GETDATE()<b.EndTime";
  4266. sql = string.Format(sql, LotNo, WorkPoint, INVCODE, RoundedQuantity);
  4267. DataTable Sumdtt = DBHelper.SQlReturnData(sql, cmd);
  4268. log.Debug(Sumdtt.Rows[0]["SumQTY"]);
  4269. SUMQTY = 0;
  4270. //Convert.ToDecimal(Sumdtt.Rows[0]["SumQTY"]);
  4271. if (LotDocEnable.Equals("True"))
  4272. {
  4273. if (LotEnable.Equals("True") && chekEnable.Equals("True") && LotQTYYY - LotQTY > 0)
  4274. {
  4275. ZLtable = ICSControlModeService.GetZL();
  4276. if (ZLtable == null)
  4277. {
  4278. throw new Exception(language.GetNameByCode("WMSAPIInfo471"));
  4279. }
  4280. for (int i = 0; i < ZLtable.Rows.Count; i++)
  4281. {
  4282. string zlName = ZLtable.Rows[i]["Name"].ToString();
  4283. string zlTransCode = ZLtable.Rows[i]["BusinessCode"].ToString();
  4284. string Enable = ZLtable.Rows[i]["Enable"].ToString();
  4285. if (zlTransCode.Equals(BusinessCode))
  4286. {
  4287. if (Enable.Equals("True"))
  4288. {
  4289. ///更新日志
  4290. sql = @"
  4291. 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}')
  4292. BEGIN
  4293. RAISERROR('" + language.GetNameByCode("WMSAPIInfo472") + @"',16,1);
  4294. RETURN
  4295. END
  4296. UPDATE ICSWareHouseLotInfoLog SET EATTRIBUTE2='1' WHERE LotNo='{0}' AND WorkPoint='{1}' and transtype='15' and TransCode='{3}' and TransSequence='{4}'
  4297. ";
  4298. sql = string.Format(sql, LotNo, WorkPoint, LogID, TransCode, TransSequence);
  4299. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4300. {
  4301. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"占料标识更新失败!");
  4302. }
  4303. ///更新库存
  4304. sql = @"DECLARE @ReservedQuantity VARCHAR(10);
  4305. SELECT @ReservedQuantity = CAST(b.Quantity AS VARCHAR(10))
  4306. FROM ICSReserve b
  4307. INNER JOIN ICSWareHouseLotInfo a
  4308. ON a.invcode = b.invcode
  4309. AND a.workpoint = b.workpoint
  4310. AND a.warehousecode = b.whcode
  4311. WHERE '{4}' < b.Quantity
  4312. AND b.invcode = '{3}'
  4313. AND GETDATE() > b.BeginTime
  4314. AND GETDATE() < b.EndTime;
  4315. IF EXISTS(SELECT * FROM ICSWareHouseLotInfo a
  4316. INNER JOIN ICSReserve b ON a.invcode=b.invcode
  4317. AND a.workpoint=b.workpoint
  4318. AND a.warehousecode=b.whcode
  4319. WHERE a.invcode='{3}'
  4320. AND a.workpoint='{1}'
  4321. AND SYSDATETIME() > b.BeginTime
  4322. AND SYSDATETIME() < b.EndTime
  4323. AND b.enable='1')
  4324. BEGIN
  4325. IF @ReservedQuantity IS NOT NULL
  4326. BEGIN
  4327. RAISERROR('''{3}'',''{4}'''' + @ReservedQuantity + ''!', 16, 1);
  4328. RETURN
  4329. END
  4330. END
  4331. UPDATE ICSWareHouseLotInfo
  4332. SET Quantity = ISNULL(Quantity, 0) - '{2}',
  4333. LockQuantity = ISNULL(LockQuantity, 0) - '{2}'
  4334. WHERE LotNo = '{0}'
  4335. AND WorkPoint = '{1}';
  4336. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a
  4337. WHERE a.LotNo = '{0}'
  4338. AND a.WorkPoint = '{1}'
  4339. AND Quantity - LockQuantity < 0)
  4340. BEGIN
  4341. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"', 16, 1);
  4342. RETURN
  4343. END
  4344. ";
  4345. sql = string.Format(sql, LotNo, WorkPoint, RoundedQuantity, INVCODE, SUMQTY);
  4346. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4347. {
  4348. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  4349. }
  4350. }
  4351. else
  4352. {
  4353. if (InvOQc.Equals("True"))
  4354. {
  4355. sql = @"select a.id from ICSWareHouseLotInfo a
  4356. inner JOIN ICSInspectDetail b ON a.WorkPoint=b.WorkPoint and a.LotNo=b.LotNo
  4357. where a.LotNo='{0}' and a.WorkPoint='{1}' ";//and a.Inspect = '0'
  4358. sql = string.Format(sql, LotNo, WorkPoint);
  4359. DataTable Inspectdtt = DBHelper.SQlReturnData(sql, cmd);
  4360. if (Inspectdtt.Rows.Count > 0 && Inspectdtt != null)
  4361. {
  4362. sql = @"select a.id from ICSWareHouseLotInfo a
  4363. inner JOIN ICSInspectDetail b ON a.WorkPoint=b.WorkPoint and a.LotNo=b.LotNo
  4364. where a.LotNo='{0}' and a.WorkPoint='{1}' and a.Inspect = '0'";
  4365. sql = string.Format(sql, LotNo, WorkPoint);
  4366. DataTable InspectNewdtt = DBHelper.SQlReturnData(sql, cmd);
  4367. if (InspectNewdtt.Rows.Count == 0 || InspectNewdtt == null)
  4368. {
  4369. throw new Exception("条码在库检验,未检验完成,请确认!");
  4370. }
  4371. }
  4372. }
  4373. ///更新库存
  4374. sql = @"DECLARE @ReservedQuantity VARCHAR(10);
  4375. SELECT @ReservedQuantity = CAST(b.Quantity AS VARCHAR(10))
  4376. FROM ICSReserve b
  4377. INNER JOIN ICSWareHouseLotInfo a
  4378. ON a.invcode = b.invcode
  4379. AND a.workpoint = b.workpoint
  4380. AND a.warehousecode = b.whcode
  4381. WHERE '{4}' < b.Quantity
  4382. AND b.invcode = '{3}'
  4383. AND GETDATE() > b.BeginTime
  4384. AND GETDATE() < b.EndTime;
  4385. IF EXISTS(SELECT * FROM ICSWareHouseLotInfo a
  4386. INNER JOIN ICSReserve b ON a.invcode=b.invcode
  4387. AND a.workpoint=b.workpoint
  4388. AND a.warehousecode=b.whcode
  4389. WHERE a.invcode='{3}'
  4390. AND a.workpoint='{1}'
  4391. AND SYSDATETIME() > b.BeginTime
  4392. AND SYSDATETIME() < b.EndTime
  4393. AND b.enable='1')
  4394. BEGIN
  4395. IF @ReservedQuantity IS NOT NULL
  4396. BEGIN
  4397. RAISERROR('''{3}'',''{4}'''' + @ReservedQuantity + ''!', 16, 1);
  4398. RETURN
  4399. END
  4400. END
  4401. UPDATE ICSWareHouseLotInfo
  4402. SET Quantity = ISNULL(Quantity, 0) - '{2}'
  4403. WHERE LotNo = '{0}'
  4404. AND WorkPoint = '{1}';
  4405. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a
  4406. WHERE a.LotNo = '{0}'
  4407. AND a.WorkPoint = '{1}'
  4408. AND Quantity - LockQuantity < 0)
  4409. BEGIN
  4410. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"', 16, 1);
  4411. RETURN
  4412. END
  4413. ";
  4414. sql = string.Format(sql, LotNo, WorkPoint, RoundedQuantity, INVCODE, SUMQTY);
  4415. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4416. {
  4417. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  4418. }
  4419. }
  4420. }
  4421. }
  4422. ///分批前添加日志
  4423. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  4424. BEGIN
  4425. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  4426. RETURN
  4427. END
  4428. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransID,TransCode,TransSequence,LotNo,InvCode,
  4429. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  4430. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  4431. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  4432. MTIME,WorkPoint,EATTRIBUTE1)
  4433. SELECT NEWID(),'{3}','{9}','{7}','{8}',a.LotNo ,a.InvCode ,
  4434. c.WarehouseCode,c.LocationCode,'','',c.Quantity+{6},
  4435. '','0','{4}','31','0','',
  4436. '','','',f.F_Account ,f.F_RealName ,
  4437. SYSDATETIME() ,a.WorkPoint ,''
  4438. FROM ICSInventoryLot a
  4439. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  4440. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  4441. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  4442. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  4443. ";
  4444. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransType, BusinessCode, Quantity, TransCode, TransSequence, TransID);
  4445. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4446. {
  4447. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  4448. }
  4449. #region 获取分批后的条码(lotstr)
  4450. sql = @"SELECT TOP 1 LotNO FROM ICSInventoryLot WHERE EATTRIBUTE1='{0}' AND WorkPoint='{1}'
  4451. ORDER BY CAST(SUBSTRING(LotNO, (LEN(LotNO)-CHARINDEX('-',REVERSE(LotNO))+1)+1,CHARINDEX('-',REVERSE(LotNO))-1) AS INT) DESC";
  4452. sql = string.Format(sql, LotNo, WorkPoint);
  4453. dt = DBHelper.SQlReturnData(sql, cmd);
  4454. if (dt.Rows.Count == 0)
  4455. {
  4456. lotstr = LotNo + "-" + 1;
  4457. }
  4458. else
  4459. {
  4460. lotstr = LotNo + "-" + (Convert.ToInt32(dt.Rows[0]["LotNO"].ToString().Split('-')[dt.Rows[0]["LotNO"].ToString().Split('-').Length - 1]) + 1).ToString();
  4461. }
  4462. NewBarCodeList.Add(lotstr);//将分批后新条码添加到新集合
  4463. #endregion
  4464. #region 将分批后的条码记录插入条码表,库存表及日志表并将原条码库存数量清零
  4465. sql = @"INSERT INTO ICSInventoryLot(ID,LotNo,InvCode,ProductDate,ExpirationDate,
  4466. Quantity,Amount,ExtensionID,Type,PrintTimes,
  4467. LastPrintUser,LastPrintTime,MUSER,MUSERName,MTIME,
  4468. WorkPoint,EATTRIBUTE1,EATTRIBUTE2,EATTRIBUTE3,EATTRIBUTE4,EATTRIBUTE5,EATTRIBUTE6,EATTRIBUTE7,EATTRIBUTE8,
  4469. EATTRIBUTE9,EATTRIBUTE10,EATTRIBUTE11,EATTRIBUTE12,EATTRIBUTE13,EATTRIBUTE14,EATTRIBUTE15,EATTRIBUTE16,EATTRIBUTE17,EATTRIBUTE18,EATTRIBUTE19,EATTRIBUTE20,
  4470. EATTRIBUTE21,EATTRIBUTE22,EATTRIBUTE23,EATTRIBUTE24,EATTRIBUTE25,EATTRIBUTE26,EATTRIBUTE27,EATTRIBUTE28,EATTRIBUTE29,EATTRIBUTE30)
  4471. SELECT TOP 1 NEWID(),'{0}',a.InvCode,a.ProductDate,a.ExpirationDate,
  4472. '{2}',a.Amount/a.Quantity*Quantity,a.ExtensionID,a.Type,a.PrintTimes,
  4473. a.LastPrintUser,a.LastPrintTime,a.MUSER ,a.MUSERName ,GETDATE(),
  4474. a.WorkPoint ,'{1}',a.EATTRIBUTE2,a.EATTRIBUTE3,a.EATTRIBUTE4,a.EATTRIBUTE5,a.EATTRIBUTE6,a.EATTRIBUTE7,a.EATTRIBUTE8,
  4475. a.EATTRIBUTE9,a.EATTRIBUTE10,a.EATTRIBUTE11,a.EATTRIBUTE12,a.EATTRIBUTE13,a.EATTRIBUTE14,a.EATTRIBUTE15,a.EATTRIBUTE16,a.EATTRIBUTE17,a.EATTRIBUTE18,a.EATTRIBUTE19,a.EATTRIBUTE20,
  4476. a.EATTRIBUTE21,a.EATTRIBUTE22,a.EATTRIBUTE23,a.EATTRIBUTE24,a.EATTRIBUTE25,a.EATTRIBUTE26,a.EATTRIBUTE27,a.EATTRIBUTE28,a.EATTRIBUTE29,a.EATTRIBUTE30
  4477. From ICSInventoryLot a
  4478. where a.LotNo='{1}' and a.WorkPoint='{3}'";
  4479. sql = string.Format(sql, lotstr, LotNo, RoundedQuantity, WorkPoint);
  4480. cmd.CommandText = sql;
  4481. result = cmd.ExecuteNonQuery();
  4482. if (result <= 0)
  4483. {
  4484. throw new Exception(language.GetNameByCode("WMSAPIInfo195"));//条码分批后条码表存入失败!
  4485. }
  4486. sql = @"INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  4487. select NEWID(),'{0}',WarehouseCode,LocationCode,InvCode,'0',InDate,LockQuantity
  4488. ,MUSER,MUSERName,GETDATE(),'{3}',''
  4489. from ICSWareHouseLotInfo
  4490. where LotNO='{1}' AND WorkPoint='{3}'";
  4491. sql = string.Format(sql, lotstr, LotNo, RoundedQuantity, WorkPoint);
  4492. cmd.CommandText = sql;
  4493. result = cmd.ExecuteNonQuery();
  4494. if (result <= 0)
  4495. {
  4496. throw new Exception(language.GetNameByCode("WMSAPIInfo196"));//条码分批后库存表存入失败!
  4497. }
  4498. //插入条码单据表
  4499. sql = @"INSERT INTO ICSInventoryLotDetail(LotNo,TransID,TransCode,TransSequence,MUSER,MUSERName,MTIME,WorkPoint)
  4500. SELECT '{3}','{4}',b.TransCode,b.TransSequence,f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint
  4501. FROM ICSInventoryLot a
  4502. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  4503. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  4504. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  4505. sql = string.Format(sql, LotNo, WorkPoint, User, lotstr, TransID);
  4506. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4507. {
  4508. throw new Exception(language.GetNameByCode("WMSAPIInfo174"));//"条码单据表写入失败!");
  4509. }
  4510. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransID,TransCode,TransSequence,LotNo,InvCode,
  4511. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  4512. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  4513. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  4514. MTIME,WorkPoint,EATTRIBUTE1,LogID)
  4515. SELECT NEWID(),'{3}','{11}','{4}','{5}','{10}' ,a.InvCode ,
  4516. c.WarehouseCode,c.LocationCode,'','','{6}',
  4517. '','0','{7}','{8}','0','',
  4518. '','','',f.F_Account ,f.F_RealName ,
  4519. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  4520. FROM ICSInventoryLot a
  4521. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  4522. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  4523. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  4524. ";
  4525. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID, lotstr, TransID);
  4526. cmd.CommandText = sql;
  4527. result = cmd.ExecuteNonQuery();
  4528. if (result <= 0)
  4529. {
  4530. throw new Exception(language.GetNameByCode("WMSAPIInfo197"));//条码分批后库存日志表存入失败!
  4531. }
  4532. ///添加日志
  4533. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  4534. BEGIN
  4535. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  4536. RETURN
  4537. END
  4538. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransID,TransCode,TransSequence,LotNo,InvCode,
  4539. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  4540. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  4541. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  4542. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  4543. SELECT NEWID(),'{3}','{10}','{4}','{5}',a.LotNo ,a.InvCode ,
  4544. c.WarehouseCode,c.LocationCode,'','',c.Quantity,
  4545. '','0','{7}','32','0','',
  4546. '','','',f.F_Account ,f.F_RealName ,
  4547. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  4548. FROM ICSInventoryLot a
  4549. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  4550. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  4551. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  4552. ";
  4553. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID, TransID);
  4554. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4555. {
  4556. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  4557. }
  4558. if (PrintEnable.Equals("True") && DisPrintEnable.Equals("True"))
  4559. {
  4560. string PrintData = DBHelper.ReadPrintStream();
  4561. sql = @"" + PrintData + "";
  4562. //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
  4563. // from ICSWareHouseLotInfolog A
  4564. // left join ICSInventoryLot B on A.LotNO=B.LotNO and a.WorkPoint=b.WorkPoint
  4565. // left join ICSWareHouseLotInfo C ON A.LotNO=C.LotNO and a.WorkPoint=c.WorkPoint
  4566. // left join ICSInventory D on b.INVCODE=d.INVCODE and b.WorkPoint=d.WorkPoint
  4567. // where A.lotno ='{0}' and a.workpoint='{1}' and a.BusinessCode='{2}'
  4568. // ";
  4569. sql = string.Format(sql, LotNo, WorkPoint, BusinessCode, Identification);
  4570. dtLotno = DBHelper.SQlReturnData(sql, cmd);
  4571. lstDt = dtLotno;
  4572. }
  4573. #endregion
  4574. }
  4575. else
  4576. {
  4577. NewBarCodeList.Add(LotNo);
  4578. ///添加日志
  4579. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  4580. BEGIN
  4581. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  4582. RETURN
  4583. END
  4584. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransID,TransCode,TransSequence,LotNo,InvCode,
  4585. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  4586. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  4587. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  4588. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  4589. SELECT NEWID(),'{3}','{10}','{4}','{5}',a.LotNo ,a.InvCode ,
  4590. c.WarehouseCode,c.LocationCode,'','','{6}',
  4591. '','0','{7}','{8}','0','',
  4592. '','','',f.F_Account ,f.F_RealName ,
  4593. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  4594. FROM ICSInventoryLot a
  4595. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  4596. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  4597. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  4598. ";
  4599. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID, TransID);
  4600. log.Debug("出库日志" + sql);
  4601. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4602. {
  4603. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  4604. }
  4605. ZLtable = ICSControlModeService.GetZL();
  4606. if (ZLtable == null)
  4607. {
  4608. throw new Exception(language.GetNameByCode("WMSAPIInfo471"));
  4609. }
  4610. for (int i = 0; i < ZLtable.Rows.Count; i++)
  4611. {
  4612. string zlTransCode = ZLtable.Rows[i]["BusinessCode"].ToString();
  4613. string Enable = ZLtable.Rows[i]["Enable"].ToString();
  4614. if (zlTransCode.Equals(BusinessCode))
  4615. {
  4616. isDis = true;
  4617. if (Enable.Equals("True"))
  4618. {
  4619. ///更新日志
  4620. sql = @"
  4621. 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}')
  4622. BEGIN
  4623. RAISERROR('" + language.GetNameByCode("WMSAPIInfo472") + @"',16,1);
  4624. RETURN
  4625. END
  4626. UPDATE ICSWareHouseLotInfoLog SET EATTRIBUTE2='1' WHERE LotNo='{0}' AND WorkPoint='{1}' and transtype='15' and TransCode='{3}' and TransSequence='{4}'
  4627. ";
  4628. sql = string.Format(sql, LotNo, WorkPoint, LogID, TransCode, TransSequence);
  4629. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4630. {
  4631. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"占料标识更新失败!");
  4632. }
  4633. ///更新库存
  4634. sql = @"DECLARE @ReservedQuantity VARCHAR(10);
  4635. SELECT @ReservedQuantity = CAST(b.Quantity AS VARCHAR(10))
  4636. FROM ICSReserve b
  4637. INNER JOIN ICSWareHouseLotInfo a
  4638. ON a.invcode = b.invcode
  4639. AND a.workpoint = b.workpoint
  4640. AND a.warehousecode = b.whcode
  4641. WHERE '{4}' < b.Quantity
  4642. AND b.invcode = '{3}'
  4643. AND GETDATE() > b.BeginTime
  4644. AND GETDATE() < b.EndTime;
  4645. IF EXISTS(SELECT * FROM ICSWareHouseLotInfo a
  4646. INNER JOIN ICSReserve b ON a.invcode=b.invcode
  4647. AND a.workpoint=b.workpoint
  4648. AND a.warehousecode=b.whcode
  4649. WHERE a.invcode='{3}'
  4650. AND a.workpoint='{1}'
  4651. AND SYSDATETIME() > b.BeginTime
  4652. AND SYSDATETIME() < b.EndTime
  4653. AND b.enable='1')
  4654. BEGIN
  4655. IF @ReservedQuantity IS NOT NULL
  4656. BEGIN
  4657. RAISERROR('''{3}'',''{4}'''' + @ReservedQuantity + ''!', 16, 1);
  4658. RETURN
  4659. END
  4660. END
  4661. UPDATE ICSWareHouseLotInfo
  4662. SET Quantity = ISNULL(Quantity, 0) - '{2}',
  4663. LockQuantity = ISNULL(LockQuantity, 0) - '{2}'
  4664. WHERE LotNo = '{0}'
  4665. AND WorkPoint = '{1}';
  4666. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a
  4667. WHERE a.LotNo = '{0}'
  4668. AND a.WorkPoint = '{1}'
  4669. AND Quantity - LockQuantity < 0)
  4670. BEGIN
  4671. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"', 16, 1);
  4672. RETURN
  4673. END
  4674. ";
  4675. sql = string.Format(sql, LotNo, WorkPoint, RoundedQuantity, INVCODE, SUMQTY);
  4676. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4677. {
  4678. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  4679. }
  4680. }
  4681. else
  4682. {
  4683. if (InvOQc.Equals("True"))
  4684. {
  4685. sql = @"select a.id from ICSWareHouseLotInfo a
  4686. inner JOIN ICSInspectDetail b ON a.WorkPoint=b.WorkPoint and a.LotNo=b.LotNo
  4687. where a.LotNo='{0}' and a.WorkPoint='{1}' ";//and a.Inspect = '0'
  4688. sql = string.Format(sql, LotNo, WorkPoint);
  4689. DataTable Inspectdtt = DBHelper.SQlReturnData(sql, cmd);
  4690. if (Inspectdtt.Rows.Count > 0 && Inspectdtt != null)
  4691. {
  4692. sql = @"select a.id from ICSWareHouseLotInfo a
  4693. inner JOIN ICSInspectDetail b ON a.WorkPoint=b.WorkPoint and a.LotNo=b.LotNo
  4694. where a.LotNo='{0}' and a.WorkPoint='{1}' and a.Inspect = '0'";
  4695. sql = string.Format(sql, LotNo, WorkPoint);
  4696. DataTable InspectNewdtt = DBHelper.SQlReturnData(sql, cmd);
  4697. if (InspectNewdtt.Rows.Count == 0 || InspectNewdtt == null)
  4698. {
  4699. throw new Exception("条码在库检验,未检验完成,请确认!");
  4700. }
  4701. }
  4702. }
  4703. ///更新库存
  4704. sql = @"DECLARE @ReservedQuantity VARCHAR(10);
  4705. SELECT @ReservedQuantity = CAST(b.Quantity AS VARCHAR(10))
  4706. FROM ICSReserve b
  4707. INNER JOIN ICSWareHouseLotInfo a
  4708. ON a.invcode = b.invcode
  4709. AND a.workpoint = b.workpoint
  4710. AND a.warehousecode = b.whcode
  4711. WHERE '{4}' < b.Quantity
  4712. AND b.invcode = '{3}'
  4713. AND GETDATE() > b.BeginTime
  4714. AND GETDATE() < b.EndTime;
  4715. IF EXISTS(SELECT * FROM ICSWareHouseLotInfo a
  4716. INNER JOIN ICSReserve b ON a.invcode=b.invcode
  4717. AND a.workpoint=b.workpoint
  4718. AND a.warehousecode=b.whcode
  4719. WHERE a.invcode='{3}'
  4720. AND a.workpoint='{1}'
  4721. AND SYSDATETIME() > b.BeginTime
  4722. AND SYSDATETIME() < b.EndTime
  4723. AND b.enable='1')
  4724. BEGIN
  4725. IF @ReservedQuantity IS NOT NULL
  4726. BEGIN
  4727. RAISERROR('''{3}'',''{4}'''' + @ReservedQuantity + ''!', 16, 1);
  4728. RETURN
  4729. END
  4730. END
  4731. UPDATE ICSWareHouseLotInfo
  4732. SET Quantity = ISNULL(Quantity, 0) - '{2}'
  4733. WHERE LotNo = '{0}'
  4734. AND WorkPoint = '{1}';
  4735. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a
  4736. WHERE a.LotNo = '{0}'
  4737. AND a.WorkPoint = '{1}'
  4738. AND Quantity - LockQuantity < 0)
  4739. BEGIN
  4740. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"', 16, 1);
  4741. RETURN
  4742. END
  4743. ";
  4744. sql = string.Format(sql, LotNo, WorkPoint, RoundedQuantity, INVCODE, SUMQTY);
  4745. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4746. {
  4747. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  4748. }
  4749. }
  4750. }
  4751. // else { throw new Exception("单据类型未配置!"); }
  4752. }
  4753. //if (isDis == false)
  4754. //{
  4755. // throw new Exception("单据类型未配置!");
  4756. //}
  4757. /////更新库存
  4758. //sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  4759. // IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity<0)
  4760. // BEGIN
  4761. // RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  4762. // RETURN
  4763. // END";
  4764. //sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  4765. //if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4766. //{
  4767. // throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  4768. //}
  4769. }
  4770. }
  4771. else
  4772. {
  4773. if (LotEnable.Equals("True") && LotQTYYY - LotQTY > 0)
  4774. {
  4775. ZLtable = ICSControlModeService.GetZL();
  4776. if (ZLtable == null)
  4777. {
  4778. throw new Exception(language.GetNameByCode("WMSAPIInfo471"));
  4779. }
  4780. for (int i = 0; i < ZLtable.Rows.Count; i++)
  4781. {
  4782. string zlName = ZLtable.Rows[i]["Name"].ToString();
  4783. string zlTransCode = ZLtable.Rows[i]["BusinessCode"].ToString();
  4784. string Enable = ZLtable.Rows[i]["Enable"].ToString();
  4785. if (zlTransCode.Equals(BusinessCode))
  4786. {
  4787. if (Enable.Equals("True"))
  4788. {
  4789. ///更新日志
  4790. sql = @"
  4791. 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}')
  4792. BEGIN
  4793. RAISERROR('" + language.GetNameByCode("WMSAPIInfo472") + @"',16,1);
  4794. RETURN
  4795. END
  4796. UPDATE ICSWareHouseLotInfoLog SET EATTRIBUTE2='1' WHERE LotNo='{0}' AND WorkPoint='{1}' and transtype='15' and TransCode='{3}' and TransSequence='{4}'
  4797. ";
  4798. sql = string.Format(sql, LotNo, WorkPoint, LogID, TransCode, TransSequence);
  4799. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4800. {
  4801. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"占料标识更新失败!");
  4802. }
  4803. ///更新库存
  4804. sql = @"DECLARE @ReservedQuantity VARCHAR(10);
  4805. SELECT @ReservedQuantity = CAST(b.Quantity AS VARCHAR(10))
  4806. FROM ICSReserve b
  4807. INNER JOIN ICSWareHouseLotInfo a
  4808. ON a.invcode = b.invcode
  4809. AND a.workpoint = b.workpoint
  4810. AND a.warehousecode = b.whcode
  4811. WHERE '{4}' < b.Quantity
  4812. AND b.invcode = '{3}'
  4813. AND GETDATE() > b.BeginTime
  4814. AND GETDATE() < b.EndTime;
  4815. IF EXISTS(SELECT * FROM ICSWareHouseLotInfo a
  4816. INNER JOIN ICSReserve b ON a.invcode=b.invcode
  4817. AND a.workpoint=b.workpoint
  4818. AND a.warehousecode=b.whcode
  4819. WHERE a.invcode='{3}'
  4820. AND a.workpoint='{1}'
  4821. AND SYSDATETIME() > b.BeginTime
  4822. AND SYSDATETIME() < b.EndTime
  4823. AND b.enable='1')
  4824. BEGIN
  4825. IF @ReservedQuantity IS NOT NULL
  4826. BEGIN
  4827. RAISERROR('''{3}'',''{4}'''' + @ReservedQuantity + ''!', 16, 1);
  4828. RETURN
  4829. END
  4830. END
  4831. UPDATE ICSWareHouseLotInfo
  4832. SET Quantity = ISNULL(Quantity, 0) - '{2}',
  4833. LockQuantity = ISNULL(LockQuantity, 0) - '{2}'
  4834. WHERE LotNo = '{0}'
  4835. AND WorkPoint = '{1}';
  4836. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a
  4837. WHERE a.LotNo = '{0}'
  4838. AND a.WorkPoint = '{1}'
  4839. AND Quantity - LockQuantity < 0)
  4840. BEGIN
  4841. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"', 16, 1);
  4842. RETURN
  4843. END
  4844. ";
  4845. sql = string.Format(sql, LotNo, WorkPoint, RoundedQuantity, INVCODE, SUMQTY, TransCode, TransSequence);
  4846. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4847. {
  4848. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  4849. }
  4850. }
  4851. else
  4852. {
  4853. if (InvOQc.Equals("True"))
  4854. {
  4855. sql = @"select a.id from ICSWareHouseLotInfo a
  4856. inner JOIN ICSInspectDetail b ON a.WorkPoint=b.WorkPoint and a.LotNo=b.LotNo
  4857. where a.LotNo='{0}' and a.WorkPoint='{1}' ";//and a.Inspect = '0'
  4858. sql = string.Format(sql, LotNo, WorkPoint);
  4859. DataTable Inspectdtt = DBHelper.SQlReturnData(sql, cmd);
  4860. if (Inspectdtt.Rows.Count > 0 && Inspectdtt != null)
  4861. {
  4862. sql = @"select a.id from ICSWareHouseLotInfo a
  4863. inner JOIN ICSInspectDetail b ON a.WorkPoint=b.WorkPoint and a.LotNo=b.LotNo
  4864. where a.LotNo='{0}' and a.WorkPoint='{1}' and a.Inspect = '0'";
  4865. sql = string.Format(sql, LotNo, WorkPoint);
  4866. DataTable InspectNewdtt = DBHelper.SQlReturnData(sql, cmd);
  4867. if (InspectNewdtt.Rows.Count == 0 || InspectNewdtt == null)
  4868. {
  4869. throw new Exception("条码在库检验,未检验完成,请确认!");
  4870. }
  4871. }
  4872. }
  4873. ///更新库存
  4874. sql = @"DECLARE @ReservedQuantity VARCHAR(10);
  4875. SELECT @ReservedQuantity = CAST(b.Quantity AS VARCHAR(10))
  4876. FROM ICSReserve b
  4877. INNER JOIN ICSWareHouseLotInfo a
  4878. ON a.invcode = b.invcode
  4879. AND a.workpoint = b.workpoint
  4880. AND a.warehousecode = b.whcode
  4881. WHERE '{4}' < b.Quantity
  4882. AND b.invcode = '{3}'
  4883. AND GETDATE() > b.BeginTime
  4884. AND GETDATE() < b.EndTime;
  4885. IF EXISTS(SELECT * FROM ICSWareHouseLotInfo a
  4886. INNER JOIN ICSReserve b ON a.invcode=b.invcode
  4887. AND a.workpoint=b.workpoint
  4888. AND a.warehousecode=b.whcode
  4889. WHERE a.invcode='{3}'
  4890. AND a.workpoint='{1}'
  4891. AND SYSDATETIME() > b.BeginTime
  4892. AND SYSDATETIME() < b.EndTime
  4893. AND b.enable='1')
  4894. BEGIN
  4895. IF @ReservedQuantity IS NOT NULL
  4896. BEGIN
  4897. RAISERROR('''{3}'',''{4}'''' + @ReservedQuantity + ''!', 16, 1);
  4898. RETURN
  4899. END
  4900. END
  4901. UPDATE ICSWareHouseLotInfo
  4902. SET Quantity = ISNULL(Quantity, 0) - '{2}'
  4903. WHERE LotNo = '{0}'
  4904. AND WorkPoint = '{1}';
  4905. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a
  4906. WHERE a.LotNo = '{0}'
  4907. AND a.WorkPoint = '{1}'
  4908. AND Quantity - LockQuantity < 0)
  4909. BEGIN
  4910. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"', 16, 1);
  4911. RETURN
  4912. END
  4913. ";
  4914. sql = string.Format(sql, LotNo, WorkPoint, RoundedQuantity, INVCODE, SUMQTY);
  4915. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4916. {
  4917. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  4918. }
  4919. }
  4920. }
  4921. }
  4922. ///分批前添加日志
  4923. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  4924. BEGIN
  4925. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  4926. RETURN
  4927. END
  4928. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransID,TransCode,TransSequence,LotNo,InvCode,
  4929. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  4930. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  4931. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  4932. MTIME,WorkPoint,EATTRIBUTE1)
  4933. SELECT NEWID(),'{3}','{9}','{7}','{8}',a.LotNo ,a.InvCode ,
  4934. c.WarehouseCode,c.LocationCode,'','',c.Quantity+{6},
  4935. '','0','{4}','31','0','',
  4936. '','','',f.F_Account ,f.F_RealName ,
  4937. SYSDATETIME() ,a.WorkPoint ,''
  4938. FROM ICSInventoryLot a
  4939. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  4940. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  4941. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  4942. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  4943. ";
  4944. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransType, BusinessCode, Quantity, TransCode, TransSequence, TransID);
  4945. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4946. {
  4947. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  4948. }
  4949. #region 获取分批后的条码(lotstr)
  4950. sql = @"SELECT TOP 1 LotNO FROM ICSInventoryLot WHERE EATTRIBUTE1='{0}' AND WorkPoint='{1}'
  4951. ORDER BY CAST(SUBSTRING(LotNO, (LEN(LotNO)-CHARINDEX('-',REVERSE(LotNO))+1)+1,CHARINDEX('-',REVERSE(LotNO))-1) AS INT) DESC";
  4952. sql = string.Format(sql, LotNo, WorkPoint);
  4953. dt = DBHelper.SQlReturnData(sql, cmd);
  4954. if (dt.Rows.Count == 0)
  4955. {
  4956. lotstr = LotNo + "-" + 1;
  4957. }
  4958. else
  4959. {
  4960. lotstr = LotNo + "-" + (Convert.ToInt32(dt.Rows[0]["LotNO"].ToString().Split('-')[dt.Rows[0]["LotNO"].ToString().Split('-').Length - 1]) + 1).ToString();
  4961. }
  4962. NewBarCodeList.Add(lotstr);//将分批后新条码添加到新集合
  4963. #endregion
  4964. #region 将分批后的条码记录插入条码表,库存表及日志表并将原条码库存数量清零
  4965. sql = @"INSERT INTO ICSInventoryLot(ID,LotNo,InvCode,ProductDate,ExpirationDate,
  4966. Quantity,Amount,ExtensionID,Type,PrintTimes,
  4967. LastPrintUser,LastPrintTime,MUSER,MUSERName,MTIME,
  4968. WorkPoint,EATTRIBUTE1,EATTRIBUTE2,EATTRIBUTE3,EATTRIBUTE4,EATTRIBUTE5,EATTRIBUTE6,EATTRIBUTE7,EATTRIBUTE8,
  4969. EATTRIBUTE9,EATTRIBUTE10,EATTRIBUTE11,EATTRIBUTE12,EATTRIBUTE13,EATTRIBUTE14,EATTRIBUTE15,EATTRIBUTE16,EATTRIBUTE17,EATTRIBUTE18,EATTRIBUTE19,EATTRIBUTE20,
  4970. EATTRIBUTE21,EATTRIBUTE22,EATTRIBUTE23,EATTRIBUTE24,EATTRIBUTE25,EATTRIBUTE26,EATTRIBUTE27,EATTRIBUTE28,EATTRIBUTE29,EATTRIBUTE30)
  4971. SELECT TOP 1 NEWID(),'{0}',a.InvCode,a.ProductDate,a.ExpirationDate,
  4972. '{2}',a.Amount/a.Quantity*Quantity,a.ExtensionID,a.Type,a.PrintTimes,
  4973. a.LastPrintUser,a.LastPrintTime,a.MUSER ,a.MUSERName ,GETDATE(),
  4974. a.WorkPoint ,'{1}',a.EATTRIBUTE2,a.EATTRIBUTE3,a.EATTRIBUTE4,a.EATTRIBUTE5,a.EATTRIBUTE6,a.EATTRIBUTE7,a.EATTRIBUTE8,
  4975. a.EATTRIBUTE9,a.EATTRIBUTE10,a.EATTRIBUTE11,a.EATTRIBUTE12,a.EATTRIBUTE13,a.EATTRIBUTE14,a.EATTRIBUTE15,a.EATTRIBUTE16,a.EATTRIBUTE17,a.EATTRIBUTE18,a.EATTRIBUTE19,a.EATTRIBUTE20,
  4976. a.EATTRIBUTE21,a.EATTRIBUTE22,a.EATTRIBUTE23,a.EATTRIBUTE24,a.EATTRIBUTE25,a.EATTRIBUTE26,a.EATTRIBUTE27,a.EATTRIBUTE28,a.EATTRIBUTE29,a.EATTRIBUTE30
  4977. From ICSInventoryLot a
  4978. where a.LotNo='{1}' and a.WorkPoint='{3}'";
  4979. sql = string.Format(sql, lotstr, LotNo, RoundedQuantity, WorkPoint);
  4980. cmd.CommandText = sql;
  4981. result = cmd.ExecuteNonQuery();
  4982. if (result <= 0)
  4983. {
  4984. throw new Exception(language.GetNameByCode("WMSAPIInfo195"));//条码分批后条码表存入失败!
  4985. }
  4986. sql = @"INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  4987. select NEWID(),'{0}',WarehouseCode,LocationCode,InvCode,'0',InDate,LockQuantity
  4988. ,MUSER,MUSERName,GETDATE(),'{3}',''
  4989. from ICSWareHouseLotInfo
  4990. where LotNO='{1}' AND WorkPoint='{3}'";
  4991. sql = string.Format(sql, lotstr, LotNo, RoundedQuantity, WorkPoint);
  4992. cmd.CommandText = sql;
  4993. result = cmd.ExecuteNonQuery();
  4994. if (result <= 0)
  4995. {
  4996. throw new Exception(language.GetNameByCode("WMSAPIInfo196"));//条码分批后库存表存入失败!
  4997. }
  4998. //插入条码单据表
  4999. sql = @"INSERT INTO ICSInventoryLotDetail(LotNo,TransID,TransCode,TransSequence,MUSER,MUSERName,MTIME,WorkPoint)
  5000. SELECT '{3}','{4}',b.TransCode,b.TransSequence,f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint
  5001. FROM ICSInventoryLot a
  5002. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  5003. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  5004. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  5005. sql = string.Format(sql, LotNo, WorkPoint, User, lotstr, TransID);
  5006. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5007. {
  5008. throw new Exception(language.GetNameByCode("WMSAPIInfo174"));//"条码单据表写入失败!");
  5009. }
  5010. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransID,TransCode,TransSequence,LotNo,InvCode,
  5011. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  5012. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  5013. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  5014. MTIME,WorkPoint,EATTRIBUTE1,LogID)
  5015. SELECT NEWID(),'{3}','{11}','{4}','{5}','{10}' ,a.InvCode ,
  5016. c.WarehouseCode,c.LocationCode,'','','{6}',
  5017. '','0','{7}','{8}','0','',
  5018. '','','',f.F_Account ,f.F_RealName ,
  5019. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  5020. FROM ICSInventoryLot a
  5021. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  5022. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  5023. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  5024. ";
  5025. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID, lotstr, TransID);
  5026. cmd.CommandText = sql;
  5027. result = cmd.ExecuteNonQuery();
  5028. if (result <= 0)
  5029. {
  5030. throw new Exception(language.GetNameByCode("WMSAPIInfo197"));//条码分批后库存日志表存入失败!
  5031. }
  5032. ///添加日志
  5033. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  5034. BEGIN
  5035. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  5036. RETURN
  5037. END
  5038. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransID,TransCode,TransSequence,LotNo,InvCode,
  5039. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  5040. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  5041. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  5042. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  5043. SELECT NEWID(),'{3}','{10}','{4}','{5}',a.LotNo ,a.InvCode ,
  5044. c.WarehouseCode,c.LocationCode,'','',c.Quantity,
  5045. '','0','{7}','32','0','',
  5046. '','','',f.F_Account ,f.F_RealName ,
  5047. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  5048. FROM ICSInventoryLot a
  5049. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  5050. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  5051. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  5052. ";
  5053. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID, TransID);
  5054. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5055. {
  5056. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  5057. }
  5058. if (PrintEnable.Equals("True") && DisPrintEnable.Equals("True"))
  5059. {
  5060. string PrintData = DBHelper.ReadPrintStream();
  5061. sql = @"" + PrintData + "";
  5062. //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
  5063. // from ICSWareHouseLotInfolog A
  5064. // left join ICSInventoryLot B on A.LotNO=B.LotNO and a.WorkPoint=b.WorkPoint
  5065. // left join ICSWareHouseLotInfo C ON A.LotNO=C.LotNO and a.WorkPoint=c.WorkPoint
  5066. // left join ICSInventory D on b.INVCODE=d.INVCODE and b.WorkPoint=d.WorkPoint
  5067. // where A.lotno ='{0}' and a.workpoint='{1}' and a.BusinessCode='{2}'
  5068. // ";
  5069. sql = string.Format(sql, LotNo, WorkPoint, BusinessCode, Identification);
  5070. dtLotno = DBHelper.SQlReturnData(sql, cmd);
  5071. lstDt = dtLotno;
  5072. }
  5073. #endregion
  5074. }
  5075. else
  5076. {
  5077. NewBarCodeList.Add(LotNo);
  5078. ///添加日志
  5079. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  5080. BEGIN
  5081. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  5082. RETURN
  5083. END
  5084. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransID,TransCode,TransSequence,LotNo,InvCode,
  5085. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  5086. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  5087. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  5088. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  5089. SELECT NEWID(),'{3}','{10}','{4}','{5}',a.LotNo ,a.InvCode ,
  5090. c.WarehouseCode,c.LocationCode,'','','{6}',
  5091. '','0','{7}','{8}','0','',
  5092. '','','',f.F_Account ,f.F_RealName ,
  5093. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  5094. FROM ICSInventoryLot a
  5095. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  5096. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  5097. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  5098. ";
  5099. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID, TransID);
  5100. log.Debug("出库日志" + sql);
  5101. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5102. {
  5103. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  5104. }
  5105. ZLtable = ICSControlModeService.GetZL();
  5106. if (ZLtable == null)
  5107. {
  5108. throw new Exception(language.GetNameByCode("WMSAPIInfo471"));
  5109. }
  5110. for (int i = 0; i < ZLtable.Rows.Count; i++)
  5111. {
  5112. string zlTransCode = ZLtable.Rows[i]["BusinessCode"].ToString();
  5113. string Enable = ZLtable.Rows[i]["Enable"].ToString();
  5114. if (zlTransCode.Equals(BusinessCode))
  5115. {
  5116. isDis = true;
  5117. if (Enable.Equals("True"))
  5118. {
  5119. ///更新日志
  5120. sql = @"
  5121. 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}')
  5122. BEGIN
  5123. RAISERROR('" + language.GetNameByCode("WMSAPIInfo472") + @"',16,1);
  5124. RETURN
  5125. END
  5126. UPDATE ICSWareHouseLotInfoLog SET EATTRIBUTE2='1' WHERE LotNo='{0}' AND WorkPoint='{1}' and transtype='15' and TransCode='{3}' and TransSequence='{4}'
  5127. ";
  5128. sql = string.Format(sql, LotNo, WorkPoint, LogID, TransCode, TransSequence);
  5129. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5130. {
  5131. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"占料标识更新失败!");
  5132. }
  5133. ///更新库存
  5134. sql = @"DECLARE @ReservedQuantity VARCHAR(10);
  5135. SELECT @ReservedQuantity = CAST(b.Quantity AS VARCHAR(10))
  5136. FROM ICSReserve b
  5137. INNER JOIN ICSWareHouseLotInfo a
  5138. ON a.invcode = b.invcode
  5139. AND a.workpoint = b.workpoint
  5140. AND a.warehousecode = b.whcode
  5141. WHERE '{4}' < b.Quantity
  5142. AND b.invcode = '{3}'
  5143. AND GETDATE() > b.BeginTime
  5144. AND GETDATE() < b.EndTime;
  5145. IF EXISTS(SELECT * FROM ICSWareHouseLotInfo a
  5146. INNER JOIN ICSReserve b ON a.invcode=b.invcode
  5147. AND a.workpoint=b.workpoint
  5148. AND a.warehousecode=b.whcode
  5149. WHERE a.invcode='{3}'
  5150. AND a.workpoint='{1}'
  5151. AND SYSDATETIME() > b.BeginTime
  5152. AND SYSDATETIME() < b.EndTime
  5153. AND b.enable='1')
  5154. BEGIN
  5155. IF @ReservedQuantity IS NOT NULL
  5156. BEGIN
  5157. RAISERROR('''{3}'',''{4}'''' + @ReservedQuantity + ''!', 16, 1);
  5158. RETURN
  5159. END
  5160. END
  5161. UPDATE ICSWareHouseLotInfo
  5162. SET Quantity = ISNULL(Quantity, 0) - '{2}',
  5163. LockQuantity = ISNULL(LockQuantity, 0) - '{2}'
  5164. WHERE LotNo = '{0}'
  5165. AND WorkPoint = '{1}';
  5166. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a
  5167. WHERE a.LotNo = '{0}'
  5168. AND a.WorkPoint = '{1}'
  5169. AND Quantity - LockQuantity < 0)
  5170. BEGIN
  5171. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"', 16, 1);
  5172. RETURN
  5173. END
  5174. ";
  5175. sql = string.Format(sql, LotNo, WorkPoint, RoundedQuantity, INVCODE, SUMQTY);
  5176. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5177. {
  5178. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  5179. }
  5180. }
  5181. else
  5182. {
  5183. if (InvOQc.Equals("True"))
  5184. {
  5185. sql = @"select a.id from ICSWareHouseLotInfo a
  5186. inner JOIN ICSInspectDetail b ON a.WorkPoint=b.WorkPoint and a.LotNo=b.LotNo
  5187. where a.LotNo='{0}' and a.WorkPoint='{1}' ";//and a.Inspect = '0'
  5188. sql = string.Format(sql, LotNo, WorkPoint);
  5189. DataTable Inspectdtt = DBHelper.SQlReturnData(sql, cmd);
  5190. if (Inspectdtt.Rows.Count > 0 && Inspectdtt != null)
  5191. {
  5192. sql = @"select a.id from ICSWareHouseLotInfo a
  5193. inner JOIN ICSInspectDetail b ON a.WorkPoint=b.WorkPoint and a.LotNo=b.LotNo
  5194. where a.LotNo='{0}' and a.WorkPoint='{1}' and a.Inspect = '0'";
  5195. sql = string.Format(sql, LotNo, WorkPoint);
  5196. DataTable InspectNewdtt = DBHelper.SQlReturnData(sql, cmd);
  5197. if (InspectNewdtt.Rows.Count == 0 || InspectNewdtt == null)
  5198. {
  5199. throw new Exception("条码在库检验,未检验完成,请确认!");
  5200. }
  5201. }
  5202. }
  5203. ///更新库存
  5204. sql = @"DECLARE @ReservedQuantity VARCHAR(10);
  5205. SELECT @ReservedQuantity = CAST(b.Quantity AS VARCHAR(10))
  5206. FROM ICSReserve b
  5207. INNER JOIN ICSWareHouseLotInfo a
  5208. ON a.invcode = b.invcode
  5209. AND a.workpoint = b.workpoint
  5210. AND a.warehousecode = b.whcode
  5211. WHERE '{4}' < b.Quantity
  5212. AND b.invcode = '{3}'
  5213. AND GETDATE() > b.BeginTime
  5214. AND GETDATE() < b.EndTime;
  5215. IF EXISTS(SELECT * FROM ICSWareHouseLotInfo a
  5216. INNER JOIN ICSReserve b ON a.invcode=b.invcode
  5217. AND a.workpoint=b.workpoint
  5218. AND a.warehousecode=b.whcode
  5219. WHERE a.invcode='{3}'
  5220. AND a.workpoint='{1}'
  5221. AND SYSDATETIME() > b.BeginTime
  5222. AND SYSDATETIME() < b.EndTime
  5223. AND b.enable='1')
  5224. BEGIN
  5225. IF @ReservedQuantity IS NOT NULL
  5226. BEGIN
  5227. RAISERROR('''{3}'',''{4}'''' + @ReservedQuantity + ''!', 16, 1);
  5228. RETURN
  5229. END
  5230. END
  5231. UPDATE ICSWareHouseLotInfo
  5232. SET Quantity = ISNULL(Quantity, 0) - '{2}'
  5233. WHERE LotNo = '{0}'
  5234. AND WorkPoint = '{1}';
  5235. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a
  5236. WHERE a.LotNo = '{0}'
  5237. AND a.WorkPoint = '{1}'
  5238. AND Quantity - LockQuantity < 0)
  5239. BEGIN
  5240. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"', 16, 1);
  5241. RETURN
  5242. END
  5243. ";
  5244. sql = string.Format(sql, LotNo, WorkPoint, RoundedQuantity, INVCODE, SUMQTY);
  5245. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5246. {
  5247. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  5248. }
  5249. }
  5250. }
  5251. // else { throw new Exception("单据类型未配置!"); }
  5252. }
  5253. //if (isDis == false)
  5254. //{
  5255. // throw new Exception("单据类型未配置!");
  5256. //}
  5257. /////更新库存
  5258. //sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  5259. // IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity<0)
  5260. // BEGIN
  5261. // RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  5262. // RETURN
  5263. // END";
  5264. //sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  5265. //if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5266. //{
  5267. // throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  5268. //}
  5269. }
  5270. }
  5271. }
  5272. catch (Exception)
  5273. {
  5274. throw;
  5275. }
  5276. return lstDt;
  5277. }
  5278. /// <summary>
  5279. /// 减少库存(奥美专用)
  5280. /// </summary>
  5281. /// <param name="Identification"></param>
  5282. /// <param name="TransCode"></param>
  5283. /// <param name="TransSequence"></param>
  5284. /// <param name="LotNo"></param>
  5285. /// <param name="Quantity"></param>
  5286. /// <param name="User"></param>
  5287. /// <param name="WorkPoint"></param>
  5288. /// <param name="TransType"></param>
  5289. /// <param name="BusinessCode"></param>
  5290. /// <param name="cmd"></param>
  5291. public static DataTable AMWareHouseLotInfoDown(string Identification, string TransCode, string TransSequence, string LotNo, string Quantity, string User,
  5292. string WorkPoint, string TransType, string BusinessCode, SqlCommand cmd, Dictionary<string, string> language, string LogID, string TransID, string MergeID = "")
  5293. {
  5294. decimal LotQTYYY = 0;
  5295. decimal LotQTY = 0;
  5296. string LotEnable = "";
  5297. string chekEnable = "";
  5298. string DisPrintEnable = "";
  5299. string PrintEnable = "";
  5300. string sql = "";
  5301. string lotstr = "";
  5302. int result = 0;
  5303. List<string> NewBarCodeList = new List<string>();
  5304. DataTable dtLotno = new DataTable();
  5305. DataTable lstDt = new DataTable();
  5306. DataTable ZLtable = new DataTable();
  5307. try
  5308. {
  5309. string amount = "";
  5310. //string sqql = @"select a.Amount FROM ICSInventoryLot a
  5311. // WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  5312. //sqql = string.Format(sqql, LotNo, WorkPoint);
  5313. //DataTable dtaa = DBHelper.SQlReturnData(sqql, cmd);
  5314. //amount = dtaa.Rows[0]["Amount"].ToString();
  5315. string chekksql = @"select c.EATTRIBUTE1 FROM ICSMOPick a
  5316. INNER JOIN ICSMO b ON a.MODetailID=b.MODetailID AND a.WorkPoint=b.WorkPoint
  5317. INNER JOIN ICSInventory c on a.InvCode=c.InvCode and a.WorkPoint=c.WorkPoint
  5318. WHERE b.MOCode='{0}' AND b.Sequence+'~'+a.Sequence='{3}' AND a.WorkPoint='{1}' and c.AmountEnable='1'";
  5319. chekksql = string.Format(chekksql, TransCode, WorkPoint, Quantity, TransSequence);
  5320. DataTable dta = DBHelper.SQlReturnData(chekksql, cmd);
  5321. if (dta.Rows.Count > 0)
  5322. {
  5323. Quantity = (decimal.Parse(Quantity) * decimal.Parse(dta.Rows[0]["EATTRIBUTE1"].ToString())).ToString();
  5324. }
  5325. //检验是否分批
  5326. sql = @"SELECT b.LotEnable,b.PrintEnable FROM ICSInventoryLot a
  5327. LEFT JOIN ICSInventory b ON a.InvCode=b.InvCode AND a.WorkPoint=b.WorkPoint
  5328. where a.LotNo='{0}' and a.WorkPoint='{1}'
  5329. ";
  5330. sql = string.Format(sql, LotNo, WorkPoint);
  5331. DataTable dt = DBHelper.SQlReturnData(sql, cmd);
  5332. if (dt.Rows.Count == 0)
  5333. {
  5334. throw new Exception(language.GetNameByCode("WMSAPIInfo369"));
  5335. }
  5336. else
  5337. {
  5338. LotEnable = dt.Rows[0]["LotEnable"].ToString();
  5339. PrintEnable = dt.Rows[0]["PrintEnable"].ToString();
  5340. }
  5341. 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
  5342. from Sys_SRM_Items a
  5343. left join Sys_SRM_ItemsDetail b on a.F_Id=b.F_ItemId
  5344. where a.F_EnCode='TransBatch' and b.F_ItemCode='{0}' )
  5345. BEGIN
  5346. RAISERROR('" + language.GetNameByCode("WMSAPIInfo470") + @"',16,1);
  5347. RETURN
  5348. END
  5349. select b.F_ItemCode as Code ,b.F_ItemName as Name,b.F_EnabledMark AS Enable ,b.F_IsDefault AS DisPrintEnable
  5350. from Sys_SRM_Items a
  5351. left join Sys_SRM_ItemsDetail b on a.F_Id=b.F_ItemId
  5352. where a.F_EnCode='TransBatch' and b.F_ItemCode='{0}'
  5353. ";
  5354. cheksql = string.Format(cheksql, BusinessCode);
  5355. DataTable chekdt = DBHelper.SQlReturnData(cheksql, cmd);
  5356. if (chekdt.Rows.Count == 0)
  5357. {
  5358. throw new Exception(language.GetNameByCode("WMSAPIInfo369"));
  5359. }
  5360. else
  5361. {
  5362. chekEnable = chekdt.Rows[0]["Enable"].ToString();
  5363. DisPrintEnable = chekdt.Rows[0]["DisPrintEnable"].ToString();
  5364. }
  5365. sql = @"select Quantity from ICSWareHouseLotInfo
  5366. where LotNO='{0}' AND WorkPoint='{1}'";
  5367. sql = string.Format(sql, LotNo, WorkPoint);
  5368. DataTable dtt = DBHelper.SQlReturnData(sql, cmd);
  5369. LotQTYYY = Convert.ToDecimal(dtt.Rows[0]["Quantity"]);
  5370. LotQTY = Convert.ToDecimal(Quantity);
  5371. if (!LotEnable.Equals("False") && !chekEnable.Equals("False") && LotQTYYY - LotQTY > 0)
  5372. {
  5373. ZLtable = ICSControlModeService.GetZL();
  5374. if (ZLtable == null)
  5375. {
  5376. throw new Exception(language.GetNameByCode("WMSAPIInfo471"));
  5377. }
  5378. for (int i = 0; i < ZLtable.Rows.Count; i++)
  5379. {
  5380. string zlName = ZLtable.Rows[i]["Name"].ToString();
  5381. string zlTransCode = ZLtable.Rows[i]["BusinessCode"].ToString();
  5382. string Enable = ZLtable.Rows[i]["Enable"].ToString();
  5383. if (zlTransCode.Equals(BusinessCode))
  5384. {
  5385. if (Enable.Equals("True"))
  5386. {
  5387. ///更新日志
  5388. sql = @"
  5389. IF NOT EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfoLog a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' and transtype='15')
  5390. BEGIN
  5391. RAISERROR('" + language.GetNameByCode("WMSAPIInfo472") + @"',16,1);
  5392. RETURN
  5393. END
  5394. UPDATE ICSWareHouseLotInfoLog SET EATTRIBUTE2='1' WHERE LotNo='{0}' AND WorkPoint='{1}' and transtype='15'
  5395. ";
  5396. sql = string.Format(sql, LotNo, WorkPoint, LogID);
  5397. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5398. {
  5399. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"占料标识更新失败!");
  5400. }
  5401. ///更新库存
  5402. sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}',LockQuantity=ISNULL(LockQuantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  5403. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity-LockQuantity<0)
  5404. BEGIN
  5405. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  5406. RETURN
  5407. END";
  5408. sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  5409. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5410. {
  5411. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  5412. }
  5413. }
  5414. else
  5415. {
  5416. ///更新库存
  5417. sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-ISNULL(LockQuantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  5418. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity-LockQuantity<0)
  5419. BEGIN
  5420. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  5421. RETURN
  5422. END";
  5423. sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  5424. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5425. {
  5426. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  5427. }
  5428. }
  5429. }
  5430. }
  5431. ///分批前添加日志
  5432. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  5433. BEGIN
  5434. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  5435. RETURN
  5436. END
  5437. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  5438. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  5439. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  5440. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  5441. MTIME,WorkPoint,EATTRIBUTE1)
  5442. SELECT NEWID(),'{3}','{7}','{8}',a.LotNo ,a.InvCode ,
  5443. c.WarehouseCode,c.LocationCode,'','',c.Quantity+{6},
  5444. '','0','{4}','31','0','',
  5445. '','','',f.F_Account ,f.F_RealName ,
  5446. SYSDATETIME() ,a.WorkPoint ,''
  5447. FROM ICSInventoryLot a
  5448. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  5449. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  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, TransType, BusinessCode, Quantity, TransCode, TransSequence);
  5454. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5455. {
  5456. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  5457. }
  5458. #region 获取分批后的条码(lotstr)
  5459. sql = @"SELECT TOP 1 LotNO FROM ICSInventoryLot WHERE EATTRIBUTE1='{0}' AND WorkPoint='{1}'
  5460. ORDER BY CAST(SUBSTRING(LotNO, (LEN(LotNO)-CHARINDEX('-',REVERSE(LotNO))+1)+1,CHARINDEX('-',REVERSE(LotNO))-1) AS INT) DESC";
  5461. sql = string.Format(sql, LotNo, WorkPoint);
  5462. dt = DBHelper.SQlReturnData(sql, cmd);
  5463. if (dt.Rows.Count == 0)
  5464. {
  5465. lotstr = LotNo + "-" + 1;
  5466. }
  5467. else
  5468. {
  5469. lotstr = LotNo + "-" + (Convert.ToInt32(dt.Rows[0]["LotNO"].ToString().Split('-')[dt.Rows[0]["LotNO"].ToString().Split('-').Length - 1]) + 1).ToString();
  5470. }
  5471. NewBarCodeList.Add(lotstr);//将分批后新条码添加到新集合
  5472. #endregion
  5473. #region 将分批后的条码记录插入条码表,库存表及日志表并将原条码库存数量清零
  5474. sql = @"INSERT INTO ICSInventoryLot(ID,LotNo,InvCode,ProductDate,ExpirationDate,
  5475. Quantity,Amount,ExtensionID,Type,PrintTimes,
  5476. LastPrintUser,LastPrintTime,MUSER,MUSERName,MTIME,
  5477. WorkPoint,EATTRIBUTE1)
  5478. SELECT TOP 1 NEWID(),'{0}',a.InvCode,a.ProductDate,a.ExpirationDate,
  5479. '{2}',a.Amount/a.Quantity*Quantity,a.ExtensionID,a.Type,a.PrintTimes,
  5480. a.LastPrintUser,a.LastPrintTime,a.MUSER ,a.MUSERName ,GETDATE(),
  5481. a.WorkPoint ,'{1}'
  5482. From ICSInventoryLot a
  5483. where a.LotNo='{1}' and a.WorkPoint='{3}'";
  5484. sql = string.Format(sql, lotstr, LotNo, Quantity, WorkPoint);
  5485. cmd.CommandText = sql;
  5486. result = cmd.ExecuteNonQuery();
  5487. if (result <= 0)
  5488. {
  5489. throw new Exception(language.GetNameByCode("WMSAPIInfo195"));//条码分批后条码表存入失败!
  5490. }
  5491. sql = @"INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  5492. select NEWID(),'{0}',WarehouseCode,LocationCode,InvCode,'0',InDate,LockQuantity
  5493. ,MUSER,MUSERName,GETDATE(),'{3}',''
  5494. from ICSWareHouseLotInfo
  5495. where LotNO='{1}' AND WorkPoint='{3}'";
  5496. sql = string.Format(sql, lotstr, LotNo, Quantity, WorkPoint);
  5497. cmd.CommandText = sql;
  5498. result = cmd.ExecuteNonQuery();
  5499. if (result <= 0)
  5500. {
  5501. throw new Exception(language.GetNameByCode("WMSAPIInfo196"));//条码分批后库存表存入失败!
  5502. }
  5503. //插入条码单据表
  5504. sql = @"INSERT INTO ICSInventoryLotDetail(LotNo,TransCode,TransSequence,MUSER,MUSERName,MTIME,WorkPoint)
  5505. SELECT '{3}',b.TransCode,b.TransSequence,f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint
  5506. FROM ICSInventoryLot a
  5507. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  5508. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  5509. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  5510. sql = string.Format(sql, LotNo, WorkPoint, User, lotstr);
  5511. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5512. {
  5513. throw new Exception(language.GetNameByCode("WMSAPIInfo174"));//"条码单据表写入失败!");
  5514. }
  5515. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  5516. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  5517. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  5518. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  5519. MTIME,WorkPoint,EATTRIBUTE1,LogID)
  5520. SELECT NEWID(),'{3}','{4}','{5}','{10}' ,a.InvCode ,
  5521. c.WarehouseCode,c.LocationCode,'','','{6}',
  5522. '','0','{7}','{8}','0','',
  5523. '','','',f.F_Account ,f.F_RealName ,
  5524. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  5525. FROM ICSInventoryLot a
  5526. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  5527. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  5528. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  5529. ";
  5530. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID, lotstr);
  5531. cmd.CommandText = sql;
  5532. result = cmd.ExecuteNonQuery();
  5533. if (result <= 0)
  5534. {
  5535. throw new Exception(language.GetNameByCode("WMSAPIInfo197"));//条码分批后库存日志表存入失败!
  5536. }
  5537. if (PrintEnable.Equals("True") && DisPrintEnable.Equals("True"))
  5538. {
  5539. 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
  5540. from ICSWareHouseLotInfolog A
  5541. left join ICSInventoryLot B on A.LotNO=B.LotNO and a.WorkPoint=b.WorkPoint
  5542. left join ICSWareHouseLotInfo C ON A.LotNO=C.LotNO and a.WorkPoint=c.WorkPoint
  5543. left join ICSInventory D on b.INVCODE=d.INVCODE and b.WorkPoint=d.WorkPoint
  5544. where A.lotno ='{0}' and a.workpoint='{1}' and a.BusinessCode='{2}'
  5545. ";
  5546. sql = string.Format(sql, lotstr, WorkPoint, BusinessCode);
  5547. dtLotno = DBHelper.SQlReturnData(sql, cmd);
  5548. lstDt = dtLotno;
  5549. }
  5550. ///添加日志
  5551. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  5552. BEGIN
  5553. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  5554. RETURN
  5555. END
  5556. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  5557. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  5558. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  5559. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  5560. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  5561. SELECT NEWID(),'{3}','{4}','{5}',a.LotNo ,a.InvCode ,
  5562. c.WarehouseCode,c.LocationCode,'','',c.Quantity,
  5563. '','0','{7}','32','0','',
  5564. '','','',f.F_Account ,f.F_RealName ,
  5565. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  5566. FROM ICSInventoryLot a
  5567. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  5568. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  5569. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  5570. ";
  5571. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID);
  5572. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5573. {
  5574. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  5575. }
  5576. #endregion
  5577. }
  5578. else
  5579. {
  5580. NewBarCodeList.Add(LotNo);
  5581. ///添加日志
  5582. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  5583. BEGIN
  5584. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  5585. RETURN
  5586. END
  5587. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  5588. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  5589. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  5590. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  5591. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  5592. SELECT NEWID(),'{3}','{4}','{5}',a.LotNo ,a.InvCode ,
  5593. c.WarehouseCode,c.LocationCode,'','','{6}',
  5594. '','0','{7}','{8}','0','',
  5595. '','','',f.F_Account ,f.F_RealName ,
  5596. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  5597. FROM ICSInventoryLot a
  5598. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  5599. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  5600. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  5601. ";
  5602. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID);
  5603. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5604. {
  5605. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  5606. }
  5607. ZLtable = ICSControlModeService.GetZL();
  5608. if (ZLtable == null)
  5609. {
  5610. throw new Exception(language.GetNameByCode("WMSAPIInfo471"));
  5611. }
  5612. for (int i = 0; i < ZLtable.Rows.Count; i++)
  5613. {
  5614. string zlTransCode = ZLtable.Rows[i]["BusinessCode"].ToString();
  5615. string Enable = ZLtable.Rows[i]["Enable"].ToString();
  5616. if (zlTransCode.Equals(BusinessCode))
  5617. {
  5618. if (Enable.Equals("True"))
  5619. {
  5620. ///更新日志
  5621. sql = @"
  5622. IF NOT EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfoLog a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' and transtype='15')
  5623. BEGIN
  5624. RAISERROR('" + language.GetNameByCode("WMSAPIInfo472") + @"',16,1);
  5625. RETURN
  5626. END
  5627. UPDATE ICSWareHouseLotInfoLog SET EATTRIBUTE2='1' WHERE LotNo='{0}' AND WorkPoint='{1}' and transtype='15'
  5628. ";
  5629. sql = string.Format(sql, LotNo, WorkPoint, LogID);
  5630. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5631. {
  5632. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"占料标识更新失败!");
  5633. }
  5634. ///更新库存
  5635. sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}',LockQuantity=ISNULL(LockQuantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  5636. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity-LockQuantity<0)
  5637. BEGIN
  5638. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  5639. RETURN
  5640. END";
  5641. sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  5642. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5643. {
  5644. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  5645. }
  5646. }
  5647. else
  5648. {
  5649. ///更新库存
  5650. sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  5651. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity-LockQuantity<0)
  5652. BEGIN
  5653. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  5654. RETURN
  5655. END";
  5656. sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  5657. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5658. {
  5659. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  5660. }
  5661. }
  5662. }
  5663. }
  5664. /////更新库存
  5665. //sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  5666. // IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity<0)
  5667. // BEGIN
  5668. // RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  5669. // RETURN
  5670. // END";
  5671. //sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  5672. //if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5673. //{
  5674. // throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  5675. //}
  5676. }
  5677. }
  5678. catch (Exception)
  5679. {
  5680. throw;
  5681. }
  5682. return lstDt;
  5683. }
  5684. /// <summary>
  5685. /// 无源头调拨
  5686. /// </summary>
  5687. /// <param name="LocationCode"></param>
  5688. /// <param name="LotNo"></param>
  5689. /// <param name="Quantity"></param>
  5690. /// <param name="User"></param>
  5691. /// <param name="WorkPoint"></param>
  5692. /// <param name="TransType"></param>
  5693. /// <param name="BusinessCode"></param>
  5694. /// <param name="cmd"></param>
  5695. public static DataTable WareHouseLotInfoNoTransfer(string Identification, string WarehouseCode, string LocationCode,
  5696. string LotNo, string Quantity, string User, string WorkPoint, string TransType, string BusinessCode, SqlCommand cmd, Dictionary<string, string> language, string MergeID, string Memo)
  5697. {
  5698. decimal LotQTYYY = 0;
  5699. decimal LotQTY = 0;
  5700. String LotEnable = "";
  5701. String PrintEnable = "";
  5702. String ToWareHouseCode = "";
  5703. String ToLocationCode = "";
  5704. string lotstr = "";
  5705. int result = 0;
  5706. DataTable dtLotno = new DataTable();
  5707. DataTable lstDt = new DataTable();
  5708. List<string> NewBarCodeList = new List<string>();
  5709. string sql = "";
  5710. try
  5711. {
  5712. //检验是否分批
  5713. sql = @"SELECT b.LotEnable,b.PrintEnable FROM ICSInventoryLot a
  5714. LEFT JOIN ICSInventory b ON a.InvCode=b.InvCode AND a.WorkPoint=b.WorkPoint
  5715. where a.LotNo='{0}' and a.WorkPoint='{1}'
  5716. ";
  5717. sql = string.Format(sql, LotNo, WorkPoint);
  5718. DataTable dt = DBHelper.SQlReturnData(sql, cmd);
  5719. if (dt.Rows.Count == 0)
  5720. {
  5721. throw new Exception(language.GetNameByCode("WMSAPIInfo369"));
  5722. }
  5723. else
  5724. {
  5725. LotEnable = dt.Rows[0]["LotEnable"].ToString();
  5726. PrintEnable = dt.Rows[0]["PrintEnable"].ToString();
  5727. }
  5728. sql = @"select Quantity from ICSWareHouseLotInfo
  5729. where LotNO='{0}' AND WorkPoint='{1}'";
  5730. sql = string.Format(sql, LotNo, WorkPoint);
  5731. DataTable dtt = DBHelper.SQlReturnData(sql, cmd);
  5732. LotQTYYY = Convert.ToDecimal(dtt.Rows[0]["Quantity"]);
  5733. LotQTY = Convert.ToDecimal(Quantity);
  5734. if (!LotEnable.Equals("False") && LotQTYYY - LotQTY > 0)
  5735. {
  5736. ///更新库存
  5737. sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  5738. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity<0)
  5739. BEGIN
  5740. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  5741. RETURN
  5742. END";
  5743. sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  5744. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5745. {
  5746. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  5747. }
  5748. ///分批前添加日志
  5749. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  5750. BEGIN
  5751. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  5752. RETURN
  5753. END
  5754. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  5755. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  5756. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  5757. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  5758. MTIME,WorkPoint,EATTRIBUTE1)
  5759. SELECT NEWID(),'{3}','','',a.LotNo ,a.InvCode ,
  5760. c.WarehouseCode,c.LocationCode,'','',c.Quantity+{6},
  5761. '','0','{4}','31','0','',
  5762. '','','',f.F_Account ,f.F_RealName ,
  5763. SYSDATETIME() ,a.WorkPoint ,''
  5764. FROM ICSInventoryLot a
  5765. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  5766. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  5767. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  5768. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  5769. ";
  5770. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransType, BusinessCode, Quantity);
  5771. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5772. {
  5773. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  5774. }
  5775. #region 获取分批后的条码(lotstr)
  5776. sql = @"SELECT TOP 1 LotNO FROM ICSInventoryLot WHERE EATTRIBUTE1='{0}' AND WorkPoint='{1}'
  5777. ORDER BY CAST(SUBSTRING(LotNO, (LEN(LotNO)-CHARINDEX('-',REVERSE(LotNO))+1)+1,CHARINDEX('-',REVERSE(LotNO))-1) AS INT) DESC";
  5778. sql = string.Format(sql, LotNo, WorkPoint);
  5779. dt = DBHelper.SQlReturnData(sql, cmd);
  5780. if (dt.Rows.Count == 0)
  5781. {
  5782. lotstr = LotNo + "-" + 1;
  5783. }
  5784. else
  5785. {
  5786. lotstr = LotNo + "-" + (Convert.ToInt32(dt.Rows[0]["LotNO"].ToString().Split('-')[dt.Rows[0]["LotNO"].ToString().Split('-').Length - 1]) + 1).ToString();
  5787. }
  5788. NewBarCodeList.Add(lotstr);//将分批后新条码添加到新集合
  5789. #endregion
  5790. #region 将分批后的条码记录插入条码表,库存表及日志表并将原条码库存数量清零
  5791. sql = @"INSERT INTO ICSInventoryLot(ID,LotNo,InvCode,ProductDate,ExpirationDate,
  5792. Quantity,Amount,ExtensionID,Type,PrintTimes,
  5793. LastPrintUser,LastPrintTime,MUSER,MUSERName,MTIME,
  5794. WorkPoint,EATTRIBUTE1,EATTRIBUTE2,EATTRIBUTE3,EATTRIBUTE4,EATTRIBUTE5,EATTRIBUTE6,EATTRIBUTE7,EATTRIBUTE8,
  5795. EATTRIBUTE9,EATTRIBUTE10,EATTRIBUTE11,EATTRIBUTE12,EATTRIBUTE13,EATTRIBUTE14,EATTRIBUTE15,EATTRIBUTE16,EATTRIBUTE17,EATTRIBUTE18,EATTRIBUTE19,EATTRIBUTE20,
  5796. EATTRIBUTE21,EATTRIBUTE22,EATTRIBUTE23,EATTRIBUTE24,EATTRIBUTE25,EATTRIBUTE26,EATTRIBUTE27,EATTRIBUTE28,EATTRIBUTE29,EATTRIBUTE30)
  5797. SELECT TOP 1 NEWID(),'{0}',a.InvCode,a.ProductDate,a.ExpirationDate,
  5798. '{2}',a.Amount,a.ExtensionID,a.Type,a.PrintTimes,
  5799. a.LastPrintUser,a.LastPrintTime,a.MUSER ,a.MUSERName ,GETDATE(),
  5800. a.WorkPoint ,'{1}',a.EATTRIBUTE2,a.EATTRIBUTE3,a.EATTRIBUTE4,a.EATTRIBUTE5,a.EATTRIBUTE6,a.EATTRIBUTE7,a.EATTRIBUTE8,
  5801. a.EATTRIBUTE9,a.EATTRIBUTE10,a.EATTRIBUTE11,a.EATTRIBUTE12,a.EATTRIBUTE13,a.EATTRIBUTE14,a.EATTRIBUTE15,a.EATTRIBUTE16,a.EATTRIBUTE17,a.EATTRIBUTE18,a.EATTRIBUTE19,a.EATTRIBUTE20,
  5802. a.EATTRIBUTE21,a.EATTRIBUTE22,a.EATTRIBUTE23,a.EATTRIBUTE24,a.EATTRIBUTE25,a.EATTRIBUTE26,a.EATTRIBUTE27,a.EATTRIBUTE28,a.EATTRIBUTE29,a.EATTRIBUTE30
  5803. From ICSInventoryLot a
  5804. where a.LotNo='{1}' and a.WorkPoint='{3}'";
  5805. sql = string.Format(sql, lotstr, LotNo, Quantity, WorkPoint);
  5806. cmd.CommandText = sql;
  5807. result = cmd.ExecuteNonQuery();
  5808. if (result <= 0)
  5809. {
  5810. throw new Exception(language.GetNameByCode("WMSAPIInfo195"));//条码分批后条码表存入失败!
  5811. }
  5812. #endregion
  5813. sql = @"INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  5814. select NEWID(),'{0}','{4}','{5}',InvCode,'{2}',InDate,LockQuantity
  5815. ,MUSER,MUSERName,GETDATE(),'{3}',''
  5816. from ICSWareHouseLotInfo
  5817. where LotNO='{1}' AND WorkPoint='{3}'";
  5818. sql = string.Format(sql, lotstr, LotNo, Quantity, WorkPoint, WarehouseCode, LocationCode);
  5819. cmd.CommandText = sql;
  5820. result = cmd.ExecuteNonQuery();
  5821. if (result <= 0)
  5822. {
  5823. throw new Exception(language.GetNameByCode("WMSAPIInfo196"));//条码分批后库存表存入失败!
  5824. }
  5825. //插入条码单据表
  5826. sql = @"INSERT INTO ICSInventoryLotDetail(LotNo,TransCode,TransSequence,MUSER,MUSERName,MTIME,WorkPoint)
  5827. SELECT '{3}',b.TransCode,b.TransSequence,f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint
  5828. FROM ICSInventoryLot a
  5829. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  5830. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  5831. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  5832. sql = string.Format(sql, LotNo, WorkPoint, User, lotstr);
  5833. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5834. {
  5835. throw new Exception(language.GetNameByCode("WMSAPIInfo174"));//"条码单据表写入失败!");
  5836. }
  5837. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  5838. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  5839. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  5840. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  5841. MTIME,WorkPoint,EATTRIBUTE1,LogID)
  5842. SELECT NEWID(),'{3}','','','{8}' ,a.InvCode ,
  5843. c.WarehouseCode,c.LocationCode,'{9}','{10}','{4}',
  5844. '{11}','0','{5}','{6}','0','',
  5845. '','','',f.F_Account ,f.F_RealName ,
  5846. SYSDATETIME() ,a.WorkPoint ,'','{7}'
  5847. FROM ICSInventoryLot a
  5848. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  5849. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  5850. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  5851. ";
  5852. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, Quantity, TransType, BusinessCode, MergeID, lotstr, WarehouseCode, LocationCode,Memo);
  5853. cmd.CommandText = sql;
  5854. result = cmd.ExecuteNonQuery();
  5855. if (result <= 0)
  5856. {
  5857. throw new Exception(language.GetNameByCode("WMSAPIInfo197"));//条码分批后库存日志表存入失败!
  5858. }
  5859. ///添加日志
  5860. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  5861. BEGIN
  5862. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  5863. RETURN
  5864. END
  5865. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  5866. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  5867. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  5868. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  5869. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  5870. SELECT NEWID(),'{3}','','',a.LotNo ,a.InvCode ,
  5871. c.WarehouseCode,c.LocationCode,'','',c.Quantity,
  5872. '','0','{5}','32','0','',
  5873. '','','',f.F_Account ,f.F_RealName ,
  5874. SYSDATETIME() ,a.WorkPoint ,'','{7}'
  5875. FROM ICSInventoryLot a
  5876. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  5877. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  5878. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  5879. ";
  5880. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, Quantity, TransType, BusinessCode, MergeID);
  5881. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5882. {
  5883. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  5884. }
  5885. if (PrintEnable.Equals("True"))
  5886. {
  5887. 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
  5888. from ICSWareHouseLotInfolog A
  5889. left join ICSInventoryLot B on A.LotNO=B.LotNO and a.WorkPoint=b.WorkPoint
  5890. left join ICSWareHouseLotInfo C ON A.LotNO=C.LotNO and a.WorkPoint=c.WorkPoint
  5891. left join ICSInventory D on b.INVCODE=d.INVCODE and b.WorkPoint=d.WorkPoint
  5892. where a.BusinessCode ='105'
  5893. and A.lotno like'{0}%' and a.workpoint='{1}'
  5894. ";
  5895. sql = string.Format(sql, LotNo, WorkPoint);
  5896. dtLotno = DBHelper.SQlReturnData(sql, cmd);
  5897. lstDt = dtLotno;
  5898. }
  5899. }
  5900. else
  5901. {
  5902. ///添加日志
  5903. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  5904. BEGIN
  5905. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  5906. RETURN
  5907. END
  5908. IF EXISTS(SELECT id FROM ICSWareHouseLotInfo WHERE WarehouseCode='{7}' AND LocationCode='{8}' AND WorkPoint='{1}' AND LotNo = '{0}')
  5909. BEGIN
  5910. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo355")) + @"',16,1);
  5911. RETURN
  5912. END
  5913. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  5914. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  5915. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  5916. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  5917. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  5918. SELECT NEWID(),'{3}','','',a.LotNo ,a.InvCode ,
  5919. c.WarehouseCode,c.LocationCode,'{7}','{8}',{4},
  5920. '{10}','0','{5}','{6}','0','',
  5921. '','','',f.F_Account ,f.F_RealName ,
  5922. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  5923. FROM ICSInventoryLot a
  5924. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  5925. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  5926. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  5927. ";
  5928. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, Quantity, TransType, BusinessCode, WarehouseCode, LocationCode, MergeID,Memo);
  5929. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5930. {
  5931. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  5932. }
  5933. ///更新库存
  5934. sql = @"UPDATE ICSWareHouseLotInfo SET WareHouseCode='{2}',LocationCode='{3}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  5935. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity<0)
  5936. BEGIN
  5937. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  5938. RETURN
  5939. END";
  5940. sql = string.Format(sql, LotNo, WorkPoint, WarehouseCode, LocationCode);
  5941. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5942. {
  5943. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  5944. }
  5945. }
  5946. }
  5947. catch (Exception)
  5948. {
  5949. log.Error(sql);
  5950. throw;
  5951. }
  5952. return lstDt;
  5953. }
  5954. /// <summary>
  5955. /// 无源头调拨
  5956. /// </summary>
  5957. /// <param name="LocationCode"></param>
  5958. /// <param name="LotNo"></param>
  5959. /// <param name="Quantity"></param>
  5960. /// <param name="User"></param>
  5961. /// <param name="WorkPoint"></param>
  5962. /// <param name="TransType"></param>
  5963. /// <param name="BusinessCode"></param>
  5964. /// <param name="cmd"></param>
  5965. public static DataTable JHWareHouseLotInfoNoTransfer(string Identification, string WarehouseCode, string LocationCode,
  5966. string LotNo, string Quantity, string User, string WorkPoint, string TransType, string BusinessCode, SqlCommand cmd, Dictionary<string, string> language, string MergeID, string Memo)
  5967. {
  5968. decimal LotQTYYY = 0;
  5969. decimal LotQTY = 0;
  5970. String LotEnable = "";
  5971. String PrintEnable = "";
  5972. String ToWareHouseCode = "";
  5973. String ToLocationCode = "";
  5974. string lotstr = "";
  5975. int result = 0;
  5976. DataTable dtLotno = new DataTable();
  5977. DataTable lstDt = new DataTable();
  5978. List<string> NewBarCodeList = new List<string>();
  5979. string sql = "";
  5980. try
  5981. {
  5982. string aa = @"update ICSWareHouseLotInfo set EATTRIBUTE10='' where lotno='{0}' and workpoint='{1}'";
  5983. aa = string.Format(aa, LotNo, WorkPoint);
  5984. if (!DBHelper.ExecuteNonQuery(aa, cmd))
  5985. {
  5986. throw new Exception("条码EATTRIBUTE10更新失败!");//"占料标识更新失败!");
  5987. }
  5988. ///添加日志
  5989. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  5990. BEGIN
  5991. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  5992. RETURN
  5993. END
  5994. IF EXISTS(SELECT id FROM ICSWareHouseLotInfo WHERE WarehouseCode='{7}' AND LocationCode='{8}' AND WorkPoint='{1}' AND LotNo = '{0}')
  5995. BEGIN
  5996. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo355")) + @"',16,1);
  5997. RETURN
  5998. END
  5999. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  6000. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  6001. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  6002. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  6003. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  6004. SELECT NEWID(),'{3}','','',a.LotNo ,a.InvCode ,
  6005. c.WarehouseCode,c.LocationCode,'{7}','{8}',{4},
  6006. '{10}','0','{5}','{6}','0','',
  6007. '','','',f.F_Account ,f.F_RealName ,
  6008. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  6009. FROM ICSInventoryLot a
  6010. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  6011. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  6012. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  6013. ";
  6014. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, Quantity, TransType, BusinessCode, WarehouseCode, LocationCode, MergeID, Memo);
  6015. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  6016. {
  6017. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  6018. }
  6019. }
  6020. catch (Exception)
  6021. {
  6022. log.Error(sql);
  6023. throw;
  6024. }
  6025. return lstDt;
  6026. }
  6027. /// <summary>
  6028. /// 修改库存
  6029. /// </summary>
  6030. /// <param name="Identification"></param>
  6031. /// <param name="TransCode"></param>
  6032. /// <param name="TransSequence"></param>
  6033. /// <param name="LotNo"></param>
  6034. /// <param name="Quantity"></param>
  6035. /// <param name="User"></param>
  6036. /// <param name="WorkPoint"></param>
  6037. /// <param name="TransType"></param>
  6038. /// <param name="cmd"></param>
  6039. public static void WareHouseLotInfoUpdate(string Identification, string TransCode, string TransSequence, string LotNo, string Quantity, string User,
  6040. string WorkPoint, string TransType,string CheckKind, SqlCommand cmd, Dictionary<string, string> language)
  6041. {
  6042. try
  6043. {
  6044. ///添加日志
  6045. string sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  6046. BEGIN
  6047. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  6048. RETURN
  6049. END
  6050. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  6051. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  6052. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  6053. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  6054. MTIME,WorkPoint,EATTRIBUTE1)
  6055. SELECT NEWID(),'{3}','{4}','{5}',a.LotNo ,a.InvCode ,
  6056. a.WarehouseCode,a.LocationCode,'','',a.Quantity,
  6057. '{8}','0','{6}','{7}','0','',
  6058. '','','',f.F_Account ,f.F_RealName ,
  6059. SYSDATETIME() ,a.WorkPoint ,''
  6060. FROM ICSWareHouseLotInfo a
  6061. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  6062. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  6063. ";
  6064. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, TransType, TransTypeEnum.LOTCheckBefore.GetDescription<DBValue>(), CheckKind);
  6065. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  6066. {
  6067. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  6068. }
  6069. ///更新库存
  6070. sql = @"UPDATE ICSWareHouseLotInfo SET Quantity='{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'";
  6071. sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  6072. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  6073. {
  6074. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  6075. }
  6076. ///添加日志
  6077. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  6078. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  6079. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  6080. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  6081. MTIME,WorkPoint,EATTRIBUTE1)
  6082. SELECT NEWID(),'{3}','{4}','{5}',a.LotNo ,a.InvCode ,
  6083. a.WarehouseCode,a.LocationCode,'','',a.Quantity,
  6084. '{8}','0','{6}','{7}','0','',
  6085. '','','',f.F_Account ,f.F_RealName ,
  6086. SYSDATETIME() ,a.WorkPoint ,''
  6087. FROM ICSWareHouseLotInfo a
  6088. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  6089. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  6090. ";
  6091. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, TransType, TransTypeEnum.LOTCheckAfter.GetDescription<DBValue>(), CheckKind);
  6092. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  6093. {
  6094. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  6095. }
  6096. }
  6097. catch (Exception)
  6098. {
  6099. throw;
  6100. }
  6101. }
  6102. /// <summary>
  6103. /// 盘点修正库存(晶华)
  6104. /// </summary>
  6105. /// <param name="Identification"></param>
  6106. /// <param name="LotNo"></param>
  6107. /// <param name="Quantity"></param>
  6108. /// <param name="TransType"></param>
  6109. /// <param name="CheckKind"></param>
  6110. /// <param name="cmd"></param>
  6111. /// <param name="language"></param>
  6112. public static void WareHouseLotInfoUpdateJinH(string Identification,string WMSCode, string LotNo, string Quantity,string DifferenceQuantity, string TransType, string CheckKind, SqlCommand cmd, Dictionary<string, string> language)
  6113. {
  6114. try
  6115. {
  6116. ///添加日志
  6117. string sql = @"
  6118. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  6119. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  6120. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  6121. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  6122. MTIME,WorkPoint,EATTRIBUTE1,EATTRIBUTE2)
  6123. SELECT NEWID(),'{1}','{2}','',a.LotNo ,a.InvCode ,
  6124. a.WarehouseCode,a.LocationCode,'','',a.Quantity,
  6125. '{5}','0','{3}','{4}','0','',
  6126. '','','','' ,'' ,
  6127. SYSDATETIME() ,a.WorkPoint ,'','{6}'
  6128. FROM ICSWareHouseLotInfo a
  6129. WHERE a.LotNo='{0}'
  6130. ";
  6131. sql = string.Format(sql, LotNo, Identification, WMSCode, TransType, TransTypeEnum.LOTCheckBefore.GetDescription<DBValue>(), CheckKind, DifferenceQuantity);
  6132. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  6133. {
  6134. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  6135. }
  6136. ///更新库存
  6137. sql = @"UPDATE ICSWareHouseLotInfo SET Quantity='{1}' WHERE LotNo='{0}'";
  6138. sql = string.Format(sql, LotNo, Quantity);
  6139. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  6140. {
  6141. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  6142. }
  6143. ///添加日志
  6144. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  6145. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  6146. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  6147. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  6148. MTIME,WorkPoint,EATTRIBUTE1,EATTRIBUTE2)
  6149. SELECT NEWID(),'{1}','{2}','',a.LotNo ,a.InvCode ,
  6150. a.WarehouseCode,a.LocationCode,'','',a.Quantity,
  6151. '{5}','0','{3}','{4}','0','',
  6152. '','','','' ,'' ,
  6153. SYSDATETIME() ,a.WorkPoint ,'','{6}'
  6154. FROM ICSWareHouseLotInfo a
  6155. WHERE a.LotNo='{0}'
  6156. ";
  6157. sql = string.Format(sql, LotNo, Identification, WMSCode, TransType, TransTypeEnum.LOTCheckAfter.GetDescription<DBValue>(), CheckKind, DifferenceQuantity);
  6158. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  6159. {
  6160. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  6161. }
  6162. }
  6163. catch (Exception)
  6164. {
  6165. throw;
  6166. }
  6167. }
  6168. /// <summary>
  6169. /// 调拨
  6170. /// </summary>
  6171. /// <param name="LocationCode"></param>
  6172. /// <param name="LotNo"></param>
  6173. /// <param name="Quantity"></param>
  6174. /// <param name="User"></param>
  6175. /// <param name="WorkPoint"></param>
  6176. /// <param name="TransType"></param>
  6177. /// <param name="BusinessCode"></param>
  6178. /// <param name="cmd"></param>
  6179. public static DataTable WareHouseLotInfoTransfer(string Identification, string TransCode, string TransSequence, string WarehouseCode, string LocationCode,
  6180. string LotNo, string Quantity, string User, string WorkPoint,string InWorkPoint, string TransType, string BusinessCode, SqlCommand cmd, Dictionary<string, string> language, string MergeID)
  6181. {
  6182. decimal LotQTYYY = 0;
  6183. decimal LotQTY = 0;
  6184. String LotEnable = "";
  6185. string InvCode = "";
  6186. String PrintEnable = "";
  6187. String chekEnable = "";
  6188. String DisPrintEnable = "";
  6189. string lotstr = "";
  6190. int result = 0;
  6191. DataTable dtLotno = new DataTable();
  6192. DataTable lstDt = new DataTable();
  6193. List<string> NewBarCodeList = new List<string>();
  6194. string Colspan = "";
  6195. string ProjectCode = "";
  6196. string BatchCode = "";
  6197. string Version = "";
  6198. string Brand = "";
  6199. string cFree1 = "";
  6200. string cFree2 = "";
  6201. string cFree3 = "";
  6202. string cFree4 = "";
  6203. string cFree5 = "";
  6204. string cFree6 = "";
  6205. string cFree7 = "";
  6206. string cFree8 = "";
  6207. string cFree9 = "";
  6208. string cFree10 = "";
  6209. string IDD = "";
  6210. try
  6211. {
  6212. //派纳不查站点
  6213. if (DBHelper.IsPNU9())
  6214. {
  6215. 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
  6216. from Sys_SRM_Items a
  6217. left join Sys_SRM_ItemsDetail b on a.F_Id=b.F_ItemId
  6218. where a.F_EnCode='TransBatch' and b.F_ItemCode='{0}' )
  6219. BEGIN
  6220. RAISERROR('" + language.GetNameByCode("WMSAPIInfo470") + @"',16,1);
  6221. RETURN
  6222. END
  6223. select b.F_ItemCode as Code ,b.F_ItemName as Name,b.F_EnabledMark AS Enable ,b.F_IsDefault AS DisPrintEnable
  6224. from Sys_SRM_Items a
  6225. left join Sys_SRM_ItemsDetail b on a.F_Id=b.F_ItemId
  6226. where a.F_EnCode='TransBatch' and b.F_ItemCode='{0}'
  6227. ";
  6228. cheksql = string.Format(cheksql, BusinessCode);
  6229. DataTable chekdt = DBHelper.SQlReturnData(cheksql, cmd);
  6230. if (chekdt.Rows.Count == 0)
  6231. {
  6232. throw new Exception(language.GetNameByCode("WMSAPIInfo369"));
  6233. }
  6234. else
  6235. {
  6236. chekEnable = chekdt.Rows[0]["Enable"].ToString();
  6237. DisPrintEnable = chekdt.Rows[0]["DisPrintEnable"].ToString();
  6238. }
  6239. //检验是否分批
  6240. string sql = @"SELECT b.LotEnable,b.PrintEnable FROM ICSInventoryLot a
  6241. LEFT JOIN ICSInventory b ON a.InvCode=b.InvCode --AND a.WorkPoint=b.WorkPoint
  6242. where a.LotNo='{0}'
  6243. ";
  6244. sql = string.Format(sql, LotNo, WorkPoint);
  6245. DataTable dt = DBHelper.SQlReturnData(sql, cmd);
  6246. if (dt.Rows.Count == 0)
  6247. {
  6248. throw new Exception(language.GetNameByCode("WMSAPIInfo369"));
  6249. }
  6250. else
  6251. {
  6252. LotEnable = dt.Rows[0]["LotEnable"].ToString();
  6253. PrintEnable = dt.Rows[0]["PrintEnable"].ToString();
  6254. }
  6255. sql = @"select Quantity from ICSWareHouseLotInfo
  6256. where LotNO='{0}' ";
  6257. sql = string.Format(sql, LotNo, WorkPoint);
  6258. DataTable dtt = DBHelper.SQlReturnData(sql, cmd);
  6259. LotQTYYY = Convert.ToDecimal(dtt.Rows[0]["Quantity"]);
  6260. LotQTY = Convert.ToDecimal(Quantity);
  6261. if (LotEnable.Equals("True") && chekEnable.Equals("True") && LotQTYYY - LotQTY > 0)//增加数量判断
  6262. {
  6263. ///更新库存
  6264. sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}' , WorkPoint='{3}' WHERE LotNo='{0}'
  6265. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND Quantity<0)
  6266. BEGIN
  6267. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  6268. RETURN
  6269. END";
  6270. sql = string.Format(sql, LotNo, WorkPoint, Quantity,InWorkPoint);
  6271. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  6272. {
  6273. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  6274. }
  6275. ///分批前添加日志
  6276. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  6277. BEGIN
  6278. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  6279. RETURN
  6280. END
  6281. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  6282. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  6283. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  6284. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  6285. MTIME,WorkPoint,EATTRIBUTE1)
  6286. SELECT NEWID(),'{3}','{7}','{8}',a.LotNo ,a.InvCode ,
  6287. c.WarehouseCode,c.LocationCode,'','',c.Quantity+{6},
  6288. '','0','{4}','31','0','',
  6289. '','','',f.F_Account ,f.F_RealName ,
  6290. SYSDATETIME() ,'{1}' ,''
  6291. FROM ICSInventoryLot a
  6292. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo --AND a.WorkPoint=b.WorkPoint
  6293. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo --AND a.WorkPoint=c.WorkPoint
  6294. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  6295. WHERE a.LotNo='{0}'
  6296. ";
  6297. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransType, BusinessCode, Quantity, TransCode, TransSequence);
  6298. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  6299. {
  6300. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  6301. }
  6302. #region 获取分批后的条码(lotstr)
  6303. sql = @"SELECT TOP 1 LotNO FROM ICSInventoryLot WHERE EATTRIBUTE1='{0}'
  6304. ORDER BY CAST(SUBSTRING(LotNO, (LEN(LotNO)-CHARINDEX('-',REVERSE(LotNO))+1)+1,CHARINDEX('-',REVERSE(LotNO))-1) AS INT) DESC";
  6305. sql = string.Format(sql, LotNo, WorkPoint);
  6306. dt = DBHelper.SQlReturnData(sql, cmd);
  6307. if (dt.Rows.Count == 0)
  6308. {
  6309. lotstr = LotNo + "-" + 1;
  6310. }
  6311. else
  6312. {
  6313. lotstr = LotNo + "-" + (Convert.ToInt32(dt.Rows[0]["LotNO"].ToString().Split('-')[dt.Rows[0]["LotNO"].ToString().Split('-').Length - 1]) + 1).ToString();
  6314. }
  6315. NewBarCodeList.Add(lotstr);//将分批后新条码添加到新集合
  6316. #endregion
  6317. #region 将分批后的条码记录插入条码表,库存表及日志表并将原条码库存数量清零
  6318. sql = @"INSERT INTO ICSInventoryLot(ID,LotNo,InvCode,ProductDate,ExpirationDate,
  6319. Quantity,Amount,ExtensionID,Type,PrintTimes,
  6320. LastPrintUser,LastPrintTime,MUSER,MUSERName,MTIME,
  6321. WorkPoint,EATTRIBUTE1)
  6322. SELECT TOP 1 NEWID(),'{0}',a.InvCode,a.ProductDate,a.ExpirationDate,
  6323. '{2}',a.Amount,a.ExtensionID,a.Type,a.PrintTimes,
  6324. a.LastPrintUser,a.LastPrintTime,a.MUSER ,a.MUSERName ,GETDATE(),
  6325. '{3}' ,'{1}'
  6326. From ICSInventoryLot a
  6327. where a.LotNo='{1}' ";
  6328. sql = string.Format(sql, lotstr, LotNo, Quantity, WorkPoint);
  6329. cmd.CommandText = sql;
  6330. result = cmd.ExecuteNonQuery();
  6331. if (result <= 0)
  6332. {
  6333. throw new Exception(language.GetNameByCode("WMSAPIInfo195"));//条码分批后条码表存入失败!
  6334. }
  6335. #endregion
  6336. sql = @"INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  6337. select NEWID(),'{0}','{4}','{5}',InvCode,'{2}',InDate,LockQuantity
  6338. ,MUSER,MUSERName,GETDATE(),'{3}',''
  6339. from ICSWareHouseLotInfo
  6340. where LotNO='{1}' ";
  6341. sql = string.Format(sql, lotstr, LotNo, Quantity, WorkPoint, WarehouseCode, LocationCode);
  6342. cmd.CommandText = sql;
  6343. result = cmd.ExecuteNonQuery();
  6344. if (result <= 0)
  6345. {
  6346. throw new Exception(language.GetNameByCode("WMSAPIInfo196"));//条码分批后库存表存入失败!
  6347. }
  6348. //插入条码单据表
  6349. sql = @"INSERT INTO ICSInventoryLotDetail(LotNo,TransCode,TransSequence,MUSER,MUSERName,MTIME,WorkPoint)
  6350. SELECT '{3}',b.TransCode,b.TransSequence,f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint
  6351. FROM ICSInventoryLot a
  6352. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo --AND a.WorkPoint=b.WorkPoint
  6353. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  6354. WHERE a.LotNo='{0}' ";
  6355. sql = string.Format(sql, LotNo, WorkPoint, User, lotstr);
  6356. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  6357. {
  6358. throw new Exception(language.GetNameByCode("WMSAPIInfo174"));//"条码单据表写入失败!");
  6359. }
  6360. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  6361. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  6362. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  6363. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  6364. MTIME,WorkPoint,EATTRIBUTE1,LogID)
  6365. SELECT NEWID(),'{3}','{4}','{5}','{10}' ,a.InvCode ,
  6366. c.WarehouseCode,c.LocationCode,'{11}','{12}','{6}',
  6367. '','0','{7}','{8}','0','',
  6368. '','','',f.F_Account ,f.F_RealName ,
  6369. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  6370. FROM ICSInventoryLot a
  6371. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo --AND a.WorkPoint=c.WorkPoint
  6372. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  6373. WHERE a.LotNo='{0}'
  6374. ";
  6375. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID, lotstr, WarehouseCode, LocationCode);
  6376. cmd.CommandText = sql;
  6377. result = cmd.ExecuteNonQuery();
  6378. if (result <= 0)
  6379. {
  6380. throw new Exception(language.GetNameByCode("WMSAPIInfo197"));//条码分批后库存日志表存入失败!
  6381. }
  6382. ///添加日志
  6383. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  6384. BEGIN
  6385. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  6386. RETURN
  6387. END
  6388. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  6389. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  6390. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  6391. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  6392. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  6393. SELECT NEWID(),'{3}','{4}','{5}',a.LotNo ,a.InvCode ,
  6394. c.WarehouseCode,c.LocationCode,'','',c.Quantity,
  6395. '','0','{7}','32','0','',
  6396. '','','',f.F_Account ,f.F_RealName ,
  6397. SYSDATETIME() ,'{1}' ,'','{9}'
  6398. FROM ICSInventoryLot a
  6399. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo --AND a.WorkPoint=c.WorkPoint
  6400. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  6401. WHERE a.LotNo='{0}'
  6402. ";
  6403. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID);
  6404. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  6405. {
  6406. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  6407. }
  6408. //if (PrintEnable.Equals("True"))
  6409. //{
  6410. // string PrintData = DBHelper.ReadFileStream();
  6411. // //sql = @""+PrintData+"";
  6412. // 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
  6413. // from ICSWareHouseLotInfolog A
  6414. // left join ICSInventoryLot B on A.LotNO=B.LotNO and a.WorkPoint=b.WorkPoint
  6415. // left join ICSWareHouseLotInfo C ON A.LotNO=C.LotNO and a.WorkPoint=c.WorkPoint
  6416. // left join ICSInventory D on b.INVCODE=d.INVCODE and b.WorkPoint=d.WorkPoint
  6417. // where A.lotno like '%{0}%' and a.Identification='{3}' and a.BusinessCode='{2}'";
  6418. // sql = string.Format(sql, LotNo, WorkPoint, BusinessCode, Identification);
  6419. // dtLotno = DBHelper.SQlReturnData(sql, cmd);
  6420. // lstDt = dtLotno;
  6421. //}
  6422. if (PrintEnable.Equals("True") && DisPrintEnable.Equals("True"))
  6423. {
  6424. string PrintData = DBHelper.ReadPrintStream();
  6425. sql = @"" + PrintData + "";
  6426. //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
  6427. // from ICSWareHouseLotInfolog A
  6428. // left join ICSInventoryLot B on A.LotNO=B.LotNO and a.WorkPoint=b.WorkPoint
  6429. // left join ICSWareHouseLotInfo C ON A.LotNO=C.LotNO and a.WorkPoint=c.WorkPoint
  6430. // left join ICSInventory D on b.INVCODE=d.INVCODE and b.WorkPoint=d.WorkPoint
  6431. // where A.lotno ='{0}' and a.workpoint='{1}' and a.BusinessCode='{2}'
  6432. // ";
  6433. sql = string.Format(sql, LotNo, WorkPoint, BusinessCode, Identification);
  6434. log.Debug("打印数据源:" + sql);
  6435. dtLotno = DBHelper.SQlReturnData(sql, cmd);
  6436. lstDt = dtLotno;
  6437. }
  6438. }
  6439. else
  6440. {
  6441. if (DBHelper.IsPNU9() && TransType == "14")
  6442. {
  6443. ///添加日志
  6444. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' )
  6445. BEGIN
  6446. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  6447. RETURN
  6448. END
  6449. IF EXISTS(SELECT id FROM ICSWareHouseLotInfo WHERE WarehouseCode='{9}' AND LocationCode='{10}' AND LotNo = '{0}')
  6450. BEGIN
  6451. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo355")) + @"',16,1);
  6452. RETURN
  6453. END
  6454. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  6455. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  6456. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  6457. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  6458. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  6459. SELECT NEWID(),'{3}','{4}','{5}',a.LotNo ,a.InvCode ,
  6460. c.WarehouseCode,c.LocationCode,'{9}','{10}',{6},
  6461. '','0','{7}','{8}','0','',
  6462. '','','',f.F_Account ,f.F_RealName ,
  6463. SYSDATETIME() ,'{1}' ,'','{11}'
  6464. FROM ICSInventoryLot a
  6465. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo --AND a.WorkPoint=c.WorkPoint
  6466. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  6467. WHERE a.LotNo='{0}'
  6468. ";
  6469. sql = string.Format(sql, LotNo, InWorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, WarehouseCode, LocationCode, MergeID);
  6470. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  6471. {
  6472. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  6473. }
  6474. }
  6475. else
  6476. {
  6477. ///添加日志
  6478. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' )
  6479. BEGIN
  6480. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  6481. RETURN
  6482. END
  6483. IF EXISTS(SELECT id FROM ICSWareHouseLotInfo WHERE WarehouseCode='{9}' AND LocationCode='{10}' AND LotNo = '{0}')
  6484. BEGIN
  6485. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo355")) + @"',16,1);
  6486. RETURN
  6487. END
  6488. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  6489. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  6490. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  6491. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  6492. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  6493. SELECT NEWID(),'{3}','{4}','{5}',a.LotNo ,a.InvCode ,
  6494. c.WarehouseCode,c.LocationCode,'{9}','{10}',{6},
  6495. '','0','{7}','{8}','0','',
  6496. '','','',f.F_Account ,f.F_RealName ,
  6497. SYSDATETIME() ,'{1}' ,'','{11}'
  6498. FROM ICSInventoryLot a
  6499. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo --AND a.WorkPoint=c.WorkPoint
  6500. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  6501. WHERE a.LotNo='{0}'
  6502. ";
  6503. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, WarehouseCode, LocationCode, MergeID);
  6504. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  6505. {
  6506. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  6507. }
  6508. }
  6509. if (DBHelper.IsPNU9() && TransType == "14")
  6510. {
  6511. ///更新库存
  6512. //sql = @"UPDATE ICSWareHouseLotInfo SET WorkPoint='{4}' WHERE LotNo='{0}'
  6513. // IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND Quantity<=0)
  6514. // BEGIN
  6515. // RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  6516. // RETURN
  6517. // END";
  6518. string upsql = @"select b.ProjectCode,b.BatchCode,b.Version,b.Brand,b.cFree1,b.cFree2,b.cFree3,
  6519. b.cFree4,b.cFree5,b.cFree6,b.cFree7,b.cFree8,b.cFree9,b.cFree10 from ICSInventoryLot a
  6520. INNER JOIN ICSExtension B on B.ID=A.ExtensionID
  6521. where a.lotno='{0}' and a.WorkPoint='{1}'";
  6522. upsql = string.Format(upsql, LotNo, WorkPoint);
  6523. DataTable Sumdtt = DBHelper.SQlReturnData(upsql, cmd);
  6524. ProjectCode = Sumdtt.Rows[0]["ProjectCode"].ToString();
  6525. BatchCode = Sumdtt.Rows[0]["BatchCode"].ToString();
  6526. Version = Sumdtt.Rows[0]["Version"].ToString();
  6527. Brand = Sumdtt.Rows[0]["Brand"].ToString();
  6528. cFree1 = Sumdtt.Rows[0]["cFree1"].ToString();
  6529. cFree2 = Sumdtt.Rows[0]["cFree2"].ToString();
  6530. cFree3 = Sumdtt.Rows[0]["cFree3"].ToString();
  6531. cFree4 = Sumdtt.Rows[0]["cFree4"].ToString();
  6532. cFree5 = Sumdtt.Rows[0]["cFree5"].ToString();
  6533. cFree6 = Sumdtt.Rows[0]["cFree6"].ToString();
  6534. cFree7 = Sumdtt.Rows[0]["cFree7"].ToString();
  6535. cFree8 = Sumdtt.Rows[0]["cFree8"].ToString();
  6536. cFree9 = Sumdtt.Rows[0]["cFree9"].ToString();
  6537. cFree10 = Sumdtt.Rows[0]["cFree10"].ToString();
  6538. //检验自由项
  6539. Colspan = ProjectCode + "~" + BatchCode + "~" + Version
  6540. + "~" + Brand + "~" + cFree1
  6541. + "~" + cFree2 + "~" + cFree3 + "~" + cFree4
  6542. + "~" + cFree5 + "~" + cFree6 + "~" + cFree7
  6543. + "~" + cFree8 + "~" + cFree9 + "~" + cFree10;
  6544. string exsql = @"select ID,Colspan from ICSExtension a
  6545. where Colspan='{0}' and WorkPoint='{1}'";
  6546. exsql = string.Format(exsql, Colspan, InWorkPoint);
  6547. DataTable dttt = DBHelper.SQlReturnData(exsql, cmd);
  6548. if (dttt.Rows.Count == 0)
  6549. {
  6550. IDD = Guid.NewGuid().ToString();
  6551. sql = @"Insert into ICSExtension(ID, Colspan, ProjectCode, BatchCode, Version, Brand, cFree1, cFree2, cFree3, cFree4, cFree5, cFree6, cFree7, cFree8, cFree9, cFree10, MTIME, MUSER, MUSERName, WorkPoint)
  6552. 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}'";
  6553. sql = string.Format(sql, Colspan, ProjectCode, BatchCode, Version, Brand, cFree1, cFree2, cFree3, cFree4, cFree5, cFree6, cFree7, cFree8, cFree9, cFree10, User, InWorkPoint, IDD);
  6554. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  6555. {
  6556. throw new Exception(language.GetNameByCode("WMSAPIInfo366"));
  6557. }
  6558. string uppsql = @"update ICSInventoryLot SET ExtensionID='{0}' where lotno='{1}'";
  6559. uppsql = string.Format(uppsql, IDD, LotNo);
  6560. if (!DBHelper.ExecuteNonQuery(uppsql, cmd))
  6561. {
  6562. throw new Exception(language.GetNameByCode("跨组织条码修改自由项id失败"));
  6563. }
  6564. }
  6565. else
  6566. {
  6567. string uppsql = @"update ICSInventoryLot SET ExtensionID='{0}' where lotno='{1}'";
  6568. uppsql = string.Format(uppsql, dttt.Rows[0]["ID"].ToString(), LotNo);
  6569. if (!DBHelper.ExecuteNonQuery(uppsql, cmd))
  6570. {
  6571. throw new Exception(language.GetNameByCode("跨组织条码修改自由项id失败"));
  6572. }
  6573. }
  6574. sql = @"IF EXISTS(SELECT id FROM ICSTransferApplication a WHERE a.TransferNO='{5}' AND isnull(EATTRIBUTE29,'')<>isnull(EATTRIBUTE30,''))
  6575. BEGIN
  6576. UPDATE ICSWareHouseLotInfo SET WorkPoint='{4}' WHERE LotNo='{0}'
  6577. UPDATE ICSInventoryLot SET WorkPoint='{4}' WHERE LotNo='{0}'
  6578. UPDATE ICSInventoryLotDetail SET WorkPoint='{4}' WHERE LotNo='{0}'
  6579. END
  6580. ELSE
  6581. BEGIN
  6582. UPDATE ICSInventoryLot SET WorkPoint='{4}' WHERE LotNo='{0}'
  6583. UPDATE ICSWareHouseLotInfo SET WareHouseCode='{2}',LocationCode='{3}' , WorkPoint='{4}' WHERE LotNo='{0}'
  6584. END
  6585. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND Quantity<=0)
  6586. BEGIN
  6587. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  6588. RETURN
  6589. END";
  6590. sql = string.Format(sql, LotNo, WorkPoint, WarehouseCode, LocationCode, InWorkPoint,TransCode);
  6591. }
  6592. else if (DBHelper.IsPNU9() && TransType == "6")
  6593. {
  6594. ///更新库存
  6595. //sql = @"UPDATE ICSWareHouseLotInfo SET WorkPoint='{4}' WHERE LotNo='{0}'
  6596. // IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND Quantity<=0)
  6597. // BEGIN
  6598. // RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  6599. // RETURN
  6600. // END";
  6601. string upsql = @"select b.ProjectCode,b.BatchCode,b.Version,b.Brand,b.cFree1,b.cFree2,b.cFree3,
  6602. b.cFree4,b.cFree5,b.cFree6,b.cFree7,b.cFree8,b.cFree9,b.cFree10 from ICSInventoryLot a
  6603. INNER JOIN ICSExtension B on B.ID=A.ExtensionID
  6604. where a.lotno='{0}' and a.WorkPoint='{1}'";
  6605. upsql = string.Format(upsql, LotNo, WorkPoint);
  6606. DataTable Sumdtt = DBHelper.SQlReturnData(upsql, cmd);
  6607. ProjectCode = Sumdtt.Rows[0]["ProjectCode"].ToString();
  6608. BatchCode = Sumdtt.Rows[0]["BatchCode"].ToString();
  6609. Version = Sumdtt.Rows[0]["Version"].ToString();
  6610. Brand = Sumdtt.Rows[0]["Brand"].ToString();
  6611. cFree1 = Sumdtt.Rows[0]["cFree1"].ToString();
  6612. cFree2 = Sumdtt.Rows[0]["cFree2"].ToString();
  6613. cFree3 = Sumdtt.Rows[0]["cFree3"].ToString();
  6614. cFree4 = Sumdtt.Rows[0]["cFree4"].ToString();
  6615. cFree5 = Sumdtt.Rows[0]["cFree5"].ToString();
  6616. cFree6 = Sumdtt.Rows[0]["cFree6"].ToString();
  6617. cFree7 = Sumdtt.Rows[0]["cFree7"].ToString();
  6618. cFree8 = Sumdtt.Rows[0]["cFree8"].ToString();
  6619. cFree9 = Sumdtt.Rows[0]["cFree9"].ToString();
  6620. cFree10 = Sumdtt.Rows[0]["cFree10"].ToString();
  6621. //检验自由项
  6622. Colspan = ProjectCode + "~" + BatchCode + "~" + Version
  6623. + "~" + Brand + "~" + cFree1
  6624. + "~" + cFree2 + "~" + cFree3 + "~" + cFree4
  6625. + "~" + cFree5 + "~" + cFree6 + "~" + cFree7
  6626. + "~" + cFree8 + "~" + cFree9 + "~" + cFree10;
  6627. string exsql = @"select ID,Colspan from ICSExtension a
  6628. where Colspan='{0}' and WorkPoint='{1}'";
  6629. exsql = string.Format(exsql, Colspan, WorkPoint);
  6630. DataTable dttt = DBHelper.SQlReturnData(exsql, cmd);
  6631. if (dttt.Rows.Count == 0)
  6632. {
  6633. IDD = Guid.NewGuid().ToString();
  6634. sql = @"Insert into ICSExtension(ID, Colspan, ProjectCode, BatchCode, Version, Brand, cFree1, cFree2, cFree3, cFree4, cFree5, cFree6, cFree7, cFree8, cFree9, cFree10, MTIME, MUSER, MUSERName, WorkPoint)
  6635. 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}'";
  6636. sql = string.Format(sql, Colspan, ProjectCode, BatchCode, Version, Brand, cFree1, cFree2, cFree3, cFree4, cFree5, cFree6, cFree7, cFree8, cFree9, cFree10, User, WorkPoint, IDD);
  6637. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  6638. {
  6639. throw new Exception(language.GetNameByCode("WMSAPIInfo366"));
  6640. }
  6641. string uppsql = @"update ICSInventoryLot SET ExtensionID='{0}' where lotno='{1}'";
  6642. uppsql = string.Format(uppsql, IDD, LotNo);
  6643. if (!DBHelper.ExecuteNonQuery(uppsql, cmd))
  6644. {
  6645. throw new Exception(language.GetNameByCode("跨组织条码修改自由项id失败"));
  6646. }
  6647. }
  6648. else
  6649. {
  6650. string uppsql = @"update ICSInventoryLot SET ExtensionID='{0}' where lotno='{1}'";
  6651. uppsql = string.Format(uppsql, dttt.Rows[0]["ID"].ToString(), LotNo);
  6652. if (!DBHelper.ExecuteNonQuery(uppsql, cmd))
  6653. {
  6654. throw new Exception(language.GetNameByCode("跨组织条码修改自由项id失败"));
  6655. }
  6656. }
  6657. sql = @"IF EXISTS(SELECT id FROM ICSTransferApplication a WHERE a.TransferNO='{5}' AND isnull(EATTRIBUTE29,'')<>isnull(EATTRIBUTE30,''))
  6658. BEGIN
  6659. UPDATE ICSWareHouseLotInfo SET WorkPoint='{4}' WHERE LotNo='{0}'
  6660. UPDATE ICSInventoryLot SET WorkPoint='{4}' WHERE LotNo='{0}'
  6661. END
  6662. ELSE
  6663. BEGIN
  6664. UPDATE ICSInventoryLot SET WorkPoint='{4}' WHERE LotNo='{0}'
  6665. UPDATE ICSWareHouseLotInfo SET WareHouseCode='{2}',LocationCode='{3}' , WorkPoint='{4}' WHERE LotNo='{0}'
  6666. END
  6667. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND Quantity<=0)
  6668. BEGIN
  6669. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  6670. RETURN
  6671. END";
  6672. sql = string.Format(sql, LotNo, WorkPoint, WarehouseCode, LocationCode, WorkPoint, TransCode);
  6673. }
  6674. else
  6675. {
  6676. ///更新库存
  6677. sql = @"UPDATE ICSWareHouseLotInfo SET WareHouseCode='{2}',LocationCode='{3}' , WorkPoint='{1}' WHERE LotNo='{0}'
  6678. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND Quantity<=0)
  6679. BEGIN
  6680. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  6681. RETURN
  6682. END";
  6683. sql = string.Format(sql, LotNo, WorkPoint, WarehouseCode, LocationCode, WorkPoint);
  6684. }
  6685. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  6686. {
  6687. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  6688. }
  6689. }
  6690. DateTime now = DateTime.Now;
  6691. sql = @"select 1 from ICSContainerLot
  6692. where LotNo='{0}'
  6693. ";
  6694. sql = string.Format(sql, LotNo, WorkPoint);
  6695. log.Debug("查询容器条码关联表是否存在");
  6696. DataTable dttte = DBHelper.SQlReturnData(sql, cmd);
  6697. if (dttte.Rows.Count > 0)
  6698. {
  6699. ///删除条码关联表数据
  6700. sql = @"DELETE FROM ICSContainerLot
  6701. where LotNo='{0}'
  6702. ";
  6703. sql = string.Format(sql, LotNo, WorkPoint);
  6704. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  6705. {
  6706. throw new Exception(language.GetNameByCode("容器条码关联表数据删除失败"));
  6707. }
  6708. }
  6709. }
  6710. else
  6711. {
  6712. string aa = @"update ICSWareHouseLotInfo set EATTRIBUTE10='' where lotno='{0}' and workpoint='{1}'";
  6713. aa = string.Format(aa, LotNo, WorkPoint);
  6714. if (!DBHelper.ExecuteNonQuery(aa, cmd))
  6715. {
  6716. throw new Exception("条码EATTRIBUTE10更新失败!");//"占料标识更新失败!");
  6717. }
  6718. 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
  6719. from Sys_SRM_Items a
  6720. left join Sys_SRM_ItemsDetail b on a.F_Id=b.F_ItemId
  6721. where a.F_EnCode='TransBatch' and b.F_ItemCode='{0}' )
  6722. BEGIN
  6723. RAISERROR('" + language.GetNameByCode("WMSAPIInfo470") + @"',16,1);
  6724. RETURN
  6725. END
  6726. select b.F_ItemCode as Code ,b.F_ItemName as Name,b.F_EnabledMark AS Enable ,b.F_IsDefault AS DisPrintEnable
  6727. from Sys_SRM_Items a
  6728. left join Sys_SRM_ItemsDetail b on a.F_Id=b.F_ItemId
  6729. where a.F_EnCode='TransBatch' and b.F_ItemCode='{0}'
  6730. ";
  6731. cheksql = string.Format(cheksql, BusinessCode);
  6732. DataTable chekdt = DBHelper.SQlReturnData(cheksql, cmd);
  6733. if (chekdt.Rows.Count == 0)
  6734. {
  6735. throw new Exception(language.GetNameByCode("WMSAPIInfo369"));
  6736. }
  6737. else
  6738. {
  6739. chekEnable = chekdt.Rows[0]["Enable"].ToString();
  6740. DisPrintEnable = chekdt.Rows[0]["DisPrintEnable"].ToString();
  6741. }
  6742. //检验是否分批
  6743. string sql = @"SELECT b.LotEnable,b.PrintEnable,b.InvCode FROM ICSInventoryLot a
  6744. LEFT JOIN ICSInventory b ON a.InvCode=b.InvCode AND a.WorkPoint=b.WorkPoint
  6745. where a.LotNo='{0}' and a.WorkPoint='{1}'
  6746. ";
  6747. sql = string.Format(sql, LotNo, WorkPoint);
  6748. DataTable dt = DBHelper.SQlReturnData(sql, cmd);
  6749. if (dt.Rows.Count == 0)
  6750. {
  6751. throw new Exception(language.GetNameByCode("WMSAPIInfo369"));
  6752. }
  6753. else
  6754. {
  6755. LotEnable = dt.Rows[0]["LotEnable"].ToString();
  6756. PrintEnable = dt.Rows[0]["PrintEnable"].ToString();
  6757. InvCode= dt.Rows[0]["InvCode"].ToString();
  6758. }
  6759. sql = @"select Quantity from ICSWareHouseLotInfo
  6760. where LotNO='{0}' AND WorkPoint='{1}'";
  6761. sql = string.Format(sql, LotNo, WorkPoint);
  6762. DataTable dtt = DBHelper.SQlReturnData(sql, cmd);
  6763. LotQTYYY = Convert.ToDecimal(dtt.Rows[0]["Quantity"]);
  6764. LotQTY = Convert.ToDecimal(Quantity);
  6765. if (LotEnable.Equals("True") && chekEnable.Equals("True") && LotQTYYY - LotQTY > 0)//增加数量判断
  6766. {
  6767. ///更新库存
  6768. sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  6769. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND Quantity<0)
  6770. BEGIN
  6771. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  6772. RETURN
  6773. END";
  6774. sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  6775. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  6776. {
  6777. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  6778. }
  6779. ///分批前添加日志
  6780. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  6781. BEGIN
  6782. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  6783. RETURN
  6784. END
  6785. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  6786. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  6787. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  6788. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  6789. MTIME,WorkPoint,EATTRIBUTE1)
  6790. SELECT NEWID(),'{3}','{7}','{8}',a.LotNo ,a.InvCode ,
  6791. c.WarehouseCode,c.LocationCode,'','',c.Quantity+{6},
  6792. '','0','{4}','31','0','',
  6793. '','','',f.F_Account ,f.F_RealName ,
  6794. SYSDATETIME() ,a.WorkPoint ,''
  6795. FROM ICSInventoryLot a
  6796. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  6797. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  6798. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  6799. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  6800. ";
  6801. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransType, BusinessCode, Quantity, TransCode, TransSequence);
  6802. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  6803. {
  6804. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  6805. }
  6806. #region 获取分批后的条码(lotstr)
  6807. sql = @"SELECT TOP 1 LotNO FROM ICSInventoryLot WHERE EATTRIBUTE1='{0}' AND WorkPoint='{1}'
  6808. ORDER BY CAST(SUBSTRING(LotNO, (LEN(LotNO)-CHARINDEX('-',REVERSE(LotNO))+1)+1,CHARINDEX('-',REVERSE(LotNO))-1) AS INT) DESC";
  6809. sql = string.Format(sql, LotNo, WorkPoint);
  6810. dt = DBHelper.SQlReturnData(sql, cmd);
  6811. if (dt.Rows.Count == 0)
  6812. {
  6813. lotstr = LotNo + "-" + 1;
  6814. }
  6815. else
  6816. {
  6817. lotstr = LotNo + "-" + (Convert.ToInt32(dt.Rows[0]["LotNO"].ToString().Split('-')[dt.Rows[0]["LotNO"].ToString().Split('-').Length - 1]) + 1).ToString();
  6818. }
  6819. NewBarCodeList.Add(lotstr);//将分批后新条码添加到新集合
  6820. #endregion
  6821. #region 将分批后的条码记录插入条码表,库存表及日志表并将原条码库存数量清零
  6822. sql = @"INSERT INTO ICSInventoryLot(ID,LotNo,InvCode,ProductDate,ExpirationDate,
  6823. Quantity,Amount,ExtensionID,Type,PrintTimes,
  6824. LastPrintUser,LastPrintTime,MUSER,MUSERName,MTIME,
  6825. WorkPoint,EATTRIBUTE1,EATTRIBUTE2,EATTRIBUTE3,EATTRIBUTE4,EATTRIBUTE5,EATTRIBUTE6,EATTRIBUTE7,EATTRIBUTE8,
  6826. EATTRIBUTE9,EATTRIBUTE10,EATTRIBUTE11,EATTRIBUTE12,EATTRIBUTE13,EATTRIBUTE14,EATTRIBUTE15,EATTRIBUTE16,EATTRIBUTE17,EATTRIBUTE18,EATTRIBUTE19,EATTRIBUTE20,
  6827. EATTRIBUTE21,EATTRIBUTE22,EATTRIBUTE23,EATTRIBUTE24,EATTRIBUTE25,EATTRIBUTE26,EATTRIBUTE27,EATTRIBUTE28,EATTRIBUTE29,EATTRIBUTE30)
  6828. SELECT TOP 1 NEWID(),'{0}',a.InvCode,a.ProductDate,a.ExpirationDate,
  6829. '{2}',a.Amount,a.ExtensionID,a.Type,a.PrintTimes,
  6830. a.LastPrintUser,a.LastPrintTime,a.MUSER ,a.MUSERName ,GETDATE(),
  6831. a.WorkPoint ,'{1}',a.EATTRIBUTE2,a.EATTRIBUTE3,a.EATTRIBUTE4,a.EATTRIBUTE5,a.EATTRIBUTE6,a.EATTRIBUTE7,a.EATTRIBUTE8,
  6832. a.EATTRIBUTE9,a.EATTRIBUTE10,a.EATTRIBUTE11,a.EATTRIBUTE12,a.EATTRIBUTE13,a.EATTRIBUTE14,a.EATTRIBUTE15,a.EATTRIBUTE16,a.EATTRIBUTE17,a.EATTRIBUTE18,a.EATTRIBUTE19,a.EATTRIBUTE20,
  6833. a.EATTRIBUTE21,a.EATTRIBUTE22,a.EATTRIBUTE23,a.EATTRIBUTE24,a.EATTRIBUTE25,a.EATTRIBUTE26,a.EATTRIBUTE27,a.EATTRIBUTE28,a.EATTRIBUTE29,a.EATTRIBUTE30
  6834. From ICSInventoryLot a
  6835. where a.LotNo='{1}' and a.WorkPoint='{3}'";
  6836. sql = string.Format(sql, lotstr, LotNo, Quantity, WorkPoint);
  6837. cmd.CommandText = sql;
  6838. result = cmd.ExecuteNonQuery();
  6839. if (result <= 0)
  6840. {
  6841. throw new Exception(language.GetNameByCode("WMSAPIInfo195"));//条码分批后条码表存入失败!
  6842. }
  6843. #endregion
  6844. sql = @"INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  6845. select NEWID(),'{0}','{4}','{5}',InvCode,'{2}',InDate,LockQuantity
  6846. ,MUSER,MUSERName,GETDATE(),'{3}',''
  6847. from ICSWareHouseLotInfo
  6848. where LotNO='{1}' AND WorkPoint='{3}'";
  6849. sql = string.Format(sql, lotstr, LotNo, Quantity, WorkPoint, WarehouseCode, LocationCode);
  6850. cmd.CommandText = sql;
  6851. result = cmd.ExecuteNonQuery();
  6852. if (result <= 0)
  6853. {
  6854. throw new Exception(language.GetNameByCode("WMSAPIInfo196"));//条码分批后库存表存入失败!
  6855. }
  6856. //插入条码单据表
  6857. sql = @"INSERT INTO ICSInventoryLotDetail(LotNo,TransCode,TransSequence,MUSER,MUSERName,MTIME,WorkPoint)
  6858. SELECT '{3}',b.TransCode,b.TransSequence,f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint
  6859. FROM ICSInventoryLot a
  6860. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  6861. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  6862. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  6863. sql = string.Format(sql, LotNo, WorkPoint, User, lotstr);
  6864. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  6865. {
  6866. throw new Exception(language.GetNameByCode("WMSAPIInfo174"));//"条码单据表写入失败!");
  6867. }
  6868. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  6869. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  6870. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  6871. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  6872. MTIME,WorkPoint,EATTRIBUTE1,LogID)
  6873. SELECT NEWID(),'{3}','{4}','{5}','{10}' ,a.InvCode ,
  6874. c.WarehouseCode,c.LocationCode,'{11}','{12}','{6}',
  6875. '','0','{7}','{8}','0','',
  6876. '','','',f.F_Account ,f.F_RealName ,
  6877. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  6878. FROM ICSInventoryLot a
  6879. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  6880. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  6881. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  6882. ";
  6883. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID, lotstr, WarehouseCode, LocationCode);
  6884. cmd.CommandText = sql;
  6885. result = cmd.ExecuteNonQuery();
  6886. if (result <= 0)
  6887. {
  6888. throw new Exception(language.GetNameByCode("WMSAPIInfo197"));//条码分批后库存日志表存入失败!
  6889. }
  6890. ///添加日志
  6891. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  6892. BEGIN
  6893. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  6894. RETURN
  6895. END
  6896. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  6897. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  6898. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  6899. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  6900. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  6901. SELECT NEWID(),'{3}','{4}','{5}',a.LotNo ,a.InvCode ,
  6902. c.WarehouseCode,c.LocationCode,'','',c.Quantity,
  6903. '','0','{7}','32','0','',
  6904. '','','',f.F_Account ,f.F_RealName ,
  6905. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  6906. FROM ICSInventoryLot a
  6907. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  6908. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  6909. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  6910. ";
  6911. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID);
  6912. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  6913. {
  6914. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  6915. }
  6916. //if (PrintEnable.Equals("True"))
  6917. //{
  6918. // string PrintData = DBHelper.ReadFileStream();
  6919. // //sql = @""+PrintData+"";
  6920. // 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
  6921. // from ICSWareHouseLotInfolog A
  6922. // left join ICSInventoryLot B on A.LotNO=B.LotNO and a.WorkPoint=b.WorkPoint
  6923. // left join ICSWareHouseLotInfo C ON A.LotNO=C.LotNO and a.WorkPoint=c.WorkPoint
  6924. // left join ICSInventory D on b.INVCODE=d.INVCODE and b.WorkPoint=d.WorkPoint
  6925. // where A.lotno like '%{0}%' and a.Identification='{3}' and a.workpoint='{1}' and a.BusinessCode='{2}'";
  6926. // sql = string.Format(sql, LotNo, WorkPoint, BusinessCode, Identification);
  6927. // dtLotno = DBHelper.SQlReturnData(sql, cmd);
  6928. // lstDt = dtLotno;
  6929. //}
  6930. if (PrintEnable.Equals("True") && DisPrintEnable.Equals("True"))
  6931. {
  6932. string PrintData = DBHelper.ReadPrintStream();
  6933. sql = @"" + PrintData + "";
  6934. //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
  6935. // from ICSWareHouseLotInfolog A
  6936. // left join ICSInventoryLot B on A.LotNO=B.LotNO and a.WorkPoint=b.WorkPoint
  6937. // left join ICSWareHouseLotInfo C ON A.LotNO=C.LotNO and a.WorkPoint=c.WorkPoint
  6938. // left join ICSInventory D on b.INVCODE=d.INVCODE and b.WorkPoint=d.WorkPoint
  6939. // where A.lotno ='{0}' and a.workpoint='{1}' and a.BusinessCode='{2}'
  6940. // ";
  6941. sql = string.Format(sql, LotNo, WorkPoint, BusinessCode, Identification);
  6942. log.Debug("打印数据源:" + sql);
  6943. dtLotno = DBHelper.SQlReturnData(sql, cmd);
  6944. lstDt = dtLotno;
  6945. }
  6946. }
  6947. else if ((!LotEnable.Equals("True") || !chekEnable.Equals("True")) && LotQTYYY - LotQTY > 0)
  6948. {
  6949. string errMsg = LotNo;
  6950. if (!LotEnable.Equals("True") && !chekEnable.Equals("True"))
  6951. {
  6952. errMsg += " 对应的物料未开启自动分批,且单据分批管控未打开";
  6953. }
  6954. else if(!LotEnable.Equals("True"))
  6955. {
  6956. errMsg += " 对应的物料未开启自动分批";
  6957. }
  6958. else
  6959. {
  6960. errMsg = "单据分批管控未打开";
  6961. }
  6962. throw new Exception(errMsg);
  6963. }
  6964. else
  6965. {
  6966. ///添加日志
  6967. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  6968. BEGIN
  6969. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  6970. RETURN
  6971. END
  6972. IF EXISTS(SELECT id FROM ICSWareHouseLotInfo WHERE WarehouseCode='{9}' AND LocationCode='{10}' AND WorkPoint='{1}' AND LotNo = '{0}')
  6973. BEGIN
  6974. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo355")) + @"',16,1);
  6975. RETURN
  6976. END
  6977. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  6978. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  6979. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  6980. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  6981. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  6982. SELECT NEWID(),'{3}','{4}','{5}',a.LotNo ,a.InvCode ,
  6983. c.WarehouseCode,c.LocationCode,'{9}','{10}',{6},
  6984. '','0','{7}','{8}','0','',
  6985. '','','',f.F_Account ,f.F_RealName ,
  6986. SYSDATETIME() ,a.WorkPoint ,'','{11}'
  6987. FROM ICSInventoryLot a
  6988. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  6989. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  6990. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  6991. ";
  6992. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, WarehouseCode, LocationCode, MergeID);
  6993. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  6994. {
  6995. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  6996. }
  6997. // 晶华逻辑
  6998. string checksql = @"SELECT id FROM ICSInventoryLot where LotNo='{0}' AND WorkPoint='{1}' AND InvCode in(
  6999. SELECT DISTINCT
  7000. b.F_Define1
  7001. FROM Sys_SRM_Items a
  7002. LEFT JOIN Sys_SRM_ItemsDetail b ON a.F_Id = b.F_ItemId
  7003. WHERE a.F_EnCode = 'InventoryLotWareHouseFixed')";
  7004. checksql = string.Format(checksql, LotNo, WorkPoint);
  7005. DataTable chekdtt = DBHelper.SQlReturnData(checksql, cmd);
  7006. if (chekdtt.Rows.Count > 0 && chekdtt != null)
  7007. {
  7008. string scsql = @"select id from ICSWareHouseLotInfo WHERE LotNo='{0}' AND WorkPoint='{1}' and Quantity>='{2}'";
  7009. scsql = string.Format(scsql, LotNo, WorkPoint,Quantity);
  7010. DataTable cchekdtt = DBHelper.SQlReturnData(scsql, cmd);
  7011. if (cchekdtt.Rows.Count > 0 && cchekdtt != null)
  7012. {
  7013. //更新原条码库存
  7014. sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=Quantity-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  7015. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity<0)
  7016. BEGIN
  7017. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  7018. RETURN
  7019. END";
  7020. sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  7021. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  7022. {
  7023. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  7024. }
  7025. }
  7026. string checkssql = @"SELECT a.LotNo
  7027. FROM ICSInventoryLot a
  7028. WHERE a.LotNo = (
  7029. SELECT a.LotNo
  7030. FROM ICSWareHouseLotInfo a
  7031. INNER JOIN ICSInventoryLot b ON a.LotNo = b.LotNo AND a.WorkPoint = b.WorkPoint
  7032. INNER JOIN ICSExtension c ON b.ExtensionID = c.ID AND b.WorkPoint = c.WorkPoint
  7033. WHERE a.lotno = '{0}{1}' + (SELECT c.projectcode FROM ICSInventoryLot b
  7034. INNER JOIN ICSExtension c ON b.ExtensionID = c.ID AND b.WorkPoint = c.WorkPoint WHERE b.lotno='{3}' AND b.WorkPoint = '{2}') + '{2}'
  7035. )
  7036. AND a.WorkPoint = '{2}' ";
  7037. checkssql = string.Format(checkssql, InvCode, WarehouseCode, WorkPoint, LotNo);
  7038. DataTable chekdtt1 = DBHelper.SQlReturnData(checkssql, cmd);
  7039. //int aa = chekdtt1.Rows.Count;
  7040. if (chekdtt1 == null||chekdtt1.Rows.Count ==0)
  7041. {
  7042. //新条码入库 物料+仓库作为LotNO
  7043. #region 将分批后的条码记录插入条码表,库存表及日志表并将原条码库存数量清零
  7044. sql = @"
  7045. INSERT INTO ICSInventoryLot(ID,LotNo,InvCode,ProductDate,ExpirationDate,
  7046. Quantity,Amount,ExtensionID,Type,PrintTimes,
  7047. LastPrintUser,LastPrintTime,MUSER,MUSERName,MTIME,
  7048. WorkPoint,EATTRIBUTE1,EATTRIBUTE2,EATTRIBUTE3,EATTRIBUTE4,EATTRIBUTE5,EATTRIBUTE6,EATTRIBUTE7,EATTRIBUTE8,
  7049. EATTRIBUTE9,EATTRIBUTE10,EATTRIBUTE11,EATTRIBUTE12,EATTRIBUTE13,EATTRIBUTE14,EATTRIBUTE15,EATTRIBUTE16,EATTRIBUTE17,EATTRIBUTE18,EATTRIBUTE19,EATTRIBUTE20,
  7050. EATTRIBUTE21,EATTRIBUTE22,EATTRIBUTE23,EATTRIBUTE24,EATTRIBUTE25,EATTRIBUTE26,EATTRIBUTE27,EATTRIBUTE28,EATTRIBUTE29,EATTRIBUTE30)
  7051. SELECT TOP 1 NEWID(),a.InvCode+'{3}'+isnull(b.ProjectCode,'')+'{2}',a.InvCode,a.ProductDate,a.ExpirationDate,
  7052. '{1}',a.Amount,a.ExtensionID,a.Type,a.PrintTimes,
  7053. a.LastPrintUser,a.LastPrintTime,a.MUSER ,a.MUSERName ,GETDATE(),
  7054. a.WorkPoint ,'{0}',a.EATTRIBUTE2,a.EATTRIBUTE3,a.EATTRIBUTE4,a.EATTRIBUTE5,a.EATTRIBUTE6,a.EATTRIBUTE7,a.EATTRIBUTE8,
  7055. a.EATTRIBUTE9,a.EATTRIBUTE10,a.EATTRIBUTE11,a.EATTRIBUTE12,a.EATTRIBUTE13,a.EATTRIBUTE14,a.EATTRIBUTE15,a.EATTRIBUTE16,a.EATTRIBUTE17,a.EATTRIBUTE18,a.EATTRIBUTE19,a.EATTRIBUTE20,
  7056. a.EATTRIBUTE21,a.EATTRIBUTE22,a.EATTRIBUTE23,a.EATTRIBUTE24,a.EATTRIBUTE25,a.EATTRIBUTE26,a.EATTRIBUTE27,a.EATTRIBUTE28,a.EATTRIBUTE29,a.EATTRIBUTE30
  7057. From ICSInventoryLot a
  7058. inner join ICSExtension b on a.ExtensionID=b.id and a.WorkPoint=b.WorkPoint
  7059. where a.LotNo='{0}' and a.WorkPoint='{2}'
  7060. ";
  7061. sql = string.Format(sql, LotNo, Quantity, WorkPoint, WarehouseCode, LocationCode);
  7062. cmd.CommandText = sql;
  7063. result = cmd.ExecuteNonQuery();
  7064. if (result <= 0)
  7065. {
  7066. throw new Exception("新条码条码写入失败!");//条码分批后条码表存入失败!
  7067. }
  7068. #endregion
  7069. sql = @"INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  7070. select NEWID(),a.InvCode+'{3}'+isnull(b.ProjectCode,'')+'{2}','{3}','{4}',a.InvCode,'{1}',a.InDate,a.LockQuantity
  7071. ,a.MUSER,a.MUSERName,GETDATE(),'{2}',''
  7072. from ICSWareHouseLotInfo a
  7073. inner join ICSInventoryLot aa on a.lotno=aa.lotno and a.WorkPoint=aa.WorkPoint
  7074. inner join ICSExtension b on aa.ExtensionID=b.id and aa.WorkPoint=b.WorkPoint
  7075. where a.LotNO='{0}' AND a.WorkPoint='{2}'";
  7076. sql = string.Format(sql, LotNo, Quantity, WorkPoint, WarehouseCode, LocationCode);
  7077. cmd.CommandText = sql;
  7078. result = cmd.ExecuteNonQuery();
  7079. if (result <= 0)
  7080. {
  7081. throw new Exception("新条码库存写入失败!");//条码分批后条码表存入失败!
  7082. }
  7083. //插入条码单据表
  7084. sql = @"INSERT INTO ICSInventoryLotDetail(LotNo,TransCode,TransSequence,MUSER,MUSERName,MTIME,WorkPoint)
  7085. SELECT a.InvCode+'{3}'+isnull(bb.ProjectCode,'')+'{1}',b.TransCode,b.TransSequence,f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint
  7086. FROM ICSInventoryLot a
  7087. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  7088. inner join ICSExtension bb on a.ExtensionID=bb.id and a.WorkPoint=bb.WorkPoint
  7089. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  7090. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  7091. sql = string.Format(sql, LotNo, WorkPoint, User, WarehouseCode, LocationCode);
  7092. cmd.CommandText = sql;
  7093. result = cmd.ExecuteNonQuery();
  7094. if (result <= 0)
  7095. {
  7096. throw new Exception("新条码单据关联写入失败!");//条码分批后条码表存入失败!
  7097. }
  7098. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  7099. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  7100. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  7101. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  7102. MTIME,WorkPoint,EATTRIBUTE1,LogID)
  7103. SELECT NEWID(),'{3}','{4}','{5}',a.InvCode+'{10}'+isnull(b.ProjectCode,'')+'{1}' ,a.InvCode ,
  7104. '','','{10}','{11}','{6}',
  7105. '','0','{7}','{8}','0','',
  7106. '','','',f.F_Account ,f.F_RealName ,
  7107. SYSDATETIME() ,a.WorkPoint ,'',''
  7108. FROM ICSInventoryLot a
  7109. inner join ICSExtension b on a.ExtensionID=b.id and a.WorkPoint=b.WorkPoint
  7110. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  7111. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  7112. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  7113. ";
  7114. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode + "-1", MergeID, WarehouseCode, LocationCode);
  7115. cmd.CommandText = sql;
  7116. result = cmd.ExecuteNonQuery();
  7117. if (result <= 0)
  7118. {
  7119. throw new Exception("新条码日志写入失败!");//条码分批后条码表存入失败!
  7120. }
  7121. }
  7122. else
  7123. {
  7124. //更新条码库存
  7125. sql = @"UPDATE a SET a.Quantity=a.Quantity+'{2}'
  7126. FROM ICSWareHouseLotInfo a
  7127. WHERE a.LotNo = (
  7128. SELECT a.LotNo
  7129. FROM ICSWareHouseLotInfo a
  7130. INNER JOIN ICSInventoryLot b ON a.LotNo = b.LotNo AND a.WorkPoint = b.WorkPoint
  7131. INNER JOIN ICSExtension c ON b.ExtensionID = c.ID AND b.WorkPoint = c.WorkPoint
  7132. WHERE a.lotno = '{0}{3}' + (SELECT c.projectcode FROM ICSInventoryLot b
  7133. INNER JOIN ICSExtension c ON b.ExtensionID = c.ID AND b.WorkPoint = c.WorkPoint WHERE b.lotno='{4}' AND b.WorkPoint = '{1}') + '{1}'
  7134. )
  7135. AND a.WorkPoint = '{1}'";
  7136. sql = string.Format(sql, InvCode, WorkPoint, Quantity,WarehouseCode,LotNo);
  7137. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  7138. {
  7139. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  7140. }
  7141. }
  7142. }
  7143. else
  7144. {
  7145. ///更新库存
  7146. sql = @"UPDATE ICSWareHouseLotInfo SET WareHouseCode='{2}',LocationCode='{3}',WorkPoint='{1}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  7147. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity<=0)
  7148. BEGIN
  7149. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  7150. RETURN
  7151. END";
  7152. sql = string.Format(sql, LotNo, WorkPoint, WarehouseCode, LocationCode);
  7153. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  7154. {
  7155. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  7156. }
  7157. }
  7158. }
  7159. DateTime now = DateTime.Now;
  7160. sql = @"select 1 from ICSContainerLot
  7161. where LotNo='{0}' and WorkPoint='{1}'
  7162. ";
  7163. sql = string.Format(sql, LotNo, WorkPoint);
  7164. log.Debug("查询容器条码关联表是否存在");
  7165. DataTable dttte = DBHelper.SQlReturnData(sql, cmd);
  7166. if (dttte.Rows.Count > 0)
  7167. {
  7168. ///删除条码关联表数据
  7169. sql = @"DELETE FROM ICSContainerLot
  7170. where LotNo='{0}' and WorkPoint='{1}'
  7171. ";
  7172. sql = string.Format(sql, LotNo, WorkPoint);
  7173. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  7174. {
  7175. throw new Exception(language.GetNameByCode("容器条码关联表数据删除失败"));
  7176. }
  7177. }
  7178. }
  7179. }
  7180. catch (Exception)
  7181. {
  7182. throw;
  7183. }
  7184. return lstDt;
  7185. }
  7186. /// <summary>
  7187. /// 晶华调拨
  7188. /// </summary>
  7189. /// <param name="LocationCode"></param>
  7190. /// <param name="LotNo"></param>
  7191. /// <param name="Quantity"></param>
  7192. /// <param name="User"></param>
  7193. /// <param name="WorkPoint"></param>
  7194. /// <param name="TransType"></param>
  7195. /// <param name="BusinessCode"></param>
  7196. /// <param name="cmd"></param>
  7197. public static DataTable JHWareHouseLotInfoTransfer(string Identification, string TransCode, string TransSequence, string WarehouseCode, string LocationCode,
  7198. string LotNo, string Quantity, string User, string WorkPoint, string InWorkPoint, string TransType, string BusinessCode, SqlCommand cmd, Dictionary<string, string> language, string MergeID)
  7199. {
  7200. decimal LotQTYYY = 0;
  7201. decimal LotQTY = 0;
  7202. String LotEnable = "";
  7203. String PrintEnable = "";
  7204. String chekEnable = "";
  7205. String DisPrintEnable = "";
  7206. string lotstr = "";
  7207. int result = 0;
  7208. DataTable dtLotno = new DataTable();
  7209. DataTable lstDt = new DataTable();
  7210. List<string> NewBarCodeList = new List<string>();
  7211. string Colspan = "";
  7212. string ProjectCode = "";
  7213. string BatchCode = "";
  7214. string Version = "";
  7215. string Brand = "";
  7216. string cFree1 = "";
  7217. string cFree2 = "";
  7218. string cFree3 = "";
  7219. string cFree4 = "";
  7220. string cFree5 = "";
  7221. string cFree6 = "";
  7222. string cFree7 = "";
  7223. string cFree8 = "";
  7224. string cFree9 = "";
  7225. string cFree10 = "";
  7226. string IDD = "";
  7227. try
  7228. {
  7229. //派纳不查站点
  7230. if (DBHelper.IsPNU9())
  7231. {
  7232. 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
  7233. from Sys_SRM_Items a
  7234. left join Sys_SRM_ItemsDetail b on a.F_Id=b.F_ItemId
  7235. where a.F_EnCode='TransBatch' and b.F_ItemCode='{0}' )
  7236. BEGIN
  7237. RAISERROR('" + language.GetNameByCode("WMSAPIInfo470") + @"',16,1);
  7238. RETURN
  7239. END
  7240. select b.F_ItemCode as Code ,b.F_ItemName as Name,b.F_EnabledMark AS Enable ,b.F_IsDefault AS DisPrintEnable
  7241. from Sys_SRM_Items a
  7242. left join Sys_SRM_ItemsDetail b on a.F_Id=b.F_ItemId
  7243. where a.F_EnCode='TransBatch' and b.F_ItemCode='{0}'
  7244. ";
  7245. cheksql = string.Format(cheksql, BusinessCode);
  7246. DataTable chekdt = DBHelper.SQlReturnData(cheksql, cmd);
  7247. if (chekdt.Rows.Count == 0)
  7248. {
  7249. throw new Exception(language.GetNameByCode("WMSAPIInfo369"));
  7250. }
  7251. else
  7252. {
  7253. chekEnable = chekdt.Rows[0]["Enable"].ToString();
  7254. DisPrintEnable = chekdt.Rows[0]["DisPrintEnable"].ToString();
  7255. }
  7256. //检验是否分批
  7257. string sql = @"SELECT b.LotEnable,b.PrintEnable FROM ICSInventoryLot a
  7258. LEFT JOIN ICSInventory b ON a.InvCode=b.InvCode --AND a.WorkPoint=b.WorkPoint
  7259. where a.LotNo='{0}'
  7260. ";
  7261. sql = string.Format(sql, LotNo, WorkPoint);
  7262. DataTable dt = DBHelper.SQlReturnData(sql, cmd);
  7263. if (dt.Rows.Count == 0)
  7264. {
  7265. throw new Exception(language.GetNameByCode("WMSAPIInfo369"));
  7266. }
  7267. else
  7268. {
  7269. LotEnable = dt.Rows[0]["LotEnable"].ToString();
  7270. PrintEnable = dt.Rows[0]["PrintEnable"].ToString();
  7271. }
  7272. sql = @"select Quantity from ICSWareHouseLotInfo
  7273. where LotNO='{0}' ";
  7274. sql = string.Format(sql, LotNo, WorkPoint);
  7275. DataTable dtt = DBHelper.SQlReturnData(sql, cmd);
  7276. LotQTYYY = Convert.ToDecimal(dtt.Rows[0]["Quantity"]);
  7277. LotQTY = Convert.ToDecimal(Quantity);
  7278. if (LotEnable.Equals("True") && chekEnable.Equals("True") && LotQTYYY - LotQTY > 0)//增加数量判断
  7279. {
  7280. ///更新库存
  7281. sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}' , WorkPoint='{3}' WHERE LotNo='{0}'
  7282. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND Quantity<0)
  7283. BEGIN
  7284. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  7285. RETURN
  7286. END";
  7287. sql = string.Format(sql, LotNo, WorkPoint, Quantity, InWorkPoint);
  7288. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  7289. {
  7290. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  7291. }
  7292. ///分批前添加日志
  7293. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  7294. BEGIN
  7295. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  7296. RETURN
  7297. END
  7298. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  7299. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  7300. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  7301. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  7302. MTIME,WorkPoint,EATTRIBUTE1)
  7303. SELECT NEWID(),'{3}','{7}','{8}',a.LotNo ,a.InvCode ,
  7304. c.WarehouseCode,c.LocationCode,'','',c.Quantity+{6},
  7305. '','0','{4}','31','0','',
  7306. '','','',f.F_Account ,f.F_RealName ,
  7307. SYSDATETIME() ,'{1}' ,''
  7308. FROM ICSInventoryLot a
  7309. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo --AND a.WorkPoint=b.WorkPoint
  7310. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo --AND a.WorkPoint=c.WorkPoint
  7311. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  7312. WHERE a.LotNo='{0}'
  7313. ";
  7314. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransType, BusinessCode, Quantity, TransCode, TransSequence);
  7315. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  7316. {
  7317. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  7318. }
  7319. #region 获取分批后的条码(lotstr)
  7320. sql = @"SELECT TOP 1 LotNO FROM ICSInventoryLot WHERE EATTRIBUTE1='{0}'
  7321. ORDER BY CAST(SUBSTRING(LotNO, (LEN(LotNO)-CHARINDEX('-',REVERSE(LotNO))+1)+1,CHARINDEX('-',REVERSE(LotNO))-1) AS INT) DESC";
  7322. sql = string.Format(sql, LotNo, WorkPoint);
  7323. dt = DBHelper.SQlReturnData(sql, cmd);
  7324. if (dt.Rows.Count == 0)
  7325. {
  7326. lotstr = LotNo + "-" + 1;
  7327. }
  7328. else
  7329. {
  7330. lotstr = LotNo + "-" + (Convert.ToInt32(dt.Rows[0]["LotNO"].ToString().Split('-')[dt.Rows[0]["LotNO"].ToString().Split('-').Length - 1]) + 1).ToString();
  7331. }
  7332. NewBarCodeList.Add(lotstr);//将分批后新条码添加到新集合
  7333. #endregion
  7334. #region 将分批后的条码记录插入条码表,库存表及日志表并将原条码库存数量清零
  7335. sql = @"INSERT INTO ICSInventoryLot(ID,LotNo,InvCode,ProductDate,ExpirationDate,
  7336. Quantity,Amount,ExtensionID,Type,PrintTimes,
  7337. LastPrintUser,LastPrintTime,MUSER,MUSERName,MTIME,
  7338. WorkPoint,EATTRIBUTE1)
  7339. SELECT TOP 1 NEWID(),'{0}',a.InvCode,a.ProductDate,a.ExpirationDate,
  7340. '{2}',a.Amount,a.ExtensionID,a.Type,a.PrintTimes,
  7341. a.LastPrintUser,a.LastPrintTime,a.MUSER ,a.MUSERName ,GETDATE(),
  7342. '{3}' ,'{1}'
  7343. From ICSInventoryLot a
  7344. where a.LotNo='{1}' ";
  7345. sql = string.Format(sql, lotstr, LotNo, Quantity, WorkPoint);
  7346. cmd.CommandText = sql;
  7347. result = cmd.ExecuteNonQuery();
  7348. if (result <= 0)
  7349. {
  7350. throw new Exception(language.GetNameByCode("WMSAPIInfo195"));//条码分批后条码表存入失败!
  7351. }
  7352. #endregion
  7353. sql = @"INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  7354. select NEWID(),'{0}','{4}','{5}',InvCode,'{2}',InDate,LockQuantity
  7355. ,MUSER,MUSERName,GETDATE(),'{3}',''
  7356. from ICSWareHouseLotInfo
  7357. where LotNO='{1}' ";
  7358. sql = string.Format(sql, lotstr, LotNo, Quantity, WorkPoint, WarehouseCode, LocationCode);
  7359. cmd.CommandText = sql;
  7360. result = cmd.ExecuteNonQuery();
  7361. if (result <= 0)
  7362. {
  7363. throw new Exception(language.GetNameByCode("WMSAPIInfo196"));//条码分批后库存表存入失败!
  7364. }
  7365. //插入条码单据表
  7366. sql = @"INSERT INTO ICSInventoryLotDetail(LotNo,TransCode,TransSequence,MUSER,MUSERName,MTIME,WorkPoint)
  7367. SELECT '{3}',b.TransCode,b.TransSequence,f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint
  7368. FROM ICSInventoryLot a
  7369. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo --AND a.WorkPoint=b.WorkPoint
  7370. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  7371. WHERE a.LotNo='{0}' ";
  7372. sql = string.Format(sql, LotNo, WorkPoint, User, lotstr);
  7373. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  7374. {
  7375. throw new Exception(language.GetNameByCode("WMSAPIInfo174"));//"条码单据表写入失败!");
  7376. }
  7377. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  7378. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  7379. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  7380. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  7381. MTIME,WorkPoint,EATTRIBUTE1,LogID)
  7382. SELECT NEWID(),'{3}','{4}','{5}','{10}' ,a.InvCode ,
  7383. c.WarehouseCode,c.LocationCode,'{11}','{12}','{6}',
  7384. '','0','{7}','{8}','0','',
  7385. '','','',f.F_Account ,f.F_RealName ,
  7386. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  7387. FROM ICSInventoryLot a
  7388. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo --AND a.WorkPoint=c.WorkPoint
  7389. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  7390. WHERE a.LotNo='{0}'
  7391. ";
  7392. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID, lotstr, WarehouseCode, LocationCode);
  7393. cmd.CommandText = sql;
  7394. result = cmd.ExecuteNonQuery();
  7395. if (result <= 0)
  7396. {
  7397. throw new Exception(language.GetNameByCode("WMSAPIInfo197"));//条码分批后库存日志表存入失败!
  7398. }
  7399. ///添加日志
  7400. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  7401. BEGIN
  7402. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  7403. RETURN
  7404. END
  7405. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  7406. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  7407. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  7408. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  7409. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  7410. SELECT NEWID(),'{3}','{4}','{5}',a.LotNo ,a.InvCode ,
  7411. c.WarehouseCode,c.LocationCode,'','',c.Quantity,
  7412. '','0','{7}','32','0','',
  7413. '','','',f.F_Account ,f.F_RealName ,
  7414. SYSDATETIME() ,'{1}' ,'','{9}'
  7415. FROM ICSInventoryLot a
  7416. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo --AND a.WorkPoint=c.WorkPoint
  7417. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  7418. WHERE a.LotNo='{0}'
  7419. ";
  7420. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID);
  7421. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  7422. {
  7423. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  7424. }
  7425. //if (PrintEnable.Equals("True"))
  7426. //{
  7427. // string PrintData = DBHelper.ReadFileStream();
  7428. // //sql = @""+PrintData+"";
  7429. // 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
  7430. // from ICSWareHouseLotInfolog A
  7431. // left join ICSInventoryLot B on A.LotNO=B.LotNO and a.WorkPoint=b.WorkPoint
  7432. // left join ICSWareHouseLotInfo C ON A.LotNO=C.LotNO and a.WorkPoint=c.WorkPoint
  7433. // left join ICSInventory D on b.INVCODE=d.INVCODE and b.WorkPoint=d.WorkPoint
  7434. // where A.lotno like '%{0}%' and a.Identification='{3}' and a.BusinessCode='{2}'";
  7435. // sql = string.Format(sql, LotNo, WorkPoint, BusinessCode, Identification);
  7436. // dtLotno = DBHelper.SQlReturnData(sql, cmd);
  7437. // lstDt = dtLotno;
  7438. //}
  7439. if (PrintEnable.Equals("True") && DisPrintEnable.Equals("True"))
  7440. {
  7441. string PrintData = DBHelper.ReadPrintStream();
  7442. sql = @"" + PrintData + "";
  7443. //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
  7444. // from ICSWareHouseLotInfolog A
  7445. // left join ICSInventoryLot B on A.LotNO=B.LotNO and a.WorkPoint=b.WorkPoint
  7446. // left join ICSWareHouseLotInfo C ON A.LotNO=C.LotNO and a.WorkPoint=c.WorkPoint
  7447. // left join ICSInventory D on b.INVCODE=d.INVCODE and b.WorkPoint=d.WorkPoint
  7448. // where A.lotno ='{0}' and a.workpoint='{1}' and a.BusinessCode='{2}'
  7449. // ";
  7450. sql = string.Format(sql, LotNo, WorkPoint, BusinessCode, Identification);
  7451. log.Debug("打印数据源:" + sql);
  7452. dtLotno = DBHelper.SQlReturnData(sql, cmd);
  7453. lstDt = dtLotno;
  7454. }
  7455. }
  7456. else
  7457. {
  7458. if (DBHelper.IsPNU9() && TransType == "14")
  7459. {
  7460. ///添加日志
  7461. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' )
  7462. BEGIN
  7463. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  7464. RETURN
  7465. END
  7466. IF EXISTS(SELECT id FROM ICSWareHouseLotInfo WHERE WarehouseCode='{9}' AND LocationCode='{10}' AND LotNo = '{0}')
  7467. BEGIN
  7468. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo355")) + @"',16,1);
  7469. RETURN
  7470. END
  7471. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  7472. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  7473. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  7474. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  7475. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  7476. SELECT NEWID(),'{3}','{4}','{5}',a.LotNo ,a.InvCode ,
  7477. c.WarehouseCode,c.LocationCode,'{9}','{10}',{6},
  7478. '','0','{7}','{8}','0','',
  7479. '','','',f.F_Account ,f.F_RealName ,
  7480. SYSDATETIME() ,'{1}' ,'','{11}'
  7481. FROM ICSInventoryLot a
  7482. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo --AND a.WorkPoint=c.WorkPoint
  7483. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  7484. WHERE a.LotNo='{0}'
  7485. ";
  7486. sql = string.Format(sql, LotNo, InWorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, WarehouseCode, LocationCode, MergeID);
  7487. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  7488. {
  7489. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  7490. }
  7491. }
  7492. else
  7493. {
  7494. ///添加日志
  7495. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' )
  7496. BEGIN
  7497. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  7498. RETURN
  7499. END
  7500. IF EXISTS(SELECT id FROM ICSWareHouseLotInfo WHERE WarehouseCode='{9}' AND LocationCode='{10}' AND LotNo = '{0}')
  7501. BEGIN
  7502. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo355")) + @"',16,1);
  7503. RETURN
  7504. END
  7505. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  7506. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  7507. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  7508. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  7509. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  7510. SELECT NEWID(),'{3}','{4}','{5}',a.LotNo ,a.InvCode ,
  7511. c.WarehouseCode,c.LocationCode,'{9}','{10}',{6},
  7512. '','0','{7}','{8}','0','',
  7513. '','','',f.F_Account ,f.F_RealName ,
  7514. SYSDATETIME() ,'{1}' ,'','{11}'
  7515. FROM ICSInventoryLot a
  7516. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo --AND a.WorkPoint=c.WorkPoint
  7517. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  7518. WHERE a.LotNo='{0}'
  7519. ";
  7520. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, WarehouseCode, LocationCode, MergeID);
  7521. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  7522. {
  7523. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  7524. }
  7525. }
  7526. if (DBHelper.IsPNU9() && TransType == "14")
  7527. {
  7528. ///更新库存
  7529. //sql = @"UPDATE ICSWareHouseLotInfo SET WorkPoint='{4}' WHERE LotNo='{0}'
  7530. // IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND Quantity<=0)
  7531. // BEGIN
  7532. // RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  7533. // RETURN
  7534. // END";
  7535. string upsql = @"select b.ProjectCode,b.BatchCode,b.Version,b.Brand,b.cFree1,b.cFree2,b.cFree3,
  7536. b.cFree4,b.cFree5,b.cFree6,b.cFree7,b.cFree8,b.cFree9,b.cFree10 from ICSInventoryLot a
  7537. INNER JOIN ICSExtension B on B.ID=A.ExtensionID
  7538. where a.lotno='{0}' and a.WorkPoint='{1}'";
  7539. upsql = string.Format(upsql, LotNo, WorkPoint);
  7540. DataTable Sumdtt = DBHelper.SQlReturnData(upsql, cmd);
  7541. ProjectCode = Sumdtt.Rows[0]["ProjectCode"].ToString();
  7542. BatchCode = Sumdtt.Rows[0]["BatchCode"].ToString();
  7543. Version = Sumdtt.Rows[0]["Version"].ToString();
  7544. Brand = Sumdtt.Rows[0]["Brand"].ToString();
  7545. cFree1 = Sumdtt.Rows[0]["cFree1"].ToString();
  7546. cFree2 = Sumdtt.Rows[0]["cFree2"].ToString();
  7547. cFree3 = Sumdtt.Rows[0]["cFree3"].ToString();
  7548. cFree4 = Sumdtt.Rows[0]["cFree4"].ToString();
  7549. cFree5 = Sumdtt.Rows[0]["cFree5"].ToString();
  7550. cFree6 = Sumdtt.Rows[0]["cFree6"].ToString();
  7551. cFree7 = Sumdtt.Rows[0]["cFree7"].ToString();
  7552. cFree8 = Sumdtt.Rows[0]["cFree8"].ToString();
  7553. cFree9 = Sumdtt.Rows[0]["cFree9"].ToString();
  7554. cFree10 = Sumdtt.Rows[0]["cFree10"].ToString();
  7555. //检验自由项
  7556. Colspan = ProjectCode + "~" + BatchCode + "~" + Version
  7557. + "~" + Brand + "~" + cFree1
  7558. + "~" + cFree2 + "~" + cFree3 + "~" + cFree4
  7559. + "~" + cFree5 + "~" + cFree6 + "~" + cFree7
  7560. + "~" + cFree8 + "~" + cFree9 + "~" + cFree10;
  7561. string exsql = @"select ID,Colspan from ICSExtension a
  7562. where Colspan='{0}' and WorkPoint='{1}'";
  7563. exsql = string.Format(exsql, Colspan, InWorkPoint);
  7564. DataTable dttt = DBHelper.SQlReturnData(exsql, cmd);
  7565. if (dttt.Rows.Count == 0)
  7566. {
  7567. IDD = Guid.NewGuid().ToString();
  7568. sql = @"Insert into ICSExtension(ID, Colspan, ProjectCode, BatchCode, Version, Brand, cFree1, cFree2, cFree3, cFree4, cFree5, cFree6, cFree7, cFree8, cFree9, cFree10, MTIME, MUSER, MUSERName, WorkPoint)
  7569. 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}'";
  7570. sql = string.Format(sql, Colspan, ProjectCode, BatchCode, Version, Brand, cFree1, cFree2, cFree3, cFree4, cFree5, cFree6, cFree7, cFree8, cFree9, cFree10, User, InWorkPoint, IDD);
  7571. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  7572. {
  7573. throw new Exception(language.GetNameByCode("WMSAPIInfo366"));
  7574. }
  7575. string uppsql = @"update ICSInventoryLot SET ExtensionID='{0}' where lotno='{1}'";
  7576. uppsql = string.Format(uppsql, IDD, LotNo);
  7577. if (!DBHelper.ExecuteNonQuery(uppsql, cmd))
  7578. {
  7579. throw new Exception(language.GetNameByCode("跨组织条码修改自由项id失败"));
  7580. }
  7581. }
  7582. else
  7583. {
  7584. string uppsql = @"update ICSInventoryLot SET ExtensionID='{0}' where lotno='{1}'";
  7585. uppsql = string.Format(uppsql, dttt.Rows[0]["ID"].ToString(), LotNo);
  7586. if (!DBHelper.ExecuteNonQuery(uppsql, cmd))
  7587. {
  7588. throw new Exception(language.GetNameByCode("跨组织条码修改自由项id失败"));
  7589. }
  7590. }
  7591. sql = @"IF EXISTS(SELECT id FROM ICSTransferApplication a WHERE a.TransferNO='{5}' AND isnull(EATTRIBUTE29,'')<>isnull(EATTRIBUTE30,''))
  7592. BEGIN
  7593. UPDATE ICSWareHouseLotInfo SET WorkPoint='{4}' WHERE LotNo='{0}'
  7594. UPDATE ICSInventoryLot SET WorkPoint='{4}' WHERE LotNo='{0}'
  7595. UPDATE ICSInventoryLotDetail SET WorkPoint='{4}' WHERE LotNo='{0}'
  7596. END
  7597. ELSE
  7598. BEGIN
  7599. UPDATE ICSInventoryLot SET WorkPoint='{4}' WHERE LotNo='{0}'
  7600. UPDATE ICSWareHouseLotInfo SET WareHouseCode='{2}',LocationCode='{3}' , WorkPoint='{4}' WHERE LotNo='{0}'
  7601. END
  7602. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND Quantity<=0)
  7603. BEGIN
  7604. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  7605. RETURN
  7606. END";
  7607. sql = string.Format(sql, LotNo, WorkPoint, WarehouseCode, LocationCode, InWorkPoint, TransCode);
  7608. }
  7609. else if (DBHelper.IsPNU9() && TransType == "6")
  7610. {
  7611. ///更新库存
  7612. //sql = @"UPDATE ICSWareHouseLotInfo SET WorkPoint='{4}' WHERE LotNo='{0}'
  7613. // IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND Quantity<=0)
  7614. // BEGIN
  7615. // RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  7616. // RETURN
  7617. // END";
  7618. string upsql = @"select b.ProjectCode,b.BatchCode,b.Version,b.Brand,b.cFree1,b.cFree2,b.cFree3,
  7619. b.cFree4,b.cFree5,b.cFree6,b.cFree7,b.cFree8,b.cFree9,b.cFree10 from ICSInventoryLot a
  7620. INNER JOIN ICSExtension B on B.ID=A.ExtensionID
  7621. where a.lotno='{0}' and a.WorkPoint='{1}'";
  7622. upsql = string.Format(upsql, LotNo, WorkPoint);
  7623. DataTable Sumdtt = DBHelper.SQlReturnData(upsql, cmd);
  7624. ProjectCode = Sumdtt.Rows[0]["ProjectCode"].ToString();
  7625. BatchCode = Sumdtt.Rows[0]["BatchCode"].ToString();
  7626. Version = Sumdtt.Rows[0]["Version"].ToString();
  7627. Brand = Sumdtt.Rows[0]["Brand"].ToString();
  7628. cFree1 = Sumdtt.Rows[0]["cFree1"].ToString();
  7629. cFree2 = Sumdtt.Rows[0]["cFree2"].ToString();
  7630. cFree3 = Sumdtt.Rows[0]["cFree3"].ToString();
  7631. cFree4 = Sumdtt.Rows[0]["cFree4"].ToString();
  7632. cFree5 = Sumdtt.Rows[0]["cFree5"].ToString();
  7633. cFree6 = Sumdtt.Rows[0]["cFree6"].ToString();
  7634. cFree7 = Sumdtt.Rows[0]["cFree7"].ToString();
  7635. cFree8 = Sumdtt.Rows[0]["cFree8"].ToString();
  7636. cFree9 = Sumdtt.Rows[0]["cFree9"].ToString();
  7637. cFree10 = Sumdtt.Rows[0]["cFree10"].ToString();
  7638. //检验自由项
  7639. Colspan = ProjectCode + "~" + BatchCode + "~" + Version
  7640. + "~" + Brand + "~" + cFree1
  7641. + "~" + cFree2 + "~" + cFree3 + "~" + cFree4
  7642. + "~" + cFree5 + "~" + cFree6 + "~" + cFree7
  7643. + "~" + cFree8 + "~" + cFree9 + "~" + cFree10;
  7644. string exsql = @"select ID,Colspan from ICSExtension a
  7645. where Colspan='{0}' and WorkPoint='{1}'";
  7646. exsql = string.Format(exsql, Colspan, WorkPoint);
  7647. DataTable dttt = DBHelper.SQlReturnData(exsql, cmd);
  7648. if (dttt.Rows.Count == 0)
  7649. {
  7650. IDD = Guid.NewGuid().ToString();
  7651. sql = @"Insert into ICSExtension(ID, Colspan, ProjectCode, BatchCode, Version, Brand, cFree1, cFree2, cFree3, cFree4, cFree5, cFree6, cFree7, cFree8, cFree9, cFree10, MTIME, MUSER, MUSERName, WorkPoint)
  7652. 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}'";
  7653. sql = string.Format(sql, Colspan, ProjectCode, BatchCode, Version, Brand, cFree1, cFree2, cFree3, cFree4, cFree5, cFree6, cFree7, cFree8, cFree9, cFree10, User, WorkPoint, IDD);
  7654. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  7655. {
  7656. throw new Exception(language.GetNameByCode("WMSAPIInfo366"));
  7657. }
  7658. string uppsql = @"update ICSInventoryLot SET ExtensionID='{0}' where lotno='{1}'";
  7659. uppsql = string.Format(uppsql, IDD, LotNo);
  7660. if (!DBHelper.ExecuteNonQuery(uppsql, cmd))
  7661. {
  7662. throw new Exception(language.GetNameByCode("跨组织条码修改自由项id失败"));
  7663. }
  7664. }
  7665. else
  7666. {
  7667. string uppsql = @"update ICSInventoryLot SET ExtensionID='{0}' where lotno='{1}'";
  7668. uppsql = string.Format(uppsql, dttt.Rows[0]["ID"].ToString(), LotNo);
  7669. if (!DBHelper.ExecuteNonQuery(uppsql, cmd))
  7670. {
  7671. throw new Exception(language.GetNameByCode("跨组织条码修改自由项id失败"));
  7672. }
  7673. }
  7674. sql = @"IF EXISTS(SELECT id FROM ICSTransferApplication a WHERE a.TransferNO='{5}' AND isnull(EATTRIBUTE29,'')<>isnull(EATTRIBUTE30,''))
  7675. BEGIN
  7676. UPDATE ICSWareHouseLotInfo SET WorkPoint='{4}' WHERE LotNo='{0}'
  7677. UPDATE ICSInventoryLot SET WorkPoint='{4}' WHERE LotNo='{0}'
  7678. END
  7679. ELSE
  7680. BEGIN
  7681. UPDATE ICSInventoryLot SET WorkPoint='{4}' WHERE LotNo='{0}'
  7682. UPDATE ICSWareHouseLotInfo SET WareHouseCode='{2}',LocationCode='{3}' , WorkPoint='{4}' WHERE LotNo='{0}'
  7683. END
  7684. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND Quantity<=0)
  7685. BEGIN
  7686. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  7687. RETURN
  7688. END";
  7689. sql = string.Format(sql, LotNo, WorkPoint, WarehouseCode, LocationCode, WorkPoint, TransCode);
  7690. }
  7691. else
  7692. {
  7693. ///更新库存
  7694. sql = @"UPDATE ICSWareHouseLotInfo SET WareHouseCode='{2}',LocationCode='{3}' , WorkPoint='{1}' WHERE LotNo='{0}'
  7695. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND Quantity<=0)
  7696. BEGIN
  7697. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  7698. RETURN
  7699. END";
  7700. sql = string.Format(sql, LotNo, WorkPoint, WarehouseCode, LocationCode, WorkPoint);
  7701. }
  7702. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  7703. {
  7704. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  7705. }
  7706. }
  7707. DateTime now = DateTime.Now;
  7708. sql = @"select 1 from ICSContainerLot
  7709. where LotNo='{0}'
  7710. ";
  7711. sql = string.Format(sql, LotNo, WorkPoint);
  7712. log.Debug("查询容器条码关联表是否存在");
  7713. DataTable dttte = DBHelper.SQlReturnData(sql, cmd);
  7714. if (dttte.Rows.Count > 0)
  7715. {
  7716. ///删除条码关联表数据
  7717. sql = @"DELETE FROM ICSContainerLot
  7718. where LotNo='{0}'
  7719. ";
  7720. sql = string.Format(sql, LotNo, WorkPoint);
  7721. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  7722. {
  7723. throw new Exception(language.GetNameByCode("容器条码关联表数据删除失败"));
  7724. }
  7725. }
  7726. }
  7727. else
  7728. {
  7729. string aa = @"update ICSWareHouseLotInfo set EATTRIBUTE10='' where lotno='{0}' and workpoint='{1}'";
  7730. aa = string.Format(aa, LotNo, WorkPoint);
  7731. if (!DBHelper.ExecuteNonQuery(aa, cmd))
  7732. {
  7733. throw new Exception("条码EATTRIBUTE10更新失败!");//"占料标识更新失败!");
  7734. }
  7735. 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
  7736. from Sys_SRM_Items a
  7737. left join Sys_SRM_ItemsDetail b on a.F_Id=b.F_ItemId
  7738. where a.F_EnCode='TransBatch' and b.F_ItemCode='{0}' )
  7739. BEGIN
  7740. RAISERROR('" + language.GetNameByCode("WMSAPIInfo470") + @"',16,1);
  7741. RETURN
  7742. END
  7743. select b.F_ItemCode as Code ,b.F_ItemName as Name,b.F_EnabledMark AS Enable ,b.F_IsDefault AS DisPrintEnable
  7744. from Sys_SRM_Items a
  7745. left join Sys_SRM_ItemsDetail b on a.F_Id=b.F_ItemId
  7746. where a.F_EnCode='TransBatch' and b.F_ItemCode='{0}'
  7747. ";
  7748. cheksql = string.Format(cheksql, BusinessCode);
  7749. DataTable chekdt = DBHelper.SQlReturnData(cheksql, cmd);
  7750. if (chekdt.Rows.Count == 0)
  7751. {
  7752. throw new Exception(language.GetNameByCode("WMSAPIInfo369"));
  7753. }
  7754. else
  7755. {
  7756. chekEnable = chekdt.Rows[0]["Enable"].ToString();
  7757. DisPrintEnable = chekdt.Rows[0]["DisPrintEnable"].ToString();
  7758. }
  7759. //检验是否分批
  7760. string sql = @"SELECT b.LotEnable,b.PrintEnable FROM ICSInventoryLot a
  7761. LEFT JOIN ICSInventory b ON a.InvCode=b.InvCode AND a.WorkPoint=b.WorkPoint
  7762. where a.LotNo='{0}' and a.WorkPoint='{1}'
  7763. ";
  7764. sql = string.Format(sql, LotNo, WorkPoint);
  7765. DataTable dt = DBHelper.SQlReturnData(sql, cmd);
  7766. if (dt.Rows.Count == 0)
  7767. {
  7768. throw new Exception(language.GetNameByCode("WMSAPIInfo369"));
  7769. }
  7770. else
  7771. {
  7772. LotEnable = dt.Rows[0]["LotEnable"].ToString();
  7773. PrintEnable = dt.Rows[0]["PrintEnable"].ToString();
  7774. }
  7775. sql = @"select Quantity from ICSWareHouseLotInfo
  7776. where LotNO='{0}' AND WorkPoint='{1}'";
  7777. sql = string.Format(sql, LotNo, WorkPoint);
  7778. DataTable dtt = DBHelper.SQlReturnData(sql, cmd);
  7779. LotQTYYY = Convert.ToDecimal(dtt.Rows[0]["Quantity"]);
  7780. LotQTY = Convert.ToDecimal(Quantity);
  7781. if (LotEnable.Equals("True") && chekEnable.Equals("True") && LotQTYYY - LotQTY > 0)//增加数量判断
  7782. {
  7783. ///更新库存
  7784. sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  7785. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND Quantity<0)
  7786. BEGIN
  7787. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  7788. RETURN
  7789. END";
  7790. sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  7791. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  7792. {
  7793. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  7794. }
  7795. ///分批前添加日志
  7796. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  7797. BEGIN
  7798. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  7799. RETURN
  7800. END
  7801. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  7802. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  7803. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  7804. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  7805. MTIME,WorkPoint,EATTRIBUTE1)
  7806. SELECT NEWID(),'{3}','{7}','{8}',a.LotNo ,a.InvCode ,
  7807. c.WarehouseCode,c.LocationCode,'','',c.Quantity+{6},
  7808. '','0','{4}','31','0','',
  7809. '','','',f.F_Account ,f.F_RealName ,
  7810. SYSDATETIME() ,a.WorkPoint ,''
  7811. FROM ICSInventoryLot a
  7812. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  7813. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  7814. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  7815. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  7816. ";
  7817. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransType, BusinessCode, Quantity, TransCode, TransSequence);
  7818. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  7819. {
  7820. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  7821. }
  7822. #region 获取分批后的条码(lotstr)
  7823. sql = @"SELECT TOP 1 LotNO FROM ICSInventoryLot WHERE EATTRIBUTE1='{0}' AND WorkPoint='{1}'
  7824. ORDER BY CAST(SUBSTRING(LotNO, (LEN(LotNO)-CHARINDEX('-',REVERSE(LotNO))+1)+1,CHARINDEX('-',REVERSE(LotNO))-1) AS INT) DESC";
  7825. sql = string.Format(sql, LotNo, WorkPoint);
  7826. dt = DBHelper.SQlReturnData(sql, cmd);
  7827. if (dt.Rows.Count == 0)
  7828. {
  7829. lotstr = LotNo + "-" + 1;
  7830. }
  7831. else
  7832. {
  7833. lotstr = LotNo + "-" + (Convert.ToInt32(dt.Rows[0]["LotNO"].ToString().Split('-')[dt.Rows[0]["LotNO"].ToString().Split('-').Length - 1]) + 1).ToString();
  7834. }
  7835. NewBarCodeList.Add(lotstr);//将分批后新条码添加到新集合
  7836. #endregion
  7837. #region 将分批后的条码记录插入条码表,库存表及日志表并将原条码库存数量清零
  7838. sql = @"INSERT INTO ICSInventoryLot(ID,LotNo,InvCode,ProductDate,ExpirationDate,
  7839. Quantity,Amount,ExtensionID,Type,PrintTimes,
  7840. LastPrintUser,LastPrintTime,MUSER,MUSERName,MTIME,
  7841. WorkPoint,EATTRIBUTE1,EATTRIBUTE2,EATTRIBUTE3,EATTRIBUTE4,EATTRIBUTE5,EATTRIBUTE6,EATTRIBUTE7,EATTRIBUTE8,
  7842. EATTRIBUTE9,EATTRIBUTE10,EATTRIBUTE11,EATTRIBUTE12,EATTRIBUTE13,EATTRIBUTE14,EATTRIBUTE15,EATTRIBUTE16,EATTRIBUTE17,EATTRIBUTE18,EATTRIBUTE19,EATTRIBUTE20,
  7843. EATTRIBUTE21,EATTRIBUTE22,EATTRIBUTE23,EATTRIBUTE24,EATTRIBUTE25,EATTRIBUTE26,EATTRIBUTE27,EATTRIBUTE28,EATTRIBUTE29,EATTRIBUTE30)
  7844. SELECT TOP 1 NEWID(),'{0}',a.InvCode,a.ProductDate,a.ExpirationDate,
  7845. '{2}',a.Amount,a.ExtensionID,a.Type,a.PrintTimes,
  7846. a.LastPrintUser,a.LastPrintTime,a.MUSER ,a.MUSERName ,GETDATE(),
  7847. a.WorkPoint ,'{1}',a.EATTRIBUTE2,a.EATTRIBUTE3,a.EATTRIBUTE4,a.EATTRIBUTE5,a.EATTRIBUTE6,a.EATTRIBUTE7,a.EATTRIBUTE8,
  7848. a.EATTRIBUTE9,a.EATTRIBUTE10,a.EATTRIBUTE11,a.EATTRIBUTE12,a.EATTRIBUTE13,a.EATTRIBUTE14,a.EATTRIBUTE15,a.EATTRIBUTE16,a.EATTRIBUTE17,a.EATTRIBUTE18,a.EATTRIBUTE19,a.EATTRIBUTE20,
  7849. a.EATTRIBUTE21,a.EATTRIBUTE22,a.EATTRIBUTE23,a.EATTRIBUTE24,a.EATTRIBUTE25,a.EATTRIBUTE26,a.EATTRIBUTE27,a.EATTRIBUTE28,a.EATTRIBUTE29,a.EATTRIBUTE30
  7850. From ICSInventoryLot a
  7851. where a.LotNo='{1}' and a.WorkPoint='{3}'";
  7852. sql = string.Format(sql, lotstr, LotNo, Quantity, WorkPoint);
  7853. cmd.CommandText = sql;
  7854. result = cmd.ExecuteNonQuery();
  7855. if (result <= 0)
  7856. {
  7857. throw new Exception(language.GetNameByCode("WMSAPIInfo195"));//条码分批后条码表存入失败!
  7858. }
  7859. #endregion
  7860. sql = @"INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  7861. select NEWID(),'{0}','{4}','{5}',InvCode,'{2}',InDate,LockQuantity
  7862. ,MUSER,MUSERName,GETDATE(),'{3}',''
  7863. from ICSWareHouseLotInfo
  7864. where LotNO='{1}' AND WorkPoint='{3}'";
  7865. sql = string.Format(sql, lotstr, LotNo, Quantity, WorkPoint, WarehouseCode, LocationCode);
  7866. cmd.CommandText = sql;
  7867. result = cmd.ExecuteNonQuery();
  7868. if (result <= 0)
  7869. {
  7870. throw new Exception(language.GetNameByCode("WMSAPIInfo196"));//条码分批后库存表存入失败!
  7871. }
  7872. //插入条码单据表
  7873. sql = @"INSERT INTO ICSInventoryLotDetail(LotNo,TransCode,TransSequence,MUSER,MUSERName,MTIME,WorkPoint)
  7874. SELECT '{3}',b.TransCode,b.TransSequence,f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint
  7875. FROM ICSInventoryLot a
  7876. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  7877. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  7878. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  7879. sql = string.Format(sql, LotNo, WorkPoint, User, lotstr);
  7880. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  7881. {
  7882. throw new Exception(language.GetNameByCode("WMSAPIInfo174"));//"条码单据表写入失败!");
  7883. }
  7884. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  7885. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  7886. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  7887. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  7888. MTIME,WorkPoint,EATTRIBUTE1,LogID)
  7889. SELECT NEWID(),'{3}','{4}','{5}','{10}' ,a.InvCode ,
  7890. c.WarehouseCode,c.LocationCode,'{11}','{12}','{6}',
  7891. '','0','{7}','{8}','0','',
  7892. '','','',f.F_Account ,f.F_RealName ,
  7893. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  7894. FROM ICSInventoryLot a
  7895. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  7896. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  7897. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  7898. ";
  7899. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID, lotstr, WarehouseCode, LocationCode);
  7900. cmd.CommandText = sql;
  7901. result = cmd.ExecuteNonQuery();
  7902. if (result <= 0)
  7903. {
  7904. throw new Exception(language.GetNameByCode("WMSAPIInfo197"));//条码分批后库存日志表存入失败!
  7905. }
  7906. ///添加日志
  7907. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  7908. BEGIN
  7909. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  7910. RETURN
  7911. END
  7912. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  7913. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  7914. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  7915. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  7916. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  7917. SELECT NEWID(),'{3}','{4}','{5}',a.LotNo ,a.InvCode ,
  7918. c.WarehouseCode,c.LocationCode,'','',c.Quantity,
  7919. '','0','{7}','32','0','',
  7920. '','','',f.F_Account ,f.F_RealName ,
  7921. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  7922. FROM ICSInventoryLot a
  7923. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  7924. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  7925. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  7926. ";
  7927. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID);
  7928. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  7929. {
  7930. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  7931. }
  7932. //if (PrintEnable.Equals("True"))
  7933. //{
  7934. // string PrintData = DBHelper.ReadFileStream();
  7935. // //sql = @""+PrintData+"";
  7936. // 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
  7937. // from ICSWareHouseLotInfolog A
  7938. // left join ICSInventoryLot B on A.LotNO=B.LotNO and a.WorkPoint=b.WorkPoint
  7939. // left join ICSWareHouseLotInfo C ON A.LotNO=C.LotNO and a.WorkPoint=c.WorkPoint
  7940. // left join ICSInventory D on b.INVCODE=d.INVCODE and b.WorkPoint=d.WorkPoint
  7941. // where A.lotno like '%{0}%' and a.Identification='{3}' and a.workpoint='{1}' and a.BusinessCode='{2}'";
  7942. // sql = string.Format(sql, LotNo, WorkPoint, BusinessCode, Identification);
  7943. // dtLotno = DBHelper.SQlReturnData(sql, cmd);
  7944. // lstDt = dtLotno;
  7945. //}
  7946. if (PrintEnable.Equals("True") && DisPrintEnable.Equals("True"))
  7947. {
  7948. string PrintData = DBHelper.ReadPrintStream();
  7949. sql = @"" + PrintData + "";
  7950. //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
  7951. // from ICSWareHouseLotInfolog A
  7952. // left join ICSInventoryLot B on A.LotNO=B.LotNO and a.WorkPoint=b.WorkPoint
  7953. // left join ICSWareHouseLotInfo C ON A.LotNO=C.LotNO and a.WorkPoint=c.WorkPoint
  7954. // left join ICSInventory D on b.INVCODE=d.INVCODE and b.WorkPoint=d.WorkPoint
  7955. // where A.lotno ='{0}' and a.workpoint='{1}' and a.BusinessCode='{2}'
  7956. // ";
  7957. sql = string.Format(sql, LotNo, WorkPoint, BusinessCode, Identification);
  7958. log.Debug("打印数据源:" + sql);
  7959. dtLotno = DBHelper.SQlReturnData(sql, cmd);
  7960. lstDt = dtLotno;
  7961. }
  7962. }
  7963. else if ((!LotEnable.Equals("True") || !chekEnable.Equals("True")) && LotQTYYY - LotQTY > 0)
  7964. {
  7965. string errMsg = LotNo;
  7966. if (!LotEnable.Equals("True") && !chekEnable.Equals("True"))
  7967. {
  7968. errMsg += " 对应的物料未开启自动分批,且单据分批管控未打开";
  7969. }
  7970. else if (!LotEnable.Equals("True"))
  7971. {
  7972. errMsg += " 对应的物料未开启自动分批";
  7973. }
  7974. else
  7975. {
  7976. errMsg = "单据分批管控未打开";
  7977. }
  7978. throw new Exception(errMsg);
  7979. }
  7980. else
  7981. {
  7982. ///添加日志
  7983. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  7984. BEGIN
  7985. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  7986. RETURN
  7987. END
  7988. IF EXISTS(SELECT id FROM ICSWareHouseLotInfo WHERE WarehouseCode='{9}' AND LocationCode='{10}' AND WorkPoint='{1}' AND LotNo = '{0}')
  7989. BEGIN
  7990. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo355")) + @"',16,1);
  7991. RETURN
  7992. END
  7993. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  7994. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  7995. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  7996. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  7997. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  7998. SELECT NEWID(),'{3}','{4}','{5}',a.LotNo ,a.InvCode ,
  7999. c.WarehouseCode,c.LocationCode,'{9}','{10}',{6},
  8000. '','0','{7}','{8}','0','',
  8001. '','','',f.F_Account ,f.F_RealName ,
  8002. SYSDATETIME() ,a.WorkPoint ,'','{11}'
  8003. FROM ICSInventoryLot a
  8004. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  8005. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  8006. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  8007. ";
  8008. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, WarehouseCode, LocationCode, MergeID);
  8009. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  8010. {
  8011. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  8012. }
  8013. ///更新库存
  8014. sql = @"UPDATE ICSWareHouseLotInfo SET WareHouseCode='{2}',LocationCode='{3}',WorkPoint='{1}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  8015. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity<=0)
  8016. BEGIN
  8017. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  8018. RETURN
  8019. END";
  8020. sql = string.Format(sql, LotNo, WorkPoint, WarehouseCode, LocationCode);
  8021. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  8022. {
  8023. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  8024. }
  8025. }
  8026. DateTime now = DateTime.Now;
  8027. sql = @"select 1 from ICSContainerLot
  8028. where LotNo='{0}' and WorkPoint='{1}'
  8029. ";
  8030. sql = string.Format(sql, LotNo, WorkPoint);
  8031. log.Debug("查询容器条码关联表是否存在");
  8032. DataTable dttte = DBHelper.SQlReturnData(sql, cmd);
  8033. if (dttte.Rows.Count > 0)
  8034. {
  8035. ///删除条码关联表数据
  8036. sql = @"DELETE FROM ICSContainerLot
  8037. where LotNo='{0}' and WorkPoint='{1}'
  8038. ";
  8039. sql = string.Format(sql, LotNo, WorkPoint);
  8040. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  8041. {
  8042. throw new Exception(language.GetNameByCode("容器条码关联表数据删除失败"));
  8043. }
  8044. }
  8045. }
  8046. }
  8047. catch (Exception)
  8048. {
  8049. throw;
  8050. }
  8051. return lstDt;
  8052. }
  8053. /// <summary>
  8054. /// 移库
  8055. /// </summary>
  8056. /// <param name="LocationCode"></param>
  8057. /// <param name="LotNo"></param>
  8058. /// <param name="Quantity"></param>
  8059. /// <param name="User"></param>
  8060. /// <param name="WorkPoint"></param>
  8061. /// <param name="TransType"></param>
  8062. /// <param name="BusinessCode"></param>
  8063. /// <param name="cmd"></param>
  8064. public static void WareHouseLotInfoLibrary(string Identification, string TransCode, string TransSequence, string WarehouseCode, string LocationCode,
  8065. string LotNo, string User, string WorkPoint, string TransType, string BusinessCode,String ScanType, SqlCommand cmd, Dictionary<string, string> language)
  8066. {
  8067. try
  8068. {
  8069. string sql = @"SELECT WarehouseCode FROM ICSWareHouseLotInfo a WHERE LotNo='{0}' AND WorkPoint='{1}'";
  8070. sql = string.Format(sql, LotNo,WorkPoint);
  8071. DataTable dt = DBHelper.SQlReturnData(sql, cmd);
  8072. if (dt == null || dt.Rows.Count <= 0)
  8073. {
  8074. throw new Exception(string.Format(language.GetNameByCode("WMSAPIInfo171"), LotNo));
  8075. }
  8076. string whcode = dt.Rows[0]["WarehouseCode"].ToString();
  8077. ///添加日志
  8078. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  8079. BEGIN
  8080. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  8081. RETURN
  8082. END
  8083. IF('" + whcode + @"' != '{8}')
  8084. BEGIN
  8085. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo394"), "{8}", whcode) + @"', 16, 1);
  8086. RETURN
  8087. END
  8088. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  8089. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  8090. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  8091. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  8092. MTIME,WorkPoint,EATTRIBUTE1 )
  8093. SELECT NEWID(),'{3}','{4}','{5}',a.LotNo ,a.InvCode ,
  8094. c.WarehouseCode,c.LocationCode,'{8}','{9}',c.Quantity,
  8095. '','0','{6}','{7}','0','',
  8096. '','','',f.F_Account ,f.F_RealName ,
  8097. SYSDATETIME() ,a.WorkPoint ,''
  8098. FROM ICSInventoryLot a
  8099. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  8100. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  8101. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  8102. ";
  8103. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, TransType, BusinessCode, WarehouseCode, LocationCode);
  8104. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  8105. {
  8106. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  8107. }
  8108. ///添加库存
  8109. sql = @"IF NOT EXISTS(SELECT a.ID FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity>0)
  8110. BEGIN
  8111. RAISERROR('" + language.GetNameByCode("WMSAPIInfo038") + @"',16,1);
  8112. RETURN
  8113. END
  8114. IF NOT EXISTS(SELECT a.ID FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND a.WarehouseCode='{2}')
  8115. BEGIN
  8116. RAISERROR('" + language.GetNameByCode("WMSAPIInfo038") + @"',16,1);
  8117. RETURN
  8118. END
  8119. UPDATE ICSWareHouseLotInfo SET WarehouseCode='{2}',LocationCode='{3}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  8120. ";
  8121. sql = string.Format(sql, LotNo, WorkPoint, WarehouseCode, LocationCode);
  8122. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  8123. {
  8124. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存表更新失败!");
  8125. }
  8126. DateTime now = DateTime.Now;
  8127. if (ScanType== "LOTNO")
  8128. {
  8129. sql = @"select 1 from ICSContainerLot
  8130. where LotNo='{0}' and WorkPoint='{1}'
  8131. ";
  8132. sql = string.Format(sql, LotNo, WorkPoint);
  8133. log.Debug("查询容器条码关联表是否存在");
  8134. DataTable dttte = DBHelper.SQlReturnData(sql, cmd);
  8135. if (dttte.Rows.Count > 0)
  8136. {
  8137. ///删除条码关联表数据
  8138. sql = @"DELETE FROM ICSContainerLot
  8139. where LotNo='{0}' and WorkPoint='{1}'
  8140. ";
  8141. sql = string.Format(sql, LotNo, WorkPoint);
  8142. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  8143. {
  8144. throw new Exception(language.GetNameByCode("容器条码关联表数据删除失败"));
  8145. }
  8146. }
  8147. }
  8148. }
  8149. catch (Exception)
  8150. {
  8151. throw;
  8152. }
  8153. }
  8154. /// <summary>
  8155. /// 两步调入
  8156. /// </summary>
  8157. /// <param name="LocationCode"></param>
  8158. /// <param name="LotNo"></param>
  8159. /// <param name="Quantity"></param>
  8160. /// <param name="User"></param>
  8161. /// <param name="WorkPoint"></param>
  8162. /// <param name="TransType"></param>
  8163. /// <param name="BusinessCode"></param>
  8164. /// <param name="cmd"></param>
  8165. public static void WareHouseLotInfoTwoStepTransferDocIn(string Identification, string TransCode, string TransSequence, string WarehouseCode,
  8166. string LocationCode, string LotNo, string Quantity, string User, string WorkPoint, string TransType, string BusinessCode, SqlCommand cmd, Dictionary<string, string> language)
  8167. {
  8168. try
  8169. {
  8170. ///添加日志
  8171. string sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  8172. BEGIN
  8173. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  8174. RETURN
  8175. END
  8176. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  8177. ToWarehouseCode,ToLocationCode,Quantity,
  8178. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  8179. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  8180. MTIME,WorkPoint,EATTRIBUTE1)
  8181. SELECT NEWID(),'{3}','{4}','{5}',a.LotNo ,a.InvCode ,
  8182. '{9}','{10}','{6}',
  8183. '','0','{7}','{8}','0','',
  8184. '','','',f.F_Account ,f.F_RealName ,
  8185. SYSDATETIME() ,a.WorkPoint ,''
  8186. FROM ICSInventoryLot a
  8187. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  8188. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  8189. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  8190. ";
  8191. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, WarehouseCode, LocationCode);
  8192. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  8193. {
  8194. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  8195. }
  8196. string aa = @"update ICSWareHouseLotInfo set EATTRIBUTE10='' where lotno='{0}' and workpoint='{1}'";
  8197. aa = string.Format(aa, LotNo, WorkPoint);
  8198. if (!DBHelper.ExecuteNonQuery(aa, cmd))
  8199. {
  8200. throw new Exception("条码EATTRIBUTE10更新失败!");//"占料标识更新失败!");
  8201. }
  8202. ///添加库存
  8203. sql = @"IF NOT EXISTS(SELECT a.ID FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}')
  8204. BEGIN
  8205. RAISERROR('" + language.GetNameByCode("WMSAPIInfo171") + @"',16,1);
  8206. RETURN
  8207. END
  8208. UPDATE ICSWareHouseLotInfo SET WarehouseCode='{2}',LocationCode='{3}',Quantity=Quantity+'{4}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  8209. ";
  8210. sql = string.Format(sql, LotNo, WorkPoint, WarehouseCode, LocationCode, Quantity);
  8211. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  8212. {
  8213. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存表更新失败!");
  8214. }
  8215. }
  8216. catch (Exception)
  8217. {
  8218. throw;
  8219. }
  8220. }
  8221. /// <summary>
  8222. /// 锐腾两步调入
  8223. /// </summary>
  8224. /// <param name="LocationCode"></param>
  8225. /// <param name="LotNo"></param>
  8226. /// <param name="Quantity"></param>
  8227. /// <param name="User"></param>
  8228. /// <param name="WorkPoint"></param>
  8229. /// <param name="TransType"></param>
  8230. /// <param name="BusinessCode"></param>
  8231. /// <param name="cmd"></param>
  8232. public static void RTWareHouseLotInfoTwoStepTransferDocIn(string Identification, string TransCode, string TransSequence, string WarehouseCode,
  8233. string LocationCode, string LotNo, string Quantity, string User, string WorkPoint, string TransType, string BusinessCode, SqlCommand cmd, Dictionary<string, string> language)
  8234. {
  8235. try
  8236. {
  8237. ///添加日志
  8238. string sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  8239. BEGIN
  8240. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  8241. RETURN
  8242. END
  8243. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  8244. ToWarehouseCode,ToLocationCode,Quantity,
  8245. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  8246. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  8247. MTIME,WorkPoint,EATTRIBUTE1)
  8248. SELECT NEWID(),'{3}','{4}','{5}',a.LotNo ,a.InvCode ,
  8249. '{9}','{10}','{6}',
  8250. '','0','{7}','{8}','0','',
  8251. '','','',f.F_Account ,f.F_RealName ,
  8252. SYSDATETIME() ,a.WorkPoint ,''
  8253. FROM ICSInventoryLot a
  8254. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  8255. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  8256. ";
  8257. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, WarehouseCode, LocationCode);
  8258. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  8259. {
  8260. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  8261. }
  8262. ///添加库存
  8263. sql = @"IF EXISTS(SELECT a.ID FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}')
  8264. BEGIN
  8265. RAISERROR('!',16,1);
  8266. RETURN
  8267. END
  8268. INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  8269. SELECT NEWID(),a.LotNo ,e.WarehouseCode,d.LocationCode,a.InvCode ,'{3}',SYSDATETIME(),'0',f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint ,''
  8270. FROM ICSInventoryLot a
  8271. LEFT JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  8272. --INNER JOIN ICSOApplyNegDetail c ON b.TransCode=c.OApplyNegCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  8273. INNER JOIN ICSLocation d ON d.LocationCode='{4}' AND a.WorkPoint=d.WorkPoint
  8274. INNER JOIN ICSWarehouse e ON d.WHID=e.ID AND d.WorkPoint=e.WorkPoint
  8275. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  8276. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  8277. ";
  8278. sql = string.Format(sql, LotNo, WorkPoint, User, Quantity, LocationCode);
  8279. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  8280. {
  8281. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存表更新失败!");
  8282. }
  8283. }
  8284. catch (Exception)
  8285. {
  8286. throw;
  8287. }
  8288. }
  8289. /// <summary>
  8290. /// 合并日志
  8291. /// </summary>
  8292. /// <param name="Identification"></param>
  8293. /// <param name="LotNo"></param>
  8294. /// <param name="User"></param>
  8295. /// <param name="WorkPoint"></param>
  8296. /// <param name="TransType"></param>
  8297. /// <param name="BusinessCode"></param>
  8298. /// <param name="cmd"></param>
  8299. public static DataTable WareHouseLotInfoLogMerge(string Identification, string LotNo, string User, string WorkPoint, string TransType, string BusinessCode, string newLotno, SqlCommand cmd, Dictionary<string, string> language)
  8300. {
  8301. String LotEnable = "";
  8302. String PrintEnable = "";
  8303. DataTable dtLotno = new DataTable();
  8304. DataTable lstDt = new DataTable();
  8305. try
  8306. {
  8307. //检验是否分批
  8308. string sql = @"SELECT b.LotEnable,b.PrintEnable FROM ICSInventoryLot a
  8309. LEFT JOIN ICSInventory b ON a.InvCode=b.InvCode AND a.WorkPoint=b.WorkPoint
  8310. where a.LotNo='{0}' and a.WorkPoint='{1}'
  8311. ";
  8312. sql = string.Format(sql, LotNo, WorkPoint);
  8313. DataTable dt = DBHelper.SQlReturnData(sql, cmd);
  8314. if (dt.Rows.Count == 0)
  8315. {
  8316. throw new Exception(language.GetNameByCode("WMSAPIInfo369"));
  8317. }
  8318. else
  8319. {
  8320. LotEnable = dt.Rows[0]["LotEnable"].ToString();
  8321. PrintEnable = dt.Rows[0]["PrintEnable"].ToString();
  8322. }
  8323. ///添加日志
  8324. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  8325. BEGIN
  8326. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  8327. RETURN
  8328. END
  8329. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  8330. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  8331. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  8332. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  8333. MTIME,WorkPoint,EATTRIBUTE1)
  8334. SELECT NEWID(),'{3}',b.TransCode,b.TransSequence,a.LotNo ,a.InvCode ,
  8335. '','',c.WarehouseCode,c.LocationCode,c.Quantity,
  8336. '','0','{4}','{5}','0','',
  8337. '','','',f.F_Account ,f.F_RealName ,
  8338. SYSDATETIME() ,a.WorkPoint ,''
  8339. FROM ICSInventoryLot a
  8340. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  8341. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  8342. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  8343. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  8344. ";
  8345. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransType, BusinessCode);
  8346. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  8347. {
  8348. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  8349. }
  8350. if (PrintEnable.Equals("True"))
  8351. {
  8352. sql = @"select A.LotNO , B.Quantity AS OLDLotQty, C.Quantity AS LotQty ,b.InvCode,d.INVSTD,d.INVNAME,b.MTIME,A.TransCode
  8353. from ICSWareHouseLotInfolog A
  8354. left join ICSInventoryLot B on A.LotNO=B.LotNO and a.WorkPoint=b.WorkPoint
  8355. left join ICSWareHouseLotInfo C ON A.LotNO=C.LotNO and a.WorkPoint=c.WorkPoint
  8356. left join ICSInventory D on b.INVCODE=d.INVCODE and b.WorkPoint=d.WorkPoint
  8357. where a.BusinessCode='34'
  8358. and A.lotno = '{0}' and a.workpoint='{1}'
  8359. ";
  8360. sql = string.Format(sql, LotNo, WorkPoint, BusinessCode, newLotno);
  8361. dtLotno = DBHelper.SQlReturnData(sql, cmd);
  8362. lstDt = dtLotno;
  8363. }
  8364. }
  8365. catch (Exception)
  8366. {
  8367. throw;
  8368. }
  8369. return lstDt;
  8370. }
  8371. /// <summary>
  8372. /// 拆分、合并日志
  8373. /// </summary>
  8374. /// <param name="Identification"></param>
  8375. /// <param name="LotNo"></param>
  8376. /// <param name="User"></param>
  8377. /// <param name="WorkPoint"></param>
  8378. /// <param name="TransType"></param>
  8379. /// <param name="BusinessCode"></param>
  8380. /// <param name="cmd"></param>
  8381. public static DataTable WareHouseLotInfoLog(string Identification, string LotNo, string User, string WorkPoint, string TransType, string BusinessCode,string newLotno, SqlCommand cmd, Dictionary<string, string> language)
  8382. {
  8383. String LotEnable = "";
  8384. String PrintEnable = "";
  8385. DataTable dtLotno = new DataTable();
  8386. DataTable lstDt = new DataTable();
  8387. try{
  8388. //检验是否分批
  8389. string sql = @"SELECT b.LotEnable,b.PrintEnable FROM ICSInventoryLot a
  8390. LEFT JOIN ICSInventory b ON a.InvCode=b.InvCode AND a.WorkPoint=b.WorkPoint
  8391. where a.LotNo='{0}' and a.WorkPoint='{1}'
  8392. ";
  8393. sql = string.Format(sql, LotNo, WorkPoint);
  8394. DataTable dt = DBHelper.SQlReturnData(sql, cmd);
  8395. if (dt.Rows.Count == 0)
  8396. {
  8397. throw new Exception(language.GetNameByCode("WMSAPIInfo369"));
  8398. }
  8399. else
  8400. {
  8401. LotEnable = dt.Rows[0]["LotEnable"].ToString();
  8402. PrintEnable = dt.Rows[0]["PrintEnable"].ToString();
  8403. }
  8404. ///添加日志
  8405. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  8406. BEGIN
  8407. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  8408. RETURN
  8409. END
  8410. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  8411. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  8412. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  8413. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  8414. MTIME,WorkPoint,EATTRIBUTE1)
  8415. SELECT NEWID(),'{3}',b.TransCode,b.TransSequence,a.LotNo ,a.InvCode ,
  8416. '','',c.WarehouseCode,c.LocationCode,c.Quantity,
  8417. '','0','{4}','{5}','0','',
  8418. '','','',f.F_Account ,f.F_RealName ,
  8419. SYSDATETIME() ,a.WorkPoint ,''
  8420. FROM ICSInventoryLot a
  8421. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  8422. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  8423. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  8424. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  8425. ";
  8426. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransType, BusinessCode);
  8427. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  8428. {
  8429. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  8430. }
  8431. //if (PrintEnable.Equals("True"))
  8432. //{
  8433. // 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
  8434. // from ICSWareHouseLotInfolog A
  8435. // left join ICSInventoryLot B on A.LotNO=B.LotNO and a.WorkPoint=b.WorkPoint
  8436. // left join ICSWareHouseLotInfo C ON A.LotNO=C.LotNO and a.WorkPoint=c.WorkPoint
  8437. // left join ICSInventory D on b.INVCODE=d.INVCODE and b.WorkPoint=d.WorkPoint
  8438. // left JOIN ICSExtension f on b.ExtensionID=f.id and b.WorkPoint=f.WorkPoint
  8439. // where a.BusinessCode='32'
  8440. // and A.lotno = '{3}' and a.workpoint='{1}'
  8441. // ";
  8442. // sql = string.Format(sql, LotNo, WorkPoint, BusinessCode,newLotno);
  8443. // dtLotno = DBHelper.SQlReturnData(sql, cmd);
  8444. // lstDt = dtLotno;
  8445. //}
  8446. if (PrintEnable.Equals("True") )
  8447. {
  8448. string PrintData = DBHelper.ReadPrintStream();
  8449. sql = @"" + PrintData + "";
  8450. //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
  8451. // from ICSWareHouseLotInfolog A
  8452. // left join ICSInventoryLot B on A.LotNO=B.LotNO and a.WorkPoint=b.WorkPoint
  8453. // left join ICSWareHouseLotInfo C ON A.LotNO=C.LotNO and a.WorkPoint=c.WorkPoint
  8454. // left join ICSInventory D on b.INVCODE=d.INVCODE and b.WorkPoint=d.WorkPoint
  8455. // where A.lotno ='{0}' and a.workpoint='{1}' and a.BusinessCode='{2}'
  8456. // ";
  8457. sql = string.Format(sql, newLotno, WorkPoint, BusinessCode, Identification);
  8458. log.Debug("拆分数据源:"+ sql);
  8459. dtLotno = DBHelper.SQlReturnData(sql, cmd);
  8460. lstDt = dtLotno;
  8461. }
  8462. }
  8463. catch (Exception)
  8464. {
  8465. throw;
  8466. }
  8467. return lstDt;
  8468. }
  8469. /// <summary>
  8470. /// 合并
  8471. /// </summary>
  8472. /// <param name="Identification"></param>
  8473. /// <param name="LotNo"></param>
  8474. /// <param name="User"></param>
  8475. /// <param name="WorkPoint"></param>
  8476. /// <param name="TransType"></param>
  8477. /// <param name="BusinessCode"></param>
  8478. /// <param name="cmd"></param>
  8479. public static void WareHouseLotInfoMerge(string Identification, string LotNo, string CurrentLotNo, string Quantity, string User, string WorkPoint, string TransType,
  8480. string BusinessCode, SqlCommand cmd, Dictionary<string, string> language)
  8481. {
  8482. try
  8483. {
  8484. ///更新目标条码库存
  8485. string sql = @"IF NOT EXISTS(SELECT a.LotNo FROM ICSInventoryLot a
  8486. INNER JOIN ICSInventoryLot b ON b.LotNo='{3}' AND a.InvCode=b.InvCode AND a.WorkPoint=b.WorkPoint
  8487. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}')
  8488. BEGIN
  8489. RAISERROR('" + language.GetNameByCode("WMSAPIInfo170") + @"',16,1);
  8490. RETURN
  8491. END
  8492. IF NOT EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}')
  8493. BEGIN
  8494. RAISERROR('" + language.GetNameByCode("WMSAPIInfo171") + @"',16,1);
  8495. RETURN
  8496. END
  8497. IF EXISTS(
  8498. SELECT * FROM ICSWareHouseLotInfo a
  8499. INNER JOIN ICSInventoryLot c on a.LotNo=c.LotNo and a.WorkPoint=c.WorkPoint
  8500. INNER JOIN ICSInventory d on c.invcode=d.invcode and c.WorkPoint=d.WorkPoint
  8501. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' and d.BatchEnable='1'
  8502. )
  8503. BEGIN
  8504. IF NOT EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a
  8505. INNER JOIN ICSWareHouseLotInfo b ON b.LotNo='{3}' AND a.WarehouseCode=b.WarehouseCode AND a.WorkPoint=b.WorkPoint
  8506. INNER JOIN ICSInventoryLot c on a.LotNo=c.LotNo and a.WorkPoint=c.WorkPoint
  8507. INNER JOIN ICSInventoryLot d on b.LotNo=d.LotNo and b.WorkPoint=d.WorkPoint
  8508. INNER JOIN ICSExtension e on c.ExtensionID=e.ID and c.WorkPoint=e.WorkPoint
  8509. INNER JOIN ICSExtension f on d.ExtensionID=f.id and d.WorkPoint=f.WorkPoint
  8510. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' and e.ID=f.ID)
  8511. BEGIN
  8512. RAISERROR('/',16,1);
  8513. RETURN
  8514. END
  8515. END
  8516. IF NOT EXISTS(
  8517. SELECT * FROM ICSWareHouseLotInfo a
  8518. INNER JOIN ICSInventoryLot c on a.LotNo=c.LotNo and a.WorkPoint=c.WorkPoint
  8519. INNER JOIN ICSInventory d on c.invcode=d.invcode and c.WorkPoint=d.WorkPoint
  8520. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' and d.BatchEnable='1'
  8521. )
  8522. BEGIN
  8523. IF NOT EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a
  8524. INNER JOIN ICSWareHouseLotInfo b ON b.LotNo='{3}' AND a.WarehouseCode=b.WarehouseCode AND a.WorkPoint=b.WorkPoint
  8525. INNER JOIN ICSInventoryLot c on a.LotNo=c.LotNo and a.WorkPoint=c.WorkPoint
  8526. INNER JOIN ICSInventoryLot d on b.LotNo=d.LotNo and b.WorkPoint=d.WorkPoint
  8527. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}')
  8528. BEGIN
  8529. RAISERROR('/',16,1);
  8530. RETURN
  8531. END
  8532. END
  8533. UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)+'{2}',EATTRIBUTE1='' WHERE LotNo='{0}' AND WorkPoint='{1}'
  8534. UPDATE ICSInventoryLot SET Amount=(ISNULL(Amount,0)+(select Amount from
  8535. ICSInventoryLot where LotNo='{3}' AND WorkPoint='{1}')) WHERE LotNo='{0}' AND WorkPoint='{1}'
  8536. ";
  8537. sql = string.Format(sql, LotNo, WorkPoint, Quantity, CurrentLotNo);
  8538. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  8539. {
  8540. throw new Exception(language.GetNameByCode("WMSAPIInfo169"));//"目标条码库存更新失败!");
  8541. }
  8542. ///更新原条码库存
  8543. sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  8544. UPDATE ICSInventoryLot SET Amount=(ISNULL(Amount,0)-(select Amount from
  8545. ICSInventoryLot where LotNo='{0}' AND WorkPoint='{1}')) WHERE LotNo='{0}' AND WorkPoint='{1}'
  8546. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity<0)
  8547. BEGIN
  8548. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  8549. RETURN
  8550. END";
  8551. sql = string.Format(sql, CurrentLotNo, WorkPoint, Quantity);
  8552. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  8553. {
  8554. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  8555. }
  8556. ///添加日志
  8557. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  8558. BEGIN
  8559. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  8560. RETURN
  8561. END
  8562. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  8563. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  8564. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  8565. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  8566. MTIME,WorkPoint,EATTRIBUTE1)
  8567. SELECT NEWID(),'{3}',b.TransCode,b.TransSequence,a.LotNo ,a.InvCode ,
  8568. '','',c.WarehouseCode,c.LocationCode,c.Quantity,
  8569. '','0','{4}','{5}','0','',
  8570. '','','',f.F_Account ,f.F_RealName ,
  8571. SYSDATETIME() ,a.WorkPoint ,''
  8572. FROM ICSInventoryLot a
  8573. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  8574. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  8575. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  8576. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  8577. ";
  8578. sql = string.Format(sql, CurrentLotNo, WorkPoint, User, Identification, TransType, BusinessCode);
  8579. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  8580. {
  8581. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  8582. }
  8583. ///添加日志
  8584. //sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  8585. // BEGIN
  8586. // RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  8587. // RETURN
  8588. // END
  8589. // INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  8590. // FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  8591. // Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  8592. // ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  8593. // MTIME,WorkPoint,EATTRIBUTE2)
  8594. // SELECT NEWID(),'{3}',b.TransCode,b.TransSequence,a.LotNo ,a.InvCode ,
  8595. // '','','','','{6}',
  8596. // '','0','{4}','{5}','0','',
  8597. // '','','',f.F_Account ,f.F_RealName ,
  8598. // SYSDATETIME() ,a.WorkPoint ,'{7}'
  8599. // FROM ICSInventoryLot a
  8600. // INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  8601. // --INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  8602. // INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  8603. // WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  8604. // ";
  8605. //sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransType, BusinessCode, Quantity, CurrentLotNo);
  8606. //if (!DBHelper.ExecuteNonQuery(sql, cmd))
  8607. //{
  8608. // throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  8609. //}
  8610. }
  8611. catch (Exception)
  8612. {
  8613. throw;
  8614. }
  8615. }
  8616. /// <summary>
  8617. /// 拆分
  8618. /// </summary>
  8619. /// <param name="Identification"></param>
  8620. /// <param name="LotNo"></param>
  8621. /// <param name="User"></param>
  8622. /// <param name="WorkPoint"></param>
  8623. /// <param name="TransType"></param>
  8624. /// <param name="BusinessCode"></param>
  8625. /// <param name="cmd"></param>
  8626. public static void WareHouseLotInfoSplit(string Identification, string LotNo, string CurrentLotNo, string Quantity, string User, string WorkPoint, string TransType,
  8627. string BusinessCode, SqlCommand cmd, Dictionary<string, string> language)
  8628. {
  8629. try
  8630. {
  8631. ///更新库存
  8632. string sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  8633. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity<0)
  8634. BEGIN
  8635. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  8636. RETURN
  8637. END";
  8638. sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  8639. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  8640. {
  8641. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  8642. }
  8643. #region 添加库存
  8644. //插入条码表
  8645. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  8646. BEGIN
  8647. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  8648. RETURN
  8649. END
  8650. IF EXISTS(SELECT a.LotNo FROM ICSInventoryLot a WHERE a.LotNo='{4}' AND a.WorkPoint='{1}')
  8651. BEGIN
  8652. RAISERROR('" + language.GetNameByCode("WMSAPIInfo172") + @"',16,1);
  8653. RETURN
  8654. END
  8655. INSERT INTO ICSInventoryLot(ID,LotNo,InvCode,ProductDate,ExpirationDate,Quantity,Amount,ExtensionID,Type,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1,EATTRIBUTE2,EATTRIBUTE3,EATTRIBUTE4,EATTRIBUTE5,EATTRIBUTE6,EATTRIBUTE7,EATTRIBUTE8,
  8656. EATTRIBUTE9,EATTRIBUTE10,EATTRIBUTE11,EATTRIBUTE12,EATTRIBUTE13,EATTRIBUTE14,EATTRIBUTE15,EATTRIBUTE16,EATTRIBUTE17,EATTRIBUTE18,EATTRIBUTE19,EATTRIBUTE20,
  8657. EATTRIBUTE21,EATTRIBUTE22,EATTRIBUTE23,EATTRIBUTE24,EATTRIBUTE25,EATTRIBUTE26,EATTRIBUTE27,EATTRIBUTE28,EATTRIBUTE29,EATTRIBUTE30)
  8658. 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,
  8659. a.EATTRIBUTE9,a.EATTRIBUTE10,a.EATTRIBUTE11,a.EATTRIBUTE12,a.EATTRIBUTE13,a.EATTRIBUTE14,a.EATTRIBUTE15,a.EATTRIBUTE16,a.EATTRIBUTE17,a.EATTRIBUTE18,a.EATTRIBUTE19,a.EATTRIBUTE20,
  8660. a.EATTRIBUTE21,a.EATTRIBUTE22,a.EATTRIBUTE23,a.EATTRIBUTE24,a.EATTRIBUTE25,a.EATTRIBUTE26,a.EATTRIBUTE27,a.EATTRIBUTE28,a.EATTRIBUTE29,a.EATTRIBUTE30
  8661. FROM ICSInventoryLot a
  8662. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  8663. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  8664. sql = string.Format(sql, LotNo, WorkPoint, User, Quantity, CurrentLotNo);
  8665. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  8666. {
  8667. throw new Exception(language.GetNameByCode("WMSAPIInfo173"));//"条码表写入失败!");
  8668. }
  8669. //插入条码单据表
  8670. sql = @"INSERT INTO ICSInventoryLotDetail(LotNo,TransCode,TransSequence,MUSER,MUSERName,MTIME,WorkPoint)
  8671. SELECT '{3}',b.TransCode,b.TransSequence,f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint
  8672. FROM ICSInventoryLot a
  8673. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  8674. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  8675. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  8676. sql = string.Format(sql, LotNo, WorkPoint, User, CurrentLotNo);
  8677. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  8678. {
  8679. throw new Exception(language.GetNameByCode("WMSAPIInfo174"));//"条码单据表写入失败!");
  8680. }
  8681. ///添加库存
  8682. sql = @"IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}')
  8683. BEGIN
  8684. RAISERROR('" + language.GetNameByCode("WMSAPIInfo164") + @"',16,1);
  8685. RETURN
  8686. END
  8687. INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1,freeze)
  8688. 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
  8689. FROM ICSInventoryLot a
  8690. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  8691. INNER JOIN ICSWareHouseLotInfo d ON a.EATTRIBUTE1=d.LotNo AND a.WorkPoint=d.WorkPoint
  8692. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  8693. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  8694. sql = string.Format(sql, CurrentLotNo, WorkPoint, User, Quantity);
  8695. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  8696. {
  8697. throw new Exception(language.GetNameByCode("WMSAPIInfo165"));
  8698. }
  8699. ///添加日志
  8700. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  8701. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  8702. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  8703. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  8704. MTIME,WorkPoint,EATTRIBUTE1)
  8705. SELECT NEWID(),'{3}',b.TransCode,b.TransSequence,a.LotNo ,a.InvCode ,
  8706. '','',c.WarehouseCode,c.LocationCode,c.Quantity,
  8707. '','0','{4}','{5}','0','',
  8708. '','','',f.F_Account ,f.F_RealName ,
  8709. SYSDATETIME() ,a.WorkPoint ,''
  8710. FROM ICSInventoryLot a
  8711. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  8712. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  8713. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  8714. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  8715. ";
  8716. sql = string.Format(sql, CurrentLotNo, WorkPoint, User, Identification, TransType, BusinessCode);
  8717. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  8718. {
  8719. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  8720. }
  8721. #endregion
  8722. }
  8723. catch (Exception)
  8724. {
  8725. throw;
  8726. }
  8727. }
  8728. /// <summary>
  8729. /// 拆分(奥美)
  8730. /// </summary>
  8731. /// <param name="Identification"></param>
  8732. /// <param name="LotNo"></param>
  8733. /// <param name="User"></param>
  8734. /// <param name="WorkPoint"></param>
  8735. /// <param name="TransType"></param>
  8736. /// <param name="BusinessCode"></param>
  8737. /// <param name="cmd"></param>
  8738. public static void AMWareHouseLotInfoSplit(string Identification, string LotNo, string CurrentLotNo, string Quantity, string User, string WorkPoint, string TransType,
  8739. string BusinessCode, SqlCommand cmd, Dictionary<string, string> language)
  8740. {
  8741. try
  8742. {
  8743. string amount = "";
  8744. //string sqql = @"select a.Amount FROM ICSInventoryLot a
  8745. // WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  8746. //sqql = string.Format(sqql, LotNo, WorkPoint);
  8747. //DataTable dtaa = DBHelper.SQlReturnData(sqql, cmd);
  8748. //amount = dtaa.Rows[0]["Amount"].ToString();
  8749. string cheksql = @"select d.EATTRIBUTE1 FROM ICSInventoryLot a
  8750. INNER JOIN ICSWareHouseLotInfo b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  8751. INNER JOIN ICSInventory d on a.InvCode=d.InvCode and a.WorkPoint=d.WorkPoint
  8752. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' and d.AmountEnable='1'";
  8753. cheksql = string.Format(cheksql, LotNo, WorkPoint);
  8754. DataTable dta = DBHelper.SQlReturnData(cheksql, cmd);
  8755. if (dta.Rows.Count > 0)
  8756. {
  8757. Quantity = (decimal.Parse(Quantity) * decimal.Parse(dta.Rows[0]["EATTRIBUTE1"].ToString())).ToString();
  8758. }
  8759. ///更新库存
  8760. string sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  8761. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity<0)
  8762. BEGIN
  8763. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  8764. RETURN
  8765. END";
  8766. sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  8767. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  8768. {
  8769. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  8770. }
  8771. #region 添加库存
  8772. //插入条码表
  8773. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  8774. BEGIN
  8775. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  8776. RETURN
  8777. END
  8778. IF EXISTS(SELECT a.LotNo FROM ICSInventoryLot a WHERE a.LotNo='{4}' AND a.WorkPoint='{1}')
  8779. BEGIN
  8780. RAISERROR('" + language.GetNameByCode("WMSAPIInfo172") + @"',16,1);
  8781. RETURN
  8782. END
  8783. INSERT INTO ICSInventoryLot(ID,LotNo,InvCode,ProductDate,ExpirationDate,Quantity,Amount,ExtensionID,Type,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  8784. 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
  8785. FROM ICSInventoryLot a
  8786. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  8787. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  8788. sql = string.Format(sql, LotNo, WorkPoint, User, Quantity, CurrentLotNo);
  8789. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  8790. {
  8791. throw new Exception(language.GetNameByCode("WMSAPIInfo173"));//"条码表写入失败!");
  8792. }
  8793. //插入条码单据表
  8794. sql = @"INSERT INTO ICSInventoryLotDetail(LotNo,TransCode,TransSequence,MUSER,MUSERName,MTIME,WorkPoint)
  8795. SELECT '{3}',b.TransCode,b.TransSequence,f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint
  8796. FROM ICSInventoryLot a
  8797. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  8798. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  8799. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  8800. sql = string.Format(sql, LotNo, WorkPoint, User, CurrentLotNo);
  8801. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  8802. {
  8803. throw new Exception(language.GetNameByCode("WMSAPIInfo174"));//"条码单据表写入失败!");
  8804. }
  8805. ///添加库存
  8806. sql = @"IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}')
  8807. BEGIN
  8808. RAISERROR('" + language.GetNameByCode("WMSAPIInfo164") + @"',16,1);
  8809. RETURN
  8810. END
  8811. INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  8812. SELECT NEWID(),a.LotNo ,d.WarehouseCode,d.LocationCode,a.InvCode ,'{3}',SYSDATETIME(),'0',f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint ,''
  8813. FROM ICSInventoryLot a
  8814. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  8815. INNER JOIN ICSWareHouseLotInfo d ON a.EATTRIBUTE1=d.LotNo AND a.WorkPoint=d.WorkPoint
  8816. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  8817. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  8818. sql = string.Format(sql, CurrentLotNo, WorkPoint, User, Quantity);
  8819. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  8820. {
  8821. throw new Exception(language.GetNameByCode("WMSAPIInfo165"));
  8822. }
  8823. ///添加日志
  8824. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  8825. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  8826. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  8827. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  8828. MTIME,WorkPoint,EATTRIBUTE1)
  8829. SELECT NEWID(),'{3}',b.TransCode,b.TransSequence,a.LotNo ,a.InvCode ,
  8830. '','',c.WarehouseCode,c.LocationCode,c.Quantity,
  8831. '','0','{4}','{5}','0','',
  8832. '','','',f.F_Account ,f.F_RealName ,
  8833. SYSDATETIME() ,a.WorkPoint ,''
  8834. FROM ICSInventoryLot a
  8835. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  8836. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  8837. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  8838. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  8839. ";
  8840. sql = string.Format(sql, CurrentLotNo, WorkPoint, User, Identification, TransType, BusinessCode);
  8841. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  8842. {
  8843. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  8844. }
  8845. #endregion
  8846. }
  8847. catch (Exception)
  8848. {
  8849. throw;
  8850. }
  8851. }
  8852. /// <summary>
  8853. /// 回写ERP ID
  8854. /// </summary>
  8855. /// <param name="TransType"></param>
  8856. /// <param name="SourceDetailID"></param>
  8857. /// <param name="Identification"></param>
  8858. /// <param name="ID"></param>
  8859. /// <param name="DetailID"></param>
  8860. /// <param name="Code"></param>
  8861. /// <param name="Sequence"></param>
  8862. /// <param name="cmd"></param>
  8863. 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)
  8864. {
  8865. string ERPupdate = string.Empty;
  8866. string NewERPupdate = string.Empty;
  8867. try
  8868. {
  8869. //采购入库
  8870. if (TransType == TransTypeEnum.PurchaseReceiveDoc.GetDescription())
  8871. {
  8872. ERPupdate = @"SELECT a.id
  8873. INTO #NewTempERP
  8874. FROM ICSWareHouseLotInfoLog a
  8875. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  8876. INNER JOIN ICSPurchaseOrder c ON b.TransCode=c.POCode AND b.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  8877. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  8878. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  8879. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  8880. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.ToWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  8881. WHERE c.PODetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  8882. 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, '') +
  8883. 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}'
  8884. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  8885. where ID in (select id from #NewTempERP)
  8886. DROP TABLE #NewTempERP";
  8887. }
  8888. //审核的到货单
  8889. else if (TransType == TransTypeEnum.DeliveryNotice.GetDescription())
  8890. {
  8891. ERPupdate = @"SELECT a.id
  8892. INTO #NewTempERP
  8893. FROM ICSWareHouseLotInfoLog a
  8894. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  8895. INNER JOIN ICSDeliveryNotice c ON b.TransCode=c.DNCode AND b.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  8896. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  8897. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  8898. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  8899. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.ToWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  8900. WHERE c.DNDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  8901. 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, '') +
  8902. 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}'
  8903. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  8904. where ID in (select id from #NewTempERP)
  8905. DROP TABLE #NewTempERP
  8906. ";
  8907. }
  8908. //采购拒收
  8909. else if (TransType == TransTypeEnum.PurchaseRejectDoc.GetDescription())
  8910. {
  8911. ERPupdate = @"SELECT a.id
  8912. INTO #NewTempERP
  8913. FROM ICSWareHouseLotInfoLog a
  8914. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  8915. INNER JOIN ICSDeliveryNotice c ON b.TransCode=c.DNCode AND b.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  8916. WHERE c.DNDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  8917. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  8918. where ID in (select id from #NewTempERP)
  8919. DROP TABLE #NewTempERP
  8920. ";
  8921. }
  8922. //审核的委外到货单
  8923. else if (TransType == TransTypeEnum.ODeliveryNotice.GetDescription())
  8924. {
  8925. ERPupdate = @"SELECT a.id
  8926. INTO #NewTempERP
  8927. FROM ICSWareHouseLotInfoLog a
  8928. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  8929. INNER JOIN ICSODeliveryNotice c ON b.TransCode=c.ODNCode AND b.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  8930. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  8931. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  8932. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  8933. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.ToWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  8934. WHERE c.ODNDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  8935. 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, '') +
  8936. 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}'
  8937. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  8938. where ID in (select id from #NewTempERP)
  8939. DROP TABLE #NewTempERP
  8940. ";
  8941. }
  8942. //委外拒收
  8943. else if (TransType == TransTypeEnum.OutsourcingRejectDoc.GetDescription())
  8944. {
  8945. ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  8946. FROM ICSWareHouseLotInfoLog a
  8947. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  8948. INNER JOIN ICSODeliveryNotice c ON b.TransCode=c.ODNCode AND b.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  8949. ";
  8950. }
  8951. //采购退货
  8952. else if (TransType == TransTypeEnum.PurchaseReceiveDoctNegative.GetDescription())
  8953. {
  8954. ERPupdate = @"SELECT a.id
  8955. INTO #NewTempERP
  8956. FROM ICSWareHouseLotInfoLog a
  8957. INNER JOIN ICSDeliveryNotice c ON a.TransCode=c.DNCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  8958. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  8959. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  8960. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  8961. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.ToWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  8962. WHERE c.DNDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}' --AND c.DNType='2'
  8963. 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, '') +
  8964. 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}'
  8965. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  8966. where ID in (select id from #NewTempERP)
  8967. DROP TABLE #NewTempERP
  8968. ";
  8969. }
  8970. //委外发料
  8971. else if (TransType == TransTypeEnum.OutsourcingIssueDoc.GetDescription())
  8972. {
  8973. ERPupdate = @"SELECT a.id
  8974. INTO #NewTempERP
  8975. FROM ICSWareHouseLotInfoLog a
  8976. INNER JOIN ICSOutsourcingOrder y ON a.TransCode=y.OOCode AND a.WorkPoint=y.WorkPoint
  8977. INNER JOIN ICSOOPick x ON x.OODetailID=y.OODetailID AND a.TransSequence=y.Sequence+'~'+x.Sequence AND x.WorkPoint=y.WorkPoint
  8978. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  8979. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  8980. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  8981. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  8982. WHERE x.PickID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  8983. 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, '') +
  8984. 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}'
  8985. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  8986. where ID in (select id from #NewTempERP)
  8987. DROP TABLE #NewTempERP
  8988. ";
  8989. }
  8990. //委外退料
  8991. else if (TransType == TransTypeEnum.ICSOutsourcingIssueDoNegative.GetDescription()
  8992. || TransType == TransTypeEnum.ICSOutsourcingIssueDoNegativeApply.GetDescription()
  8993. || TransType == TransTypeEnum.ICSOutsourcingIssueDoNegativeIssue.GetDescription())
  8994. {
  8995. ERPupdate = @"--根据退料单退料
  8996. UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  8997. FROM ICSWareHouseLotInfoLog a
  8998. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  8999. INNER JOIN ICSOApplyNegDetail c ON b.TransCode=c.OApplyNegCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  9000. INNER JOIN ICSOApplyNeg d ON c.OApplyNegCode=d.OApplyNegCode AND c.WorkPoint=d.WorkPoint
  9001. Left JOIN ICSOIssue m ON (CASE WHEN d.Type='3' THEN c.SourceDetailID ELSE '' END)=m.IssueDetailID AND c.WorkPoint=m.WorkPoint
  9002. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  9003. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  9004. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  9005. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  9006. WHERE ISNULL(m.ApplyDetailID,ISNULL(m.PickID, c.SourceDetailID))='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  9007. 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, '') +
  9008. 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}'
  9009. --退-
  9010. UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  9011. FROM ICSWareHouseLotInfoLog a
  9012. INNER JOIN ICSWareHouseLotInfoLog b ON a.LogID=b.ID AND a.WorkPoint=b.WorkPoint
  9013. INNER JOIN ICSOutsourcingOrder y ON b.TransCode=y.OOCode AND b.WorkPoint=y.WorkPoint
  9014. INNER JOIN ICSOOPick x ON x.OODetailID=y.OODetailID AND x.WorkPoint=y.WorkPoint AND b.TransSequence = y.Sequence + '~' + x.Sequence
  9015. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  9016. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  9017. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  9018. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  9019. WHERE x.PickID='{0}' AND a.Identification='{1}' AND a.ERPUpload='0' AND a.BusinessCode ='{7}'
  9020. 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, '') +
  9021. 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}'
  9022. --退-
  9023. UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  9024. FROM ICSWareHouseLotInfoLog a
  9025. INNER JOIN ICSWareHouseLotInfoLog b ON a.LogID=b.ID AND a.WorkPoint=b.WorkPoint
  9026. INNER JOIN ICSOApply z ON b.TransCode=z.ApplyCode AND b.TransSequence=z.Sequence AND b.WorkPoint=z.WorkPoint
  9027. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  9028. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  9029. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  9030. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  9031. WHERE z.ApplyDetailID='{0}' AND a.Identification='{1}' AND a.ERPUpload='0' AND a.BusinessCode ='{7}'
  9032. 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, '') +
  9033. 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}'
  9034. --退-
  9035. UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  9036. FROM ICSWareHouseLotInfoLog a
  9037. INNER JOIN ICSWareHouseLotInfoLog b ON a.LogID=b.ID AND a.WorkPoint=b.WorkPoint
  9038. INNER JOIN ICSOIssue m ON b.TransCode=m.IssueCode AND b.TransSequence=m.Sequence AND b.WorkPoint=m.WorkPoint
  9039. LEFT JOIN ICSOOPick x ON m.PickID=x.PickID AND m.WorkPoint=x.WorkPoint
  9040. LEFT JOIN ICSOutsourcingOrder y ON x.OODetailID=y.OODetailID AND x.WorkPoint=y.WorkPoint
  9041. LEFT JOIN ICSOApply z ON m.ApplyDetailID=z.ApplyDetailID AND m.WorkPoint=z.WorkPoint
  9042. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  9043. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  9044. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  9045. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  9046. WHERE ISNULL(m.ApplyDetailID, m.PickID)='{0}' AND a.Identification='{1}' AND a.ERPUpload='0' AND a.BusinessCode ='{7}'
  9047. 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, '') +
  9048. 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}'
  9049. ";
  9050. }
  9051. //委外入库
  9052. else if (TransType == TransTypeEnum.OutsourcingReceiveDoc.GetDescription())
  9053. {
  9054. ERPupdate = @"SELECT a.id
  9055. INTO #NewTempERP
  9056. FROM ICSWareHouseLotInfoLog a
  9057. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  9058. INNER JOIN ICSOutsourcingOrder c ON b.TransCode=c.OOCode AND b.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  9059. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  9060. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  9061. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  9062. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.ToWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  9063. WHERE c.OODetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  9064. --ISNULL(a.ToWarehouseCode, '') +
  9065. 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, '') +
  9066. 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}'
  9067. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  9068. where ID in (select id from #NewTempERP)
  9069. DROP TABLE #NewTempERP";
  9070. }
  9071. //委外退货
  9072. else if (TransType == TransTypeEnum.OutsourcingReturnBack.GetDescription())
  9073. {
  9074. ERPupdate = @"SELECT a.id
  9075. INTO #NewTempERP
  9076. FROM ICSWareHouseLotInfoLog a
  9077. INNER JOIN ICSODeliveryNotice c ON a.TransCode=c.ODNCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  9078. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  9079. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  9080. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  9081. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  9082. WHERE c.ODNDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'--AND c.ODNType='2'
  9083. 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, '') +
  9084. 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}'
  9085. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  9086. where ID in (select id from #NewTempERP)
  9087. DROP TABLE #NewTempERP
  9088. ";
  9089. }
  9090. //生产发料
  9091. else if (TransType == TransTypeEnum.MOIssueDoc.GetDescription()|| TransType == TransTypeEnum.JHMOIssueDoc.GetDescription())
  9092. {
  9093. //ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  9094. // FROM ICSWareHouseLotInfoLog a
  9095. // INNER JOIN ICSMO y ON a.TransCode=y.MOCode AND a.WorkPoint=y.WorkPoint
  9096. // INNER JOIN ICSMOPick x ON x.MODetailID=y.MODetailID AND a.TransSequence=y.Sequence+'~'+x.Sequence AND x.WorkPoint=y.WorkPoint
  9097. // INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  9098. // INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  9099. // INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  9100. // LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  9101. // WHERE x.PickID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  9102. // 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, '') +
  9103. // 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}'
  9104. // ";
  9105. ERPupdate = @"SELECT a.id
  9106. INTO #NewTempERP
  9107. FROM ICSWareHouseLotInfoLog a
  9108. INNER JOIN ICSMO y ON a.TransCode=y.MOCode AND a.WorkPoint=y.WorkPoint
  9109. INNER JOIN ICSMOPick x ON x.MODetailID=y.MODetailID AND a.TransSequence=y.Sequence+'~'+x.Sequence AND x.WorkPoint=y.WorkPoint
  9110. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  9111. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  9112. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  9113. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  9114. WHERE x.PickID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  9115. 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, '') +
  9116. 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}'
  9117. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  9118. where ID in (select id from #NewTempERP)
  9119. DROP TABLE #NewTempERP";
  9120. }
  9121. //生产退料
  9122. else if (TransType == TransTypeEnum.MOIssueDocNegative.GetDescription()
  9123. || TransType == TransTypeEnum.MOIssueDocNegativeApply.GetDescription()
  9124. || TransType == TransTypeEnum.MOIssueDocNegativeIssue.GetDescription())
  9125. {
  9126. ERPupdate = @"--根据退料单退料
  9127. UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  9128. FROM ICSWareHouseLotInfoLog a
  9129. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  9130. INNER JOIN ICSMOApplyNegDetail c ON b.TransCode=c.ApplyNegCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  9131. INNER JOIN ICSMOApplyNeg d ON c.ApplyNegCode=d.ApplyNegCode AND c.WorkPoint=d.WorkPoint
  9132. left JOIN ICSMOIssue m ON (CASE WHEN d.Type='3' THEN c.SourceDetailID ELSE 0 END)=m.IssueDetailID AND c.WorkPoint=m.WorkPoint
  9133. WHERE ISNULL(m.ApplyDetailID, ISNULL(m.PickID, c.SourceDetailID))='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  9134. --退-
  9135. UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  9136. FROM ICSWareHouseLotInfoLog a
  9137. INNER JOIN ICSWareHouseLotInfoLog b ON a.LogID=b.ID AND a.WorkPoint=b.WorkPoint
  9138. INNER JOIN ICSMO y ON b.TransCode=y.MOCode AND b.WorkPoint=y.WorkPoint
  9139. INNER JOIN ICSMOPick x ON x.MODetailID=y.MODetailID AND x.WorkPoint=y.WorkPoint AND b.TransSequence = y.Sequence + '~' + x.Sequence
  9140. WHERE x.PickID='{0}' AND a.Identification='{1}' AND a.ERPUpload='0' AND a.BusinessCode ='{7}'
  9141. --退-
  9142. UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  9143. FROM ICSWareHouseLotInfoLog a
  9144. INNER JOIN ICSWareHouseLotInfoLog b ON a.LogID=b.ID AND a.WorkPoint=b.WorkPoint
  9145. INNER JOIN ICSMOApply z ON b.TransCode=z.ApplyCode AND b.TransSequence=z.Sequence AND b.WorkPoint=z.WorkPoint
  9146. WHERE z.ApplyDetailID='{0}' AND a.Identification='{1}' AND a.ERPUpload='0' AND a.BusinessCode ='{7}'
  9147. --退-
  9148. UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  9149. FROM ICSWareHouseLotInfoLog a
  9150. INNER JOIN ICSWareHouseLotInfoLog b ON a.LogID=b.ID AND a.WorkPoint=b.WorkPoint
  9151. INNER JOIN ICSMOIssue m ON b.TransCode=m.IssueCode AND b.TransSequence=m.Sequence AND b.WorkPoint=m.WorkPoint
  9152. LEFT JOIN ICSMOPick x ON m.PickID=x.PickID AND m.WorkPoint=x.WorkPoint
  9153. LEFT JOIN ICSMO y ON x.MODetailID=y.MODetailID AND x.WorkPoint=y.WorkPoint
  9154. LEFT JOIN ICSMOApply z ON m.ApplyDetailID=z.ApplyDetailID AND m.WorkPoint=z.WorkPoint
  9155. WHERE ISNULL(m.ApplyDetailID, m.PickID)='{0}' AND a.Identification='{1}' AND a.ERPUpload='0' AND a.BusinessCode ='{7}'
  9156. ";
  9157. }
  9158. //生产入库
  9159. else if (TransType == TransTypeEnum.ManufactureReceiveDoc.GetDescription())
  9160. {
  9161. //ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  9162. // FROM ICSWareHouseLotInfoLog a
  9163. // INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  9164. // INNER JOIN ICSMO c ON b.TransCode=c.MOCode AND b.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  9165. // INNER JOIN ICSExtension docext ON docext.ID=c.ExtensionID AND docext.WorkPoint=c.WorkPoint
  9166. // INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  9167. // INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  9168. // INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  9169. // LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  9170. // WHERE c.MODetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  9171. // and (ISNULL(a.fromwarehousecode, '')
  9172. // + CASE WHEN ISNULL(docext.ProjectCode,'')!='' Then ISNULL(ext.ProjectCode, '') ELSE '' END
  9173. // + CASE WHEN (invBat.BatchEnable IS NULL AND ISNULL(inv.BatchEnable, '0')='1') OR ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END
  9174. // + CASE WHEN ISNULL(docext.Version,'')!='' Then ISNULL(ext.Version, '') ELSE '' END
  9175. // + CASE WHEN ISNULL(docext.Brand,'')!='' THEN ISNULL(ext.Brand, '') ELSE '' END
  9176. // + CASE WHEN ISNULL(docext.cFree1,'')!='' THEN ISNULL(ext.cFree1, '') ELSE '' END
  9177. // + CASE WHEN ISNULL(docext.cFree2,'')!='' THEN ISNULL(ext.cFree2, '') ELSE '' END
  9178. // + CASE WHEN ISNULL(docext.cFree3,'')!='' THEN ISNULL(ext.cFree3, '') ELSE '' END
  9179. // + CASE WHEN ISNULL(docext.cFree4,'')!='' THEN ISNULL(ext.cFree4, '') ELSE '' END
  9180. // + CASE WHEN ISNULL(docext.cFree5,'')!='' THEN ISNULL(ext.cFree5, '') ELSE '' END
  9181. // + CASE WHEN ISNULL(docext.cFree6,'')!='' THEN ISNULL(ext.cFree6, '') ELSE '' END
  9182. // + CASE WHEN ISNULL(docext.cFree7,'')!='' THEN ISNULL(ext.cFree7, '') ELSE '' END
  9183. // + CASE WHEN ISNULL(docext.cFree8,'')!='' THEN ISNULL(ext.cFree8, '') ELSE '' END
  9184. // + CASE WHEN ISNULL(docext.cFree9,'')!='' THEN ISNULL(ext.cFree9, '') ELSE '' END
  9185. // + CASE WHEN ISNULL(docext.cFree10,'')!='' THEN ISNULL(ext.cFree10, '') ELSE '' END)='{6}'
  9186. //";
  9187. ERPupdate = @"SELECT a.id
  9188. INTO #NewTempERP
  9189. FROM ICSWareHouseLotInfoLog a
  9190. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  9191. INNER JOIN ICSMO c ON b.TransCode=c.MOCode AND b.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  9192. INNER JOIN ICSExtension docext ON docext.ID=c.ExtensionID AND docext.WorkPoint=c.WorkPoint
  9193. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  9194. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  9195. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  9196. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.ToWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  9197. WHERE c.MODetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  9198. and (ISNULL(a.ToWarehouseCode, '')
  9199. + CASE WHEN ISNULL(docext.ProjectCode,'')!='' Then ISNULL(ext.ProjectCode, '') ELSE '' END
  9200. + CASE WHEN (invBat.BatchEnable IS NULL AND ISNULL(inv.BatchEnable, '0')='1') OR ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END
  9201. + CASE WHEN ISNULL(docext.Version,'')!='' Then ISNULL(ext.Version, '') ELSE '' END
  9202. + CASE WHEN ISNULL(docext.Brand,'')!='' THEN ISNULL(ext.Brand, '') ELSE '' END
  9203. + CASE WHEN ISNULL(docext.cFree1,'')!='' THEN ISNULL(ext.cFree1, '') ELSE '' END
  9204. + CASE WHEN ISNULL(docext.cFree2,'')!='' THEN ISNULL(ext.cFree2, '') ELSE '' END
  9205. + CASE WHEN ISNULL(docext.cFree3,'')!='' THEN ISNULL(ext.cFree3, '') ELSE '' END
  9206. + CASE WHEN ISNULL(docext.cFree4,'')!='' THEN ISNULL(ext.cFree4, '') ELSE '' END
  9207. + CASE WHEN ISNULL(docext.cFree5,'')!='' THEN ISNULL(ext.cFree5, '') ELSE '' END
  9208. + CASE WHEN ISNULL(docext.cFree6,'')!='' THEN ISNULL(ext.cFree6, '') ELSE '' END
  9209. + CASE WHEN ISNULL(docext.cFree7,'')!='' THEN ISNULL(ext.cFree7, '') ELSE '' END
  9210. + CASE WHEN ISNULL(docext.cFree8,'')!='' THEN ISNULL(ext.cFree8, '') ELSE '' END
  9211. + CASE WHEN ISNULL(docext.cFree9,'')!='' THEN ISNULL(ext.cFree9, '') ELSE '' END
  9212. + CASE WHEN ISNULL(docext.cFree10,'')!='' THEN ISNULL(ext.cFree10, '') ELSE '' END)='{6}'
  9213. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  9214. where ID in (select id from #NewTempERP)
  9215. DROP TABLE #NewTempERP
  9216. ";
  9217. }
  9218. //开立的生产入库单
  9219. else if (TransType == TransTypeEnum.ManufactureReceive.GetDescription())
  9220. {
  9221. ERPupdate = @"SELECT a.id
  9222. INTO #NewTempERP
  9223. FROM ICSWareHouseLotInfoLog a
  9224. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  9225. INNER JOIN ICSManufactureReceive c ON b.TransCode=c.RCVCode AND b.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  9226. WHERE c.RCVID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND c.Type='1' AND a.BusinessCode ='{7}'
  9227. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  9228. where ID in (select id from #NewTempERP)
  9229. DROP TABLE #NewTempERP
  9230. ";
  9231. }
  9232. //销售出库
  9233. else if (TransType == TransTypeEnum.SalesShipmentDoc.GetDescription())
  9234. {
  9235. ERPupdate = @"SELECT a.id
  9236. INTO #NewTempERP
  9237. FROM ICSWareHouseLotInfoLog a
  9238. INNER JOIN ICSSDN c ON a.TransCode=c.SDNCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  9239. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  9240. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  9241. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  9242. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  9243. WHERE c.SDNDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND c.Type='1' AND a.BusinessCode ='{7}'
  9244. 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, '') +
  9245. 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}'
  9246. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  9247. where ID in (select id from #NewTempERP)
  9248. DROP TABLE #NewTempERP
  9249. ";
  9250. }
  9251. //销售退货
  9252. else if (TransType == TransTypeEnum.SalesShipmentDocNegative.GetDescription())
  9253. {
  9254. ERPupdate = @"SELECT a.id
  9255. INTO #NewTempERP
  9256. FROM ICSWareHouseLotInfoLog a
  9257. INNER JOIN ICSSDN c ON a.TransCode=c.SDNCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  9258. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  9259. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  9260. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  9261. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.ToWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  9262. WHERE c.SDNDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND c.Type='2' AND a.BusinessCode ='{7}'
  9263. 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, '') +
  9264. 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}'
  9265. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  9266. where ID in (select id from #NewTempERP)
  9267. DROP TABLE #NewTempERP";
  9268. }
  9269. //返工工单
  9270. else if (TransType == TransTypeEnum.ReWorkReceiveMo.GetDescription())
  9271. {
  9272. ERPupdate = @"SELECT a.id
  9273. INTO #NewTempERP
  9274. FROM ICSWareHouseLotInfoLog a
  9275. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  9276. INNER JOIN ICSMO c ON b.TransCode=c.MOCode AND b.WorkPoint=c.WorkPoint
  9277. INNER JOIN ICSMOPick d ON d.MODetailID=c.MODetailID AND d.WorkPoint=c.WorkPoint and b.TransSequence=c.Sequence+'-'+d.Sequence
  9278. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  9279. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  9280. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  9281. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  9282. WHERE d.PickID='{3}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  9283. 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, '') +
  9284. 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}'
  9285. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  9286. where ID in (select id from #NewTempERP)
  9287. DROP TABLE #NewTempERP
  9288. ";
  9289. }
  9290. //一步调拨
  9291. else if (TransType == TransTypeEnum.OneStepTransferDocIn.GetDescription())
  9292. {
  9293. ERPupdate = @"SELECT a.id
  9294. INTO #NewTempERP
  9295. FROM ICSWareHouseLotInfoLog a
  9296. INNER JOIN ICSTransfer c ON a.TransCode=c.TransferNO AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  9297. WHERE c.TransferID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND c.Type='1' AND a.BusinessCode ='{7}'
  9298. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  9299. where ID in (select id from #NewTempERP)
  9300. DROP TABLE #NewTempERP
  9301. ";
  9302. }
  9303. //调拨
  9304. else if (TransType == TransTypeEnum.OneStepTransferDocIn.GetDescription())
  9305. {
  9306. ERPupdate = @"SELECT a.id
  9307. INTO #NewTempERP
  9308. FROM ICSWareHouseLotInfoLog a
  9309. INNER JOIN ICSTransfer c ON a.TransCode=c.TransferNO AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  9310. WHERE c.TransferID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND c.Type='1' AND a.BusinessCode ='{7}'
  9311. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  9312. where ID in (select id from #NewTempERP)
  9313. DROP TABLE #NewTempERP
  9314. ";
  9315. }
  9316. //无源头调拨
  9317. else if (TransType == TransTypeEnum.StepNoTransferDocIn.GetDescription())
  9318. {
  9319. ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  9320. FROM ICSWareHouseLotInfoLog a
  9321. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  9322. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  9323. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  9324. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  9325. WHERE a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode='70'
  9326. 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, '') +
  9327. 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}'
  9328. ";
  9329. }
  9330. //两步调出
  9331. else if (TransType == TransTypeEnum.TwoStepTransferDocOut.GetDescription())
  9332. {
  9333. ERPupdate = @"SELECT a.id
  9334. INTO #NewTempERP
  9335. FROM ICSWareHouseLotInfoLog a
  9336. INNER JOIN ICSOtherOut c ON a.TransCode=c.OutCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  9337. INNER JOIN ICSTransfer d ON c.TransferDetailID=d.TransferDetailID AND c.WorkPoint=d.WorkPoint
  9338. WHERE c.OutID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  9339. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  9340. where ID in (select id from #NewTempERP)
  9341. DROP TABLE #NewTempERP
  9342. ";
  9343. }
  9344. //两步调入
  9345. else if (TransType == TransTypeEnum.TwoStepTransferDocIn.GetDescription())
  9346. {
  9347. ERPupdate = @"SELECT a.id
  9348. INTO #NewTempERP
  9349. FROM ICSWareHouseLotInfoLog a
  9350. INNER JOIN ICSOtherIn b ON a.TransCode=b.InCode AND a.TransSequence=b.Sequence AND a.WorkPoint=b.WorkPoint
  9351. INNER JOIN ICSTransfer c ON b.TransferDetailID=c.TransferDetailID AND b.WorkPoint=c.WorkPoint
  9352. WHERE b.InID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  9353. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  9354. where ID in (select id from #NewTempERP)
  9355. DROP TABLE #NewTempERP
  9356. ";
  9357. }
  9358. //销售退货-原条码
  9359. else if (TransType == TransTypeEnum.SalesReturnBack.GetDescription())
  9360. {
  9361. ERPupdate = @"SELECT a.id
  9362. INTO #NewTempERP
  9363. FROM ICSWareHouseLotInfoLog a
  9364. INNER JOIN ICSSDN c ON a.TransCode=c.SDNCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  9365. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  9366. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  9367. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  9368. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.ToWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  9369. WHERE c.SDNDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND c.Type='2' AND a.BusinessCode ='{7}'
  9370. 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, '') +
  9371. 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}'
  9372. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  9373. where ID in (select id from #NewTempERP)
  9374. DROP TABLE #NewTempERP";
  9375. }
  9376. //其他出库
  9377. else if (TransType == TransTypeEnum.OtherOutDoc.GetDescription())
  9378. {
  9379. ERPupdate = @"SELECT a.id
  9380. INTO #NewTempERP
  9381. FROM ICSWareHouseLotInfoLog a
  9382. INNER JOIN ICSOtherOut c ON a.TransCode=c.OutCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  9383. WHERE c.OutID='{0}' AND a.Identification='{1}' AND a.ERPUpload='0' AND a.BusinessCode ='{7}'
  9384. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  9385. where ID in (select id from #NewTempERP)
  9386. DROP TABLE #NewTempERP
  9387. ";
  9388. }
  9389. //其他入库
  9390. else if (TransType == TransTypeEnum.OtherInDoc.GetDescription())
  9391. {
  9392. ERPupdate = @"SELECT a.id
  9393. INTO #NewTempERP
  9394. FROM ICSWareHouseLotInfoLog a
  9395. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  9396. INNER JOIN ICSOtherIn c ON b.TransCode=c.InCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  9397. WHERE c.InID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  9398. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  9399. where ID in (select id from #NewTempERP)
  9400. DROP TABLE #NewTempERP
  9401. ";
  9402. }
  9403. //采购入库-入库单
  9404. else if (TransType == TransTypeEnum.PurchaseReceiveRevDoc.GetDescription())
  9405. {
  9406. ERPupdate = @"SELECT a.id
  9407. INTO #NewTempERP
  9408. FROM ICSWareHouseLotInfoLog a
  9409. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  9410. INNER JOIN ICSPurchaseReceive c ON b.TransCode=c.RcvCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  9411. WHERE c.RcvID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  9412. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  9413. where ID in (select id from #NewTempERP)
  9414. DROP TABLE #NewTempERP
  9415. ";
  9416. }
  9417. //委外入库-入库单
  9418. else if (TransType == TransTypeEnum.OutsourcingReceiveRevDoc.GetDescription())
  9419. {
  9420. ERPupdate = @"SELECT a.id
  9421. INTO #NewTempERP
  9422. FROM ICSWareHouseLotInfoLog a
  9423. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  9424. INNER JOIN ICSOutsourcingReceive c ON b.TransCode=c.RcvCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  9425. WHERE c.RcvID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  9426. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  9427. where ID in (select id from #NewTempERP)
  9428. DROP TABLE #NewTempERP
  9429. ";
  9430. }
  9431. //鑫隽渊委外入库-入库单
  9432. else if (TransType == TransTypeEnum.OutsourcingReceiveRevXJYDoc.GetDescription())
  9433. {
  9434. ERPupdate = @"SELECT a.id
  9435. INTO #NewTempERP
  9436. FROM ICSWareHouseLotInfoLog a
  9437. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  9438. INNER JOIN ICSOutsourcingReceive c ON b.TransCode=c.RcvCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  9439. WHERE c.RcvID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  9440. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  9441. where ID in (select id from #NewTempERP)
  9442. DROP TABLE #NewTempERP
  9443. ";
  9444. }
  9445. //拆卸单
  9446. else if (TransType == TransTypeEnum.DisassemblyDoc.GetDescription())
  9447. {
  9448. ERPupdate = @"UPDATE d set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  9449. FROM ICSWareHouseLotInfoLog a
  9450. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  9451. INNER JOIN ICSDisassemblyDoc c ON b.TransCode=c.DABDOCCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  9452. INNER JOIN ICSWareHouseLotInfoLog d ON b.TransCode=d.TransCode AND d.TransSequence='1' AND b.WorkPoint=d.WorkPoint
  9453. WHERE c.DABDOCID='{0}' AND a.Identification='{1}' AND d.ERPUpload='0' AND a.BusinessCode ='{7}'
  9454. UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  9455. FROM ICSWareHouseLotInfoLog a
  9456. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  9457. INNER JOIN ICSDisassemblyDoc c ON b.TransCode=c.DABDOCCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  9458. WHERE c.DABDOCID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND c.DABDOCType='2' AND a.BusinessCode ='{7}'
  9459. ";
  9460. }
  9461. //领料申请单
  9462. else if (TransType == TransTypeEnum.MOApply.GetDescription())
  9463. {
  9464. //ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  9465. // FROM ICSWareHouseLotInfoLog a
  9466. // INNER JOIN ICSMOApply c ON a.TransCode=c.ApplyCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  9467. // INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  9468. // INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  9469. // INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  9470. // LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  9471. // WHERE c.ApplyDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  9472. // 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, '') +
  9473. // 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}'
  9474. // ";
  9475. ERPupdate = @"SELECT a.id
  9476. INTO #NewTempERP
  9477. FROM ICSWareHouseLotInfoLog a
  9478. INNER JOIN ICSMOApply c ON a.TransCode=c.ApplyCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  9479. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  9480. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  9481. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  9482. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  9483. WHERE c.ApplyDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  9484. 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, '') +
  9485. 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}'
  9486. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  9487. where ID in (select id from #NewTempERP)
  9488. DROP TABLE #NewTempERP
  9489. ";
  9490. }
  9491. //补料申请单
  9492. else if (TransType == TransTypeEnum.MOReplenishment.GetDescription())
  9493. {
  9494. //ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  9495. // FROM ICSWareHouseLotInfoLog a
  9496. // INNER JOIN ICSMOApply c ON a.TransCode=c.ApplyCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  9497. // INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  9498. // INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  9499. // INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  9500. // LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  9501. // WHERE c.ApplyDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  9502. // 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, '') +
  9503. // 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}'
  9504. // ";
  9505. ERPupdate = @"SELECT a.id
  9506. INTO #NewTempERP
  9507. FROM ICSWareHouseLotInfoLog a
  9508. INNER JOIN ICSMOReplenishment c ON a.TransCode=c.ReplenishmentCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  9509. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  9510. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  9511. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  9512. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  9513. WHERE c.ReplenishmentDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  9514. 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, '') +
  9515. 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}'
  9516. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  9517. where ID in (select id from #NewTempERP)
  9518. DROP TABLE #NewTempERP
  9519. ";
  9520. }
  9521. //委外领料申请单
  9522. else if (TransType == TransTypeEnum.OOApply.GetDescription())
  9523. {
  9524. //ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  9525. // FROM ICSWareHouseLotInfoLog a
  9526. // INNER JOIN ICSOApply c ON a.TransCode=c.ApplyCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  9527. // INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  9528. // INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  9529. // INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  9530. // LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  9531. // WHERE c.ApplyDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  9532. // 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, '') +
  9533. // 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}'
  9534. // ";
  9535. ERPupdate = @"SELECT a.id
  9536. INTO #NewTempERP
  9537. FROM ICSWareHouseLotInfoLog a
  9538. INNER JOIN ICSOApply c ON a.TransCode=c.ApplyCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  9539. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  9540. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  9541. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  9542. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  9543. WHERE c.ApplyDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  9544. 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, '') +
  9545. 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}'
  9546. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  9547. where ID in (select id from #NewTempERP)
  9548. DROP TABLE #NewTempERP
  9549. ";
  9550. }
  9551. //开立材料出库
  9552. else if (TransType == TransTypeEnum.MOIssue.GetDescription())
  9553. {
  9554. ERPupdate = @"SELECT a.id
  9555. INTO #NewTempERP
  9556. FROM ICSWareHouseLotInfoLog a
  9557. INNER JOIN ICSMOIssue c ON a.TransCode=c.IssueCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  9558. WHERE c.IssueID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  9559. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  9560. where ID in (select id from #NewTempERP)
  9561. DROP TABLE #NewTempERP
  9562. ";
  9563. }
  9564. //开立委外材料出库
  9565. else if (TransType == TransTypeEnum.OOIssue.GetDescription())
  9566. {
  9567. ERPupdate = @"SELECT a.id
  9568. INTO #NewTempERP
  9569. FROM ICSWareHouseLotInfoLog a
  9570. INNER JOIN ICSMOIssue c ON a.TransCode=c.IssueCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  9571. WHERE c.IssueID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  9572. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  9573. where ID in (select id from #NewTempERP)
  9574. DROP TABLE #NewTempERP
  9575. ";
  9576. }
  9577. //开立红字入库单
  9578. else if (TransType == TransTypeEnum.PurchaseReceive.GetDescription())
  9579. {
  9580. ERPupdate = @"SELECT a.id
  9581. INTO #NewTempERP
  9582. FROM ICSWareHouseLotInfoLog a
  9583. INNER JOIN ICSPurchaseReceive c ON a.TransCode=c.RCVCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  9584. WHERE c.RCVID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND c.Type='2' AND a.BusinessCode ='{7}'
  9585. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  9586. where ID in (select id from #NewTempERP)
  9587. DROP TABLE #NewTempERP
  9588. ";
  9589. }
  9590. //开立委外红字入库单
  9591. else if (TransType == TransTypeEnum.OutsourcingReceiveDocNegative.GetDescription())
  9592. {
  9593. ERPupdate = @"SELECT a.id
  9594. INTO #NewTempERP
  9595. FROM ICSWareHouseLotInfoLog a
  9596. INNER JOIN ICSOutsourcingReceive c ON a.TransCode=c.RCVCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  9597. WHERE c.RCVID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND c.Type='2' AND a.BusinessCode ='{7}'
  9598. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  9599. where ID in (select id from #NewTempERP)
  9600. DROP TABLE #NewTempERP
  9601. ";
  9602. }
  9603. //借用
  9604. else if (TransType == TransTypeEnum.BrrowDoc.GetDescription())
  9605. {
  9606. ERPupdate = @"SELECT a.id
  9607. INTO #NewTempERP
  9608. FROM ICSWareHouseLotInfoLog a
  9609. INNER JOIN ICSBrrow c ON a.TransCode=c.BrrowCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  9610. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  9611. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  9612. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  9613. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  9614. WHERE c.BrrowDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  9615. 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, '') +
  9616. 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}'
  9617. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  9618. where ID in (select id from #NewTempERP)
  9619. DROP TABLE #NewTempERP";
  9620. }
  9621. //归还
  9622. else if (TransType == TransTypeEnum.ReturnDoc.GetDescription())
  9623. {
  9624. ERPupdate = @"SELECT a.id
  9625. INTO #NewTempERP
  9626. FROM ICSWareHouseLotInfoLog a
  9627. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  9628. INNER JOIN ICSReturn c ON b.TransCode=c.ReturnCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  9629. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  9630. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  9631. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  9632. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.ToWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  9633. WHERE c.ReturnDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  9634. 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, '') +
  9635. 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}'
  9636. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  9637. where ID in (select id from #NewTempERP)
  9638. DROP TABLE #NewTempERP";
  9639. }
  9640. //销售出库-出库单
  9641. else if (TransType == TransTypeEnum.SalesShipmentOutDoc.GetDescription())
  9642. {
  9643. ERPupdate = @"SELECT a.id
  9644. INTO #NewTempERP
  9645. FROM ICSWareHouseLotInfoLog a
  9646. INNER JOIN ICSSSD c ON a.TransCode=c.SSDCOde AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  9647. WHERE c.SSDID='{0}' AND a.Identification='{1}' AND a.ERPUpload='0' AND a.BusinessCode ='{7}'
  9648. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  9649. where ID in (select id from #NewTempERP)
  9650. DROP TABLE #NewTempERP
  9651. ";
  9652. }
  9653. ERPupdate = string.Format(ERPupdate, SourceDetailID, Identification, ID, DetailID, Code, Sequence, col, BusinessCode);
  9654. if (!DBHelper.ExecuteNonQuery(ERPupdate, cmd))
  9655. {
  9656. throw new Exception(TransType + language.GetNameByCode("WMSAPIInfo175"));//"回写日志失败!");
  9657. }
  9658. }
  9659. catch (Exception ex)
  9660. {
  9661. log.Debug(ex.ToString());
  9662. log.Debug(TransType + Environment.NewLine + ERPupdate);
  9663. }
  9664. }
  9665. /// <summary>
  9666. /// 倒冲时子件已领数量回写
  9667. /// </summary>
  9668. public static void DetailQTYUpdate()
  9669. {
  9670. }
  9671. /// <summary>
  9672. /// 生成条码
  9673. /// </summary>
  9674. /// <param name="LotNo"></param>
  9675. /// <param name="Quantity"></param>
  9676. /// <param name="TransCode"></param>
  9677. /// <param name="TransSequence"></param>
  9678. /// <param name="WorkPoint"></param>
  9679. /// <param name="Identification"></param>
  9680. /// <param name="User"></param>
  9681. /// <param name="InvCode"></param>
  9682. /// <param name="BusinessCode"></param>
  9683. /// <param name="ProjectCode"></param>
  9684. /// <param name="BatchCode"></param>
  9685. /// <param name="Version"></param>
  9686. /// <param name="Brand"></param>
  9687. /// <param name="cFree1"></param>
  9688. /// <param name="cFree2"></param>
  9689. /// <param name="cFree3"></param>
  9690. /// <param name="cFree4"></param>
  9691. /// <param name="cFree5"></param>
  9692. /// <param name="cFree6"></param>
  9693. /// <param name="cFree7"></param>
  9694. /// <param name="cFree8"></param>
  9695. /// <param name="cFree9"></param>
  9696. /// <param name="cFree10"></param>
  9697. /// <param name="cmd"></param>
  9698. /// <param name="language"></param>
  9699. public static void CreateLotNo(string LotNo, string Quantity, string TransCode, string TransSequence, string WorkPoint, string Identification, string User, string InvCode, string BusinessCode,
  9700. 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)
  9701. {
  9702. try
  9703. {
  9704. String EffectiveEnable = "";
  9705. String Colspan = "";
  9706. String IDD = "";
  9707. int EffectiveDays = 0;
  9708. String Time = "";
  9709. int EffectiveDayss = 0;
  9710. DateTime dtt;
  9711. DateTime now = DateTime.Now;
  9712. string sql = string.Empty;
  9713. //string sql = @"select EffectiveEnable,EffectiveDays from ICSInventory a
  9714. // Left Join ICSMO b ON a.InvCode=b.InvCode and a.WorkPoint = b.WorkPoint
  9715. // where b.MoCode='{0}' and b.WorkPoint='{1}'";
  9716. //sql = string.Format(sql, TransCode, WorkPoint);
  9717. //DataTable dt = DBHelper.SQlReturnData(sql, cmd);
  9718. //if (dt.Rows.Count == 0)
  9719. //{
  9720. // throw new Exception(language.GetNameByCode("WMSAPIInfo366"));
  9721. //}
  9722. //else
  9723. //{
  9724. // EffectiveEnable = dt.Rows[0]["EffectiveEnable"].ToString();
  9725. //EffectiveDays = Convert.ToInt32(dt.Rows[0]["EffectiveDays"]);
  9726. //}
  9727. //EffectiveDayss = Convert.ToInt32(EffectiveDays);
  9728. //if (!EffectiveEnable.Equals("False"))
  9729. //{
  9730. int year = now.Year;
  9731. int month = now.Month;
  9732. int day = now.Day;
  9733. int n = DateTime.DaysInMonth(year, month);
  9734. int k = day + EffectiveDays;
  9735. if (k > n)
  9736. {
  9737. day = EffectiveDays - (n - day);
  9738. month = month + 1;
  9739. if (month > 12)
  9740. {
  9741. month = 1;
  9742. year = year + 1;
  9743. }
  9744. }
  9745. else
  9746. {
  9747. day = day + EffectiveDays;
  9748. }
  9749. Time = year + "-" + month + "-" + day;
  9750. //}
  9751. //else
  9752. //{
  9753. // Time = "2999-12-31 00:00:00.000";
  9754. //}
  9755. dtt = Convert.ToDateTime(Time);
  9756. //检验自由项
  9757. Colspan = ProjectCode + "~" + BatchCode + "~" + Version
  9758. + "~" + Brand + "~" + cFree1
  9759. + "~" + cFree2 + "~" + cFree3 + "~" + cFree4
  9760. + "~" + cFree5 + "~" + cFree6 + "~" + cFree7
  9761. + "~" + cFree8 + "~" + cFree9 + "~" + cFree10;
  9762. sql = @"select ID,Colspan from ICSExtension a
  9763. where Colspan='{0}' and WorkPoint='{1}'";
  9764. sql = string.Format(sql, Colspan, WorkPoint);
  9765. DataTable dttt = DBHelper.SQlReturnData(sql, cmd);
  9766. if (dttt.Rows.Count == 0)
  9767. {
  9768. IDD = Guid.NewGuid().ToString();
  9769. sql = @"Insert into ICSExtension(ID, Colspan, ProjectCode, BatchCode, Version, Brand, cFree1, cFree2, cFree3, cFree4, cFree5, cFree6, cFree7, cFree8, cFree9, cFree10, MTIME, MUSER, MUSERName, WorkPoint)
  9770. 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}'";
  9771. sql = string.Format(sql, Colspan, ProjectCode, BatchCode, Version, Brand, cFree1, cFree2, cFree3, cFree4, cFree5, cFree6, cFree7, cFree8, cFree9, cFree10, User, WorkPoint, IDD);
  9772. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  9773. {
  9774. throw new Exception(language.GetNameByCode("WMSAPIInfo366"));
  9775. }
  9776. }
  9777. else
  9778. {
  9779. IDD = dttt.Rows[0]["ID"].ToString();
  9780. }
  9781. //存入条码表
  9782. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{4}')
  9783. BEGIN
  9784. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  9785. RETURN
  9786. END
  9787. INSERT INTO ICSInventoryLot(ID,LotNo,InvCode,ProductDate,ExpirationDate,
  9788. Quantity,Amount,ExtensionID,Type,PrintTimes,
  9789. LastPrintUser,LastPrintTime,MUSER,MUSERName,MTIME,
  9790. WorkPoint,EATTRIBUTE1)
  9791. SELECT TOP 1 NEWID(),'{0}','{8}',GETDATE(),'{6}',
  9792. '{1}','0','{7}','16',null,
  9793. null,null,'{2}' ,f.F_RealName ,GETDATE(),
  9794. '{4}' ,''
  9795. FROM Sys_SRM_User f
  9796. where f.F_Account='{2}' and f.F_Location='{4}'
  9797. ";
  9798. sql = string.Format(sql, LotNo, Quantity, User, TransCode, WorkPoint, TransSequence, dtt, IDD,InvCode);
  9799. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  9800. {
  9801. throw new Exception(language.GetNameByCode("WMSAPIInfo366"));
  9802. }
  9803. ///存入条码关联表
  9804. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{3}')
  9805. BEGIN
  9806. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  9807. RETURN
  9808. END
  9809. INSERT INTO ICSInventoryLotDetail(LotNo,TransCode,TransSequence,MUSER,MUSERName,MTIME,
  9810. WorkPoint,EATTRIBUTE1)
  9811. SELECT '{4}','{0}','{1}',f.F_Account ,f.F_RealName,GETDATE(),
  9812. a.WorkPoint,''
  9813. FROM ICSInventoryLot a
  9814. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  9815. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  9816. WHERE a.LotNo='{5}' AND a.WorkPoint='{3}'
  9817. ";
  9818. sql = string.Format(sql, TransCode, TransSequence, User, WorkPoint, LotNo, OLDLotNo);
  9819. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  9820. {
  9821. throw new Exception(language.GetNameByCode("WMSAPIInfo367"));
  9822. }
  9823. //存入库存表
  9824. sql = @"INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  9825. SELECT NEWID(),a.LotNo ,e.WarehouseCode,d.LocationCode,a.InvCode ,'0',SYSDATETIME(),'0',f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint ,''
  9826. FROM ICSInventoryLot a
  9827. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  9828. --INNER JOIN ICSOApplyNegDetail c ON b.TransCode=c.OApplyNegCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  9829. INNER JOIN ICSLocation d ON d.LocationCode='{4}' AND a.WorkPoint=d.WorkPoint
  9830. INNER JOIN ICSWarehouse e ON d.WHID=e.ID AND d.WorkPoint=e.WorkPoint
  9831. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  9832. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  9833. sql = string.Format(sql, LotNo, WorkPoint, User, Quantity, LocationCode);
  9834. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  9835. {
  9836. throw new Exception(language.GetNameByCode("WMSAPIInfo165"));
  9837. }
  9838. }
  9839. catch (Exception)
  9840. {
  9841. throw;
  9842. }
  9843. }
  9844. /// <summary>
  9845. /// 东辉日志表记录交接人EATTRIBUTE3
  9846. /// </summary>
  9847. /// <param name="TransType"></param>
  9848. /// <param name="BusinessCode"></param>
  9849. /// <param name="Heir"></param>
  9850. /// <param name="cmd"></param>
  9851. public static void WareHouseLotInfoLogUpdateHeir(string Identification, string BusinessCode, SqlCommand cmd, Dictionary<string, string> language,string Heir)
  9852. {
  9853. try
  9854. {
  9855. ///更新日志表
  9856. string sql = @"
  9857. UPDATE ICSWareHouseLotInfoLog SET EATTRIBUTE3='{2}' WHERE Identification='{0}' and BusinessCode ='{1}'
  9858. ";
  9859. sql = string.Format(sql, Identification, BusinessCode, Heir);
  9860. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  9861. {
  9862. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));//"库存表更新失败!");
  9863. }
  9864. }
  9865. catch (Exception)
  9866. {
  9867. throw;
  9868. }
  9869. }
  9870. //public void AutoWarehousingCreate()
  9871. //{
  9872. //}
  9873. /// <summary>
  9874. /// 判断条码是否已经入库
  9875. /// </summary>
  9876. /// <returns></returns>
  9877. public static bool LotInStorageGet(string LotNo, string WorkPoint, SqlCommand cmd, Dictionary<string, string> language)
  9878. {
  9879. bool lotInStorage = false;
  9880. string sql = @"IF EXISTS(
  9881. SELECT 1 FROM ICSWareHouseLotInfo WHERE LotNo=@LotNo AND WorkPoint=@WorkPoint
  9882. )
  9883. BEGIN
  9884. SELECT 1 AS flag
  9885. END
  9886. ELSE
  9887. BEGIN
  9888. SELECT 0 AS Flag
  9889. END";
  9890. cmd.Parameters.Clear();
  9891. cmd.Parameters.AddWithValue("@LotNo", LotNo);
  9892. cmd.Parameters.AddWithValue("@WorkPoint", WorkPoint);
  9893. lotInStorage = Convert.ToBoolean(DBHelper.ExecuteScalar(sql, cmd));
  9894. return lotInStorage;
  9895. }
  9896. }
  9897. }