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.

8521 lines
545 KiB

2 weeks ago
  1. using ICSSoft.Common;
  2. using ICSSoft.Entity;
  3. using Newtonsoft.Json;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Data;
  7. using System.Data.SqlClient;
  8. using System.Linq;
  9. using System.Net.Http;
  10. using System.Text;
  11. using System.Threading.Tasks;
  12. namespace ICSSoft.DataProject
  13. {
  14. /// <summary>
  15. /// 使用中
  16. /// 更新库存表、日志表
  17. /// </summary>
  18. public class ICSWareHouseLotInfoService
  19. {
  20. private static log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
  21. /// <summary>
  22. /// 分批
  23. /// </summary>
  24. /// <param name="Identification"></param>
  25. /// <param name="TransCode"></param>
  26. /// <param name="TransSequence"></param>
  27. /// <param name="LotNo"></param>
  28. /// <param name="Quantity"></param>
  29. /// <param name="User"></param>
  30. /// <param name="WorkPoint"></param>
  31. /// <param name="TransType"></param>
  32. /// <param name="BusinessCode"></param>
  33. /// <param name="cmd"></param>
  34. public static void WareHouseLotInfoInBatches(string Identification, string TransCode, string TransSequence, string LotNo, string Quantity, string User,
  35. string WorkPoint, string TransType, string BusinessCode, SqlCommand cmd, Dictionary<string, string> language, string MergeID = "")
  36. {
  37. }
  38. /// <summary>
  39. /// 添加库存
  40. /// </summary>
  41. /// <param name="LocationCode"></param>
  42. /// <param name="LotNo"></param>
  43. /// <param name="Quantity"></param>
  44. /// <param name="User"></param>
  45. /// <param name="WorkPoint"></param>
  46. /// <param name="TransType"></param>
  47. /// <param name="BusinessCode"></param>
  48. /// <param name="cmd"></param>
  49. /// <param name="jointLotNo"></param>
  50. public static void WareHouseLotInfoUp(string Identification, string LocationCode, string LotNo, string Quantity, string User, string WorkPoint, string TransType,
  51. string BusinessCode, SqlCommand cmd, Dictionary<string, string> language, string LogID,string jointLotNo, string TransCode, string TransSequence)
  52. {
  53. try
  54. {
  55. #region 正常入库
  56. ///添加库存(原条码退回,更新库存;新条码直接入库)
  57. //stirng locationcode = "";
  58. string sql = string.Empty;
  59. string locationcode = "";
  60. if (BusinessCode != TransTypeEnum.SalesReturnBack.GetDescription<DBValue>())
  61. {
  62. if (string.IsNullOrWhiteSpace(LogID))
  63. {
  64. sql = @"IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}')
  65. BEGIN
  66. RAISERROR('" + language.GetNameByCode("WMSAPIInfo164") + @"',16,1);
  67. RETURN
  68. END ";
  69. }
  70. else
  71. {
  72. sql = @"SELECT LocationCode FROM ICSWareHouseLotInfo a WHERE LotNo='{0}' AND WorkPoint='{1}'";
  73. sql = string.Format(sql, LotNo, WorkPoint);
  74. DataTable dt = DBHelper.SQlReturnData(sql, cmd);
  75. if (dt == null || dt.Rows.Count <= 0)
  76. {
  77. throw new Exception(string.Format(language.GetNameByCode("WMSAPIInfo171"), LotNo));
  78. }
  79. locationcode = dt.Rows[0]["LocationCode"].ToString();
  80. }
  81. }
  82. if (BusinessCode == TransTypeEnum.MOStockINByProductNoTrans.GetDescription<DBValue>())
  83. {
  84. sql += @" IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  85. BEGIN
  86. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  87. RETURN
  88. END
  89. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}')
  90. BEGIN
  91. IF EXISTS(SELECT a.LotNO FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND a.Quantity=0)
  92. BEGIN
  93. UPDATE a SET a.Quantity=ISNULL(a.Quantity,0)+'{3}',WarehouseCode=e.WarehouseCode,LocationCode=d.LocationCode
  94. From ICSWareHouseLotInfo a
  95. INNER JOIN ICSLocation d ON d.LocationCode='{4}' AND a.WorkPoint=d.WorkPoint
  96. INNER JOIN ICSWarehouse e ON d.WHID=e.ID AND d.WorkPoint=e.WorkPoint
  97. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  98. END
  99. ELSE IF EXISTS(SELECT a.LotNO FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND a.LocationCode='{4}')
  100. BEGIN
  101. UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)+'{3}'
  102. WHERE LotNo='{0}' AND WorkPoint='{1}'
  103. END
  104. ELSE IF('" + locationcode + @"' != '{4}')
  105. BEGIN
  106. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo395"), "{4}", locationcode) + @"', 16, 1);
  107. RETURN
  108. END
  109. END
  110. ELSE
  111. BEGIN
  112. IF EXISTS(SELECT il.InvCode FROM ICSInventoryLocation il
  113. INNER JOIN ICSInventoryLot a ON a.InvCode=il.InvCode AND a.WorkPoint=il.WorkPoint
  114. WHERE il.Enable='1' AND a.LotNo='{0}' AND a.WorkPoint='{1}')
  115. BEGIN
  116. IF NOT EXISTS(SELECT il.InvCode FROM ICSInventoryLocation il
  117. INNER JOIN ICSInventoryLot a ON a.InvCode=il.InvCode AND a.WorkPoint=il.WorkPoint
  118. WHERE il.Enable='1' AND a.LotNo='{0}' AND a.WorkPoint='{1}' AND il.LocationCode='{4}')
  119. BEGIN
  120. RAISERROR('" + language.GetNameByCode("WMSAPIInfo180") + @"',16,1);
  121. RETURN
  122. END
  123. END
  124. INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  125. SELECT NEWID(),a.LotNo ,e.WarehouseCode,d.LocationCode,a.InvCode ,'{3}',SYSDATETIME(),'0',f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint ,''
  126. FROM ICSInventoryLot a
  127. LEFT JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  128. --INNER JOIN ICSOApplyNegDetail c ON b.TransCode=c.OApplyNegCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  129. INNER JOIN ICSLocation d ON d.LocationCode='{4}' AND a.WorkPoint=d.WorkPoint
  130. INNER JOIN ICSWarehouse e ON d.WHID=e.ID AND d.WorkPoint=e.WorkPoint
  131. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  132. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  133. END";
  134. }
  135. else if(BusinessCode == TransTypeEnum.CodingInStockIn.GetDescription<DBValue>())
  136. {
  137. sql += @" IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  138. BEGIN
  139. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  140. RETURN
  141. END
  142. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}')
  143. BEGIN
  144. IF EXISTS(SELECT a.LotNO FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND a.Quantity=0)
  145. BEGIN
  146. UPDATE a SET a.Quantity=ISNULL(a.Quantity,0)+'{3}',WarehouseCode=e.WarehouseCode,LocationCode=d.LocationCode
  147. From ICSWareHouseLotInfo a
  148. INNER JOIN ICSLocation d ON d.LocationCode='{4}' AND a.WorkPoint=d.WorkPoint
  149. INNER JOIN ICSWarehouse e ON d.WHID=e.ID AND d.WorkPoint=e.WorkPoint
  150. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  151. END
  152. ELSE IF EXISTS(SELECT a.LotNO FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND a.LocationCode='{4}')
  153. BEGIN
  154. UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)+'{3}'
  155. WHERE LotNo='{0}' AND WorkPoint='{1}'
  156. END
  157. ELSE IF('" + locationcode + @"' != '{4}')
  158. BEGIN
  159. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo395"), "{4}", locationcode) + @"', 16, 1);
  160. RETURN
  161. END
  162. END
  163. ELSE
  164. BEGIN
  165. IF EXISTS(SELECT il.InvCode FROM ICSInventoryLocation il
  166. INNER JOIN ICSInventoryLot a ON a.InvCode=il.InvCode AND a.WorkPoint=il.WorkPoint
  167. WHERE il.Enable='1' AND a.LotNo='{0}' AND a.WorkPoint='{1}')
  168. BEGIN
  169. IF NOT EXISTS(SELECT il.InvCode FROM ICSInventoryLocation il
  170. INNER JOIN ICSInventoryLot a ON a.InvCode=il.InvCode AND a.WorkPoint=il.WorkPoint
  171. WHERE il.Enable='1' AND a.LotNo='{0}' AND a.WorkPoint='{1}' AND il.LocationCode='{4}')
  172. BEGIN
  173. RAISERROR('" + language.GetNameByCode("WMSAPIInfo180") + @"',16,1);
  174. RETURN
  175. END
  176. END
  177. INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  178. SELECT NEWID(),a.LotNo ,e.WarehouseCode,d.LocationCode,a.InvCode ,'{3}',SYSDATETIME(),'0',f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint ,''
  179. FROM ICSInventoryLot a
  180. LEFT JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  181. --INNER JOIN ICSOApplyNegDetail c ON b.TransCode=c.OApplyNegCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  182. INNER JOIN ICSLocation d ON d.LocationCode='{4}' AND a.WorkPoint=d.WorkPoint
  183. INNER JOIN ICSWarehouse e ON d.WHID=e.ID AND d.WorkPoint=e.WorkPoint
  184. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  185. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  186. END";
  187. }
  188. else
  189. {
  190. sql += @" IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  191. BEGIN
  192. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  193. RETURN
  194. END
  195. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}')
  196. BEGIN
  197. IF EXISTS(SELECT a.LotNO FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND a.Quantity=0)
  198. BEGIN
  199. UPDATE a SET a.Quantity=ISNULL(a.Quantity,0)+'{3}',WarehouseCode=e.WarehouseCode,LocationCode=d.LocationCode
  200. From ICSWareHouseLotInfo a
  201. INNER JOIN ICSLocation d ON d.LocationCode='{4}' AND a.WorkPoint=d.WorkPoint
  202. INNER JOIN ICSWarehouse e ON d.WHID=e.ID AND d.WorkPoint=e.WorkPoint
  203. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  204. END
  205. ELSE IF EXISTS(SELECT a.LotNO FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND a.LocationCode='{4}')
  206. BEGIN
  207. UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)+'{3}'
  208. WHERE LotNo='{0}' AND WorkPoint='{1}'
  209. END
  210. ELSE IF('" + locationcode + @"' != '{4}')
  211. BEGIN
  212. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo395"), "{4}", locationcode) + @"', 16, 1);
  213. RETURN
  214. END
  215. END
  216. ELSE
  217. BEGIN
  218. IF EXISTS(SELECT il.InvCode FROM ICSInventoryLocation il
  219. INNER JOIN ICSInventoryLot a ON a.InvCode=il.InvCode AND a.WorkPoint=il.WorkPoint
  220. WHERE il.Enable='1' AND a.LotNo='{0}' AND a.WorkPoint='{1}')
  221. BEGIN
  222. IF NOT EXISTS(SELECT il.InvCode FROM ICSInventoryLocation il
  223. INNER JOIN ICSInventoryLot a ON a.InvCode=il.InvCode AND a.WorkPoint=il.WorkPoint
  224. WHERE il.Enable='1' AND a.LotNo='{0}' AND a.WorkPoint='{1}' AND il.LocationCode='{4}')
  225. BEGIN
  226. RAISERROR('" + language.GetNameByCode("WMSAPIInfo180") + @"',16,1);
  227. RETURN
  228. END
  229. END
  230. INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  231. SELECT NEWID(),a.LotNo ,e.WarehouseCode,d.LocationCode,a.InvCode ,'{3}',SYSDATETIME(),'0',f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint ,''
  232. FROM ICSInventoryLot a
  233. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  234. --INNER JOIN ICSOApplyNegDetail c ON b.TransCode=c.OApplyNegCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  235. INNER JOIN ICSLocation d ON d.LocationCode='{4}' AND a.WorkPoint=d.WorkPoint
  236. INNER JOIN ICSWarehouse e ON d.WHID=e.ID AND d.WorkPoint=e.WorkPoint
  237. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  238. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  239. END";
  240. }
  241. sql = string.Format(sql, LotNo, WorkPoint, User, Quantity, LocationCode);
  242. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  243. {
  244. throw new Exception(language.GetNameByCode("WMSAPIInfo165"));
  245. }
  246. if (BusinessCode == TransTypeEnum.MOStockINByProductNoTrans.GetDescription<DBValue>())
  247. {
  248. ///添加日志
  249. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  250. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  251. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  252. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  253. MTIME,WorkPoint,EATTRIBUTE1,LogID)
  254. SELECT NEWID(),'{3}',b.TransCode,b.TransSequence,a.LotNo ,a.InvCode ,
  255. '','',c.WarehouseCode,c.LocationCode,'{6}',
  256. '','0','{4}','{5}','0','',
  257. '','','',f.F_Account ,f.F_RealName ,
  258. SYSDATETIME() ,a.WorkPoint ,'','{7}'
  259. FROM ICSInventoryLot a
  260. LEFT JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  261. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  262. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  263. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  264. ";
  265. }
  266. else if (BusinessCode == TransTypeEnum.ReturnDoc.GetDescription<DBValue>()&&!string.IsNullOrEmpty(LogID))
  267. {
  268. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  269. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  270. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  271. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  272. MTIME,WorkPoint,EATTRIBUTE1,LogID)
  273. SELECT NEWID(),'{3}','{8}','{9}',a.LotNo ,a.InvCode ,
  274. '','',c.WarehouseCode,c.LocationCode,'{6}',
  275. '','0','{4}','{5}','0','',
  276. '','','',f.F_Account ,f.F_RealName ,
  277. SYSDATETIME() ,a.WorkPoint ,'','{7}'
  278. FROM ICSInventoryLot a
  279. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  280. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  281. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  282. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  283. ";
  284. }
  285. else if (BusinessCode == TransTypeEnum.CodingInStockIn.GetDescription<DBValue>())
  286. {
  287. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  288. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  289. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  290. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  291. MTIME,WorkPoint,EATTRIBUTE1,LogID)
  292. SELECT NEWID(),'{3}',b.TransCode,b.TransSequence,a.LotNo ,a.InvCode ,
  293. '','',c.WarehouseCode,c.LocationCode,'{6}',
  294. '','0','{4}','{5}','0','',
  295. '','','',f.F_Account ,f.F_RealName ,
  296. SYSDATETIME() ,a.WorkPoint ,'','{7}'
  297. FROM ICSInventoryLot a
  298. LEFT JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  299. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  300. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  301. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  302. ";
  303. }
  304. else
  305. {
  306. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  307. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  308. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  309. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  310. MTIME,WorkPoint,EATTRIBUTE1,LogID)
  311. SELECT NEWID(),'{3}',b.TransCode,b.TransSequence,a.LotNo ,a.InvCode ,
  312. '','',c.WarehouseCode,c.LocationCode,'{6}',
  313. '','0','{4}','{5}','0','',
  314. '','','',f.F_Account ,f.F_RealName ,
  315. SYSDATETIME() ,a.WorkPoint ,'','{7}'
  316. FROM ICSInventoryLot a
  317. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  318. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  319. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  320. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  321. ";
  322. }
  323. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransType, BusinessCode, Quantity, LogID,TransCode,TransSequence);
  324. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  325. {
  326. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  327. }
  328. #endregion
  329. #region 管控方式是"料品"时
  330. ControlMode mode = ICSControlModeService.GetControlMode();
  331. if (mode.itemCode.Equals("ControlMode02"))
  332. {
  333. //查询是否存在料品管控的条码
  334. string sqlStrNew = @"SELECT a.ID,
  335. con.ContainerCode,
  336. con.ContainerName,
  337. a.LotNo,
  338. a.InvCode,
  339. inv.InvName,
  340. inv.InvStd,
  341. inv.InvUnit,-- {0}
  342. inv.AmountUnit,
  343. ext.ID AS ExtensionID,
  344. ext.ProjectCode,
  345. ext.Version,
  346. ext.BatchCode,
  347. ext.Brand,
  348. ext.cFree1,
  349. ext.cFree2,
  350. ext.cFree3,
  351. ext.cFree4,
  352. ext.cFree5,
  353. ext.cFree6,
  354. ext.cFree7,
  355. ext.cFree8,
  356. ext.cFree9,
  357. ext.cFree10,
  358. a.MUSER AS [ USER ],
  359. a.MTIME AS [ MTime ]
  360. FROM
  361. ICSInventoryLot a
  362. LEFT JOIN ICSContainerLot conlot ON a.LotNo = conlot.LotNo AND a.WorkPoint = conlot.WorkPoint
  363. LEFT JOIN ICSContainer con ON conlot.ContainerID = con.ID AND conlot.WorkPoint = con.WorkPoint
  364. INNER JOIN ICSInventory inv ON a.InvCode = inv.InvCode AND a.WorkPoint = inv.WorkPoint
  365. INNER JOIN ICSExtension ext ON a.ExtensionID = ext.ID AND a.WorkPoint = ext.WorkPoint
  366. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  367. sqlStrNew = string.Format(sqlStrNew, jointLotNo, WorkPoint);
  368. DataTable table = DBHelper.SQlReturnData(sqlStrNew, cmd);
  369. string json = JsonConvert.SerializeObject(table);
  370. List<LotNoMode> modelNew = JsonConvert.DeserializeObject<List<LotNoMode>>(json);
  371. //当不存在料品管控条码时,生成新条码
  372. if (!(modelNew.Count > 0))
  373. {
  374. //获取旧条码的信息
  375. string jsonStr = ICSControlModeService.QueryLotNo(LotNo, WorkPoint);
  376. List<LotNoMode> model = JsonConvert.DeserializeObject<List<LotNoMode>>(jsonStr);
  377. //在条码表中插入一条新数据,在条码表中插入一条新数据,并在库存表中添加新数据
  378. LotNoMode lotNoMode = model[0];
  379. CreateLotNo(jointLotNo, Quantity, "", "", WorkPoint, Identification, User, lotNoMode.InvCode, BusinessCode, lotNoMode.ProjectCode, lotNoMode.BatchCode,
  380. lotNoMode.Version, lotNoMode.Brand, lotNoMode.cFree1, lotNoMode.cFree2, lotNoMode.cFree3, lotNoMode.cFree4, lotNoMode.cFree5, lotNoMode.cFree6, lotNoMode.cFree7,
  381. lotNoMode.cFree8, lotNoMode.cFree9, lotNoMode.cFree10, cmd, language, LocationCode, LotNo);
  382. }
  383. try
  384. {
  385. //合并前日志
  386. WareHouseLotInfoLog(Identification, jointLotNo, User, WorkPoint, "2",
  387. TransTypeEnum.LOTMergeBefore.GetDescription<DBValue>(),"", cmd, language);
  388. //更新目标条码库存
  389. WareHouseLotInfoMerge(Identification, jointLotNo, LotNo, Quantity, User, WorkPoint, "2",
  390. TransTypeEnum.LOTMergeAfter.GetDescription<DBValue>(), cmd, language);
  391. //合并后日志
  392. WareHouseLotInfoLog(Identification, jointLotNo, User, WorkPoint, "2",
  393. TransTypeEnum.LOTMergeAfter.GetDescription<DBValue>(), "",cmd, language);
  394. }
  395. catch (Exception)
  396. {
  397. throw;
  398. }
  399. }
  400. #endregion
  401. #region 成品(生产)入库,倒冲
  402. if (BusinessCode.Equals(TransTypeEnum.ManufactureReceiveDoc.GetDescription<DBValue>()))
  403. {
  404. #region sql
  405. sql = @"-- 1.创建临时表 初始单据数据 maintemp
  406. SELECT
  407. c.MOCode AS TransCode,
  408. a.MODetailID AS DetailID,
  409. a.InvCode,
  410. b.InvName,
  411. b.InvStd,
  412. a.ParentQuantity/c.Quantity*{2} AS Quantity,
  413. a.Amount,
  414. a.Sequence AS TransSequence,
  415. a.IssueQuantity,
  416. c.Sequence,
  417. inv.InvUnit,
  418. cast(0 as decimal(18,6)) AS LocationQty,
  419. inv.AmountUnit,
  420. a.ExtensionID,
  421. a.WorkPoint,
  422. ext.ProjectCode,
  423. CASE WHEN ISNULL(inv.BatchEnable, '0')='1' THEN ext.BatchCode ELSE '' END AS BatchCode,
  424. ext.Version,
  425. ext.Brand,
  426. ext.cFree1,
  427. ext.cFree2,
  428. ext.cFree3,
  429. ext.cFree4,
  430. ext.cFree5,
  431. ext.cFree6,
  432. ext.cFree7,
  433. ext.cFree8,
  434. ext.cFree9,
  435. ext.cFree10,a.WHCODE
  436. INTO #maintemp
  437. FROM
  438. ICSMOPick a
  439. inner join ICSMO c on a.MODetailID=c.MODetailID and a.WorkPoint=c.WorkPoint
  440. LEFT JOIN ICSINVENTORY b ON a.InvCode = b.InvCode AND a.WorkPoint=b.WorkPoint
  441. INNER JOIN ICSExtension ext ON a.ExtensionID=ext.ID AND a.WorkPoint=ext.WorkPoint
  442. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  443. INNER JOIN (
  444. SELECT a.MOCode,a.Sequence,a.WorkPoint
  445. FROM ICSMO a
  446. INNER JOIN ICSInventoryLotDetail b ON b.TransCode=a.MOCode AND b.TransSequence=a.Sequence AND b.WorkPoint=a.WorkPoint
  447. INNER JOIN ICSInventoryLot c ON c.LotNo=b.LotNo AND c.WorkPoint=b.WorkPoint
  448. WHERE c.LotNo='{0}' AND c.WorkPoint='{1}'
  449. ) temp ON c.MOCode=temp.MOCode AND a.WorkPoint=temp.WorkPoint AND c.Sequence=temp.Sequence
  450. WHERE a.SupplyType='1'
  451. 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,
  452. 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;
  453. select * into #resulttemp from #maintemp
  454. ALTER TABLE #resulttemp ADD LotNo VARCHAR(50)
  455. delete from #resulttemp
  456. -- 2.maintemp barcodetemp
  457. 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,
  458. a.mtime into #barcodetemp from ICSWareHouseLotInfo a inner JOIN
  459. (select #maintemp.invcode,#maintemp.WHCODE from #maintemp group by #maintemp.InvCode,#maintemp.WHCODE) b on a.invcode = b.invcode and a.warehousecode =b.WHCODE
  460. inner JOIN ICSInventoryLot c on a.lotno = c.lotno
  461. LEFT JOIN ICSExtension d on c.extensionid = d.id
  462. where a.Quantity-a.lockQuantity>0
  463. -- 3.maintemp ID barcodetemp
  464. BEGIN
  465. DECLARE @transSequence int;--
  466. DECLARE @qty decimal(18,6);--
  467. DECLARE @needqty decimal(18,6);--
  468. DECLARE @lotno VARCHAR(50);--
  469. DECLARE @DetailID VARCHAR(50);--ID
  470. DECLARE tempCursor CURSOR FOR (select transSequence,DetailID from #maintemp); --tempCursor
  471. OPEN tempCursor; --
  472. FETCH NEXT FROM tempCursor INTO @transSequence,@DetailID; --
  473. WHILE @@fetch_status=0
  474. BEGIN
  475. select @needqty=Quantity from #maintemp where transSequence = @transSequence AND DetailID = @DetailID
  476. PRINT @transSequence
  477. WHILE @needqty>0
  478. BEGIN
  479. select top 1 @qty = isnull(quantity,0),@lotno = isnull(lotno,'') from #barcodetemp a
  480. RIGHT JOIN (select invcode from #maintemp where transSequence = @transSequence AND DetailID = @DetailID) b on a.invcode=b.invcode ORDER BY seq
  481. BEGIN
  482. IF(@needqty-@qty>=0 and ISNULL(@lotno, '')<>'')
  483. BEGIN
  484. insert INTO #resulttemp (lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity,Quantity,
  485. Amount,InvCode,InvName,InvStd,InvUnit,LocationQty,AmountUnit,
  486. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint)
  487. SELECT @lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity, Quantity,
  488. ISNULL(Amount, 0), InvCode,InvName,ISNULL(InvStd, ''),InvUnit,@qty,ISNULL(AmountUnit, ''),
  489. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint from #maintemp
  490. where #maintemp.transSequence = @transSequence AND DetailID = @DetailID
  491. delete from #barcodetemp where lotno = @lotno
  492. SET @needqty=@needqty-@qty
  493. END
  494. ELSE IF(@needqty-@qty<0 and ISNULL(@lotno, '')<>'')
  495. BEGIN
  496. insert INTO #resulttemp (lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity,Quantity,
  497. Amount,InvCode,InvName,InvStd,InvUnit,LocationQty,AmountUnit,
  498. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint)
  499. SELECT @lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity, Quantity,
  500. ISNULL(Amount, 0),InvCode,InvName,ISNULL(InvStd, ''),InvUnit,@needqty,ISNULL(AmountUnit, ''),
  501. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint from #maintemp
  502. where #maintemp.transSequence = @transSequence AND DetailID = @DetailID
  503. update #barcodetemp set quantity = @qty-@needqty where lotno = @lotno
  504. SET @needqty=@needqty-@qty
  505. END
  506. ELSE
  507. BEGIN
  508. insert INTO #resulttemp (lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity,Quantity,
  509. Amount,InvCode,InvName,InvStd,InvUnit,LocationQty,AmountUnit,
  510. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint)
  511. SELECT @lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity, Quantity,
  512. ISNULL(Amount, 0),InvCode,InvName,ISNULL(InvStd, ''),InvUnit,0,ISNULL(AmountUnit, ''),
  513. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint from #maintemp
  514. where #maintemp.transSequence = @transSequence AND DetailID = @DetailID
  515. SET @needqty=0
  516. END
  517. END
  518. END
  519. FETCH NEXT FROM tempCursor INTO @transSequence,@DetailID;
  520. END
  521. CLOSE tempCursor
  522. DEALLOCATE tempCursor
  523. END
  524. select TransCode,LotNo,LocationQty AS Quantity,InvCode,DetailID,Sequence,TransSequence from #resulttemp
  525. --select * from #resulttemp
  526. DROP table #maintemp
  527. DROP table #resulttemp
  528. DROP table #barcodetemp";
  529. #endregion
  530. sql = String.Format(sql,LotNo,WorkPoint, Quantity);
  531. DataTable table = DBHelper.SQlReturnData(sql,cmd);
  532. string json = JsonConvert.SerializeObject(table);
  533. List<DownItemModel> downItemModels = JsonConvert.DeserializeObject<List<DownItemModel>>(json);
  534. foreach (DownItemModel model in downItemModels)
  535. {
  536. if (model != null && model.LotNo == null || "" == model.LotNo)
  537. {
  538. cmd.Transaction.Rollback();
  539. string sqlmsg = @" SELECT
  540. c.MOCode AS TransCode,
  541. a.MODetailID AS DetailID,
  542. a.InvCode,
  543. b.InvName,
  544. b.InvStd,
  545. Convert(decimal(18,6), a.ParentQuantity/c.Quantity*{2})
  546. AS Quantity,
  547. a.Amount,
  548. a.Sequence AS TransSequence,
  549. a.IssueQuantity,
  550. c.Sequence,
  551. inv.InvUnit,
  552. cast(0 as decimal(18,6)) AS LocationQty,
  553. inv.AmountUnit,
  554. a.ExtensionID,
  555. a.WorkPoint,
  556. ext.ProjectCode,
  557. CASE WHEN ISNULL(inv.BatchEnable, '0')='1' THEN ext.BatchCode ELSE '' END AS BatchCode,
  558. ext.Version,
  559. ext.Brand,
  560. ext.cFree1,
  561. ext.cFree2,
  562. ext.cFree3,
  563. ext.cFree4,
  564. ext.cFree5,
  565. ext.cFree6,
  566. ext.cFree7,
  567. ext.cFree8,
  568. ext.cFree9,
  569. ext.cFree10,a.WHCODE,Convert(decimal(18,6), a.ParentQuantity/c.Quantity*{2})-isnull(temp2.quantity,0) as needQty
  570. FROM
  571. ICSMOPick a
  572. inner join ICSMO c on a.MODetailID=c.MODetailID and a.WorkPoint=c.WorkPoint
  573. LEFT JOIN ICSINVENTORY b ON a.InvCode = b.InvCode AND a.WorkPoint=b.WorkPoint
  574. INNER JOIN ICSExtension ext ON a.ExtensionID=ext.ID AND a.WorkPoint=ext.WorkPoint
  575. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  576. INNER JOIN (
  577. SELECT a.MOCode,a.Sequence,a.WorkPoint
  578. FROM ICSMO a
  579. INNER JOIN ICSInventoryLotDetail b ON b.TransCode=a.MOCode AND b.TransSequence=a.Sequence AND b.WorkPoint=a.WorkPoint
  580. INNER JOIN ICSInventoryLot c ON c.LotNo=b.LotNo AND c.WorkPoint=b.WorkPoint
  581. WHERE c.LotNo='{0}' AND c.WorkPoint='{1}'
  582. ) temp ON c.MOCode=temp.MOCode AND a.WorkPoint=temp.WorkPoint AND c.Sequence=temp.Sequence
  583. left join (select warehousecode,invcode,sum(cast((quantity-lockQuantity) as decimal(18,6))) as quantity
  584. from ICSWareHouseLotInfo
  585. where Quantity-lockQuantity>0
  586. group by invcode,warehousecode) temp2 on a.InvCode = temp2.invcode and a.WHCODE = temp2.warehousecode
  587. WHERE a.SupplyType='1'
  588. 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,
  589. 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;
  590. ";
  591. sqlmsg = String.Format(sqlmsg, LotNo, WorkPoint, Quantity);
  592. DataTable tablemsg = DBHelper.SQlReturnData(sqlmsg, cmd);
  593. string message = "";
  594. foreach (DataRow dr in tablemsg.Rows)
  595. {
  596. if (Convert.ToDecimal(dr["needQty"]) > 0)
  597. message += "料品:" + dr["InvCode"] + ",仓库:" + dr["WHCODE"] + ",库存差额:" + dr["needQty"] + ",需求数量:" + dr["Quantity"] + ",单位:" + dr["InvUnit"]; }
  598. log.Debug(message + sqlmsg);
  599. throw new Exception(language.GetNameByCode("WMSAPIInfo201")+message);
  600. }
  601. WareHouseLotInfoDown(Identification,model.TransCode,model.Sequence + "~" + model.TransSequence,model.LotNo,model.Quantity,User,WorkPoint,"12","61",cmd,language,"","","");
  602. //增加日志表记录 倒冲数据来源(入库批次自由项)
  603. sql = @"update ICSWareHouseLotInfoLog
  604. set EATTRIBUTE3 = (select
  605. 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, '')+
  606. 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, '')
  607. from
  608. ICSWareHouseLotInfo a
  609. inner join ICSInventorylot lot on a.lotno = lot.lotno
  610. inner join ICSExtension ext on lot.ExtensionID=ext.ID and a.workpoint =ext.workpoint
  611. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  612. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.WarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  613. where a.LotNo ='{0}' and a.WorkPoint='{1}')
  614. where Identification ='{2}'AND TransType='12' and BusinessCode ='61' and EATTRIBUTE3 IS null";
  615. sql = String.Format(sql, LotNo, WorkPoint, Identification);
  616. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  617. {
  618. throw new Exception(language.GetNameByCode("WMSAPIInfo199"));
  619. }
  620. //回写已领数量
  621. sql = @"UPDATE ICSMOPick SET IssueQuantity=(ISNULL(IssueQuantity,0)+" + model.Quantity+") WHERE MODetailID='{0}' AND Sequence='{1}' AND WorkPoint='{2}'";
  622. sql = String.Format(sql,model.DetailID,model.TransSequence,WorkPoint);
  623. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  624. {
  625. throw new Exception(language.GetNameByCode("WMSAPIInfo199"));
  626. }
  627. }
  628. }
  629. #endregion
  630. #region 委外入库,倒冲
  631. if (BusinessCode.Equals(TransTypeEnum.OutsourcingReceiveDoc.GetDescription<DBValue>()))
  632. {
  633. #region sql
  634. sql = @"-- 1.创建临时表 初始单据数据 maintemp
  635. SELECT
  636. c.OOCode AS TransCode,
  637. a.OODetailID AS DetailID,
  638. a.InvCode,
  639. b.InvName,
  640. b.InvStd,
  641. a.ParentQuantity/c.Quantity*{2} AS Quantity,
  642. a.Amount,
  643. a.Sequence AS TransSequence,
  644. a.IssueQuantity,
  645. c.Sequence,
  646. inv.InvUnit,
  647. cast(0 as decimal(18,6)) AS LocationQty,
  648. inv.AmountUnit,
  649. a.ExtensionID,
  650. a.WorkPoint,
  651. ext.ProjectCode,
  652. CASE WHEN ISNULL(inv.BatchEnable, '0')='1' THEN ext.BatchCode ELSE '' END AS BatchCode,
  653. ext.Version,
  654. ext.Brand,
  655. ext.cFree1,
  656. ext.cFree2,
  657. ext.cFree3,
  658. ext.cFree4,
  659. ext.cFree5,
  660. ext.cFree6,
  661. ext.cFree7,
  662. ext.cFree8,
  663. ext.cFree9,
  664. ext.cFree10,a.WHCODE
  665. INTO #maintemp
  666. FROM
  667. ICSOOPick a
  668. inner join ICSOutsourcingOrder c on a.OODetailID=c.OODetailID and a.WorkPoint=c.WorkPoint
  669. LEFT JOIN ICSINVENTORY b ON a.InvCode = b.InvCode AND a.WorkPoint=b.WorkPoint
  670. INNER JOIN ICSExtension ext ON a.ExtensionID=ext.ID AND a.WorkPoint=ext.WorkPoint
  671. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  672. INNER JOIN (
  673. SELECT a.OOCode,a.Sequence,a.WorkPoint
  674. FROM ICSOutsourcingOrder a
  675. INNER JOIN ICSInventoryLotDetail b ON b.TransCode=a.OOCode AND b.TransSequence=a.Sequence AND b.WorkPoint=a.WorkPoint
  676. INNER JOIN ICSInventoryLot c ON c.LotNo=b.LotNo AND c.WorkPoint=b.WorkPoint
  677. WHERE c.LotNo='{0}' AND c.WorkPoint='{1}'
  678. ) temp ON c.OOCode=temp.OOCode AND a.WorkPoint=temp.WorkPoint AND c.Sequence=temp.Sequence
  679. WHERE a.SupplyType='1'
  680. 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,
  681. 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;
  682. select * into #resulttemp from #maintemp
  683. ALTER TABLE #resulttemp ADD LotNo VARCHAR(50)
  684. delete from #resulttemp
  685. -- 2.maintemp barcodetemp
  686. 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,
  687. a.mtime into #barcodetemp from ICSWareHouseLotInfo a inner JOIN
  688. (select #maintemp.invcode,#maintemp.WHCODE from #maintemp group by #maintemp.InvCode,#maintemp.WHCODE) b on a.invcode = b.invcode and a.warehousecode =b.WHCODE
  689. inner JOIN ICSInventoryLot c on a.lotno = c.lotno
  690. LEFT JOIN ICSExtension d on c.extensionid = d.id where a.Quantity-a.lockQuantity>0
  691. -- 3.maintemp ID barcodetemp
  692. BEGIN
  693. DECLARE @transSequence int;--
  694. DECLARE @qty decimal(18,6);--
  695. DECLARE @needqty decimal(18,6);--
  696. DECLARE @lotno VARCHAR(50);--
  697. DECLARE @DetailID VARCHAR(50);--ID
  698. DECLARE tempCursor CURSOR FOR (select transSequence,DetailID from #maintemp); --tempCursor
  699. OPEN tempCursor; --
  700. FETCH NEXT FROM tempCursor INTO @transSequence,@DetailID; --
  701. WHILE @@fetch_status=0
  702. BEGIN
  703. select @needqty=Quantity from #maintemp where transSequence = @transSequence AND DetailID = @DetailID
  704. PRINT @transSequence
  705. WHILE @needqty>0
  706. BEGIN
  707. select top 1 @qty = isnull(quantity,0),@lotno = isnull(lotno,'') from #barcodetemp a
  708. RIGHT JOIN (select invcode from #maintemp where transSequence = @transSequence AND DetailID = @DetailID) b on a.invcode=b.invcode ORDER BY seq
  709. BEGIN
  710. IF(@needqty-@qty>=0 and ISNULL(@lotno, '')<>'')
  711. BEGIN
  712. insert INTO #resulttemp (lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity,Quantity,
  713. Amount,InvCode,InvName,InvStd,InvUnit,LocationQty,AmountUnit,
  714. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint)
  715. SELECT @lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity, Quantity,
  716. ISNULL(Amount, 0), InvCode,InvName,ISNULL(InvStd, ''),InvUnit,@qty,ISNULL(AmountUnit, ''),
  717. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint from #maintemp
  718. where #maintemp.transSequence = @transSequence AND DetailID = @DetailID
  719. delete from #barcodetemp where lotno = @lotno
  720. SET @needqty=@needqty-@qty
  721. END
  722. ELSE IF(@needqty-@qty<0 and ISNULL(@lotno, '')<>'')
  723. BEGIN
  724. insert INTO #resulttemp (lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity,Quantity,
  725. Amount,InvCode,InvName,InvStd,InvUnit,LocationQty,AmountUnit,
  726. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint)
  727. SELECT @lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity, Quantity,
  728. ISNULL(Amount, 0),InvCode,InvName,ISNULL(InvStd, ''),InvUnit,@needqty,ISNULL(AmountUnit, ''),
  729. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint from #maintemp
  730. where #maintemp.transSequence = @transSequence AND DetailID = @DetailID
  731. update #barcodetemp set quantity = @qty-@needqty where lotno = @lotno
  732. SET @needqty=@needqty-@qty
  733. END
  734. ELSE
  735. BEGIN
  736. insert INTO #resulttemp (lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity,Quantity,
  737. Amount,InvCode,InvName,InvStd,InvUnit,LocationQty,AmountUnit,
  738. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint)
  739. SELECT @lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity, Quantity,
  740. ISNULL(Amount, 0),InvCode,InvName,ISNULL(InvStd, ''),InvUnit,0,ISNULL(AmountUnit, ''),
  741. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint from #maintemp
  742. where #maintemp.transSequence = @transSequence AND DetailID = @DetailID
  743. SET @needqty=0
  744. END
  745. END
  746. END
  747. FETCH NEXT FROM tempCursor INTO @transSequence,@DetailID;
  748. END
  749. CLOSE tempCursor
  750. DEALLOCATE tempCursor
  751. END
  752. select TransCode,LotNo,LocationQty AS Quantity,InvCode,DetailID,Sequence,TransSequence from #resulttemp
  753. --select * from #resulttemp
  754. DROP table #maintemp
  755. DROP table #resulttemp
  756. DROP table #barcodetemp";
  757. #endregion
  758. sql = String.Format(sql, LotNo, WorkPoint, Quantity);
  759. DataTable table = DBHelper.SQlReturnData(sql, cmd);
  760. string json = JsonConvert.SerializeObject(table);
  761. List<DownItemModel> downItemModels = JsonConvert.DeserializeObject<List<DownItemModel>>(json);
  762. foreach (DownItemModel model in downItemModels)
  763. {
  764. if (model != null && model.LotNo == null || "" == model.LotNo)
  765. {
  766. cmd.Transaction.Rollback();
  767. string sqlmsg = @" SELECT
  768. c.OOCode AS TransCode,
  769. a.OODetailID AS DetailID,
  770. a.InvCode,
  771. b.InvName,
  772. b.InvStd,
  773. Convert(decimal(18,6), a.ParentQuantity/c.Quantity*{2})
  774. AS Quantity,
  775. a.Amount,
  776. a.Sequence AS TransSequence,
  777. a.IssueQuantity,
  778. c.Sequence,
  779. inv.InvUnit,
  780. cast(0 as decimal(18,6)) AS LocationQty,
  781. inv.AmountUnit,
  782. a.ExtensionID,
  783. a.WorkPoint,
  784. ext.ProjectCode,
  785. CASE WHEN ISNULL(inv.BatchEnable, '0')='1' THEN ext.BatchCode ELSE '' END AS BatchCode,
  786. ext.Version,
  787. ext.Brand,
  788. ext.cFree1,
  789. ext.cFree2,
  790. ext.cFree3,
  791. ext.cFree4,
  792. ext.cFree5,
  793. ext.cFree6,
  794. ext.cFree7,
  795. ext.cFree8,
  796. ext.cFree9,
  797. ext.cFree10,a.WHCODE ,(Convert(decimal(18,6), a.ParentQuantity/c.Quantity*{2})-isnull(temp2.quantity,0)) as needQty
  798. FROM
  799. ICSOOPick a
  800. inner join ICSOutsourcingOrder c on a.OODetailID=c.OODetailID and a.WorkPoint=c.WorkPoint
  801. LEFT JOIN ICSINVENTORY b ON a.InvCode = b.InvCode AND a.WorkPoint=b.WorkPoint
  802. INNER JOIN ICSExtension ext ON a.ExtensionID=ext.ID AND a.WorkPoint=ext.WorkPoint
  803. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  804. INNER JOIN (
  805. SELECT a.OOCode,a.Sequence,a.WorkPoint
  806. FROM ICSOutsourcingOrder a
  807. INNER JOIN ICSInventoryLotDetail b ON b.TransCode=a.OOCode AND b.TransSequence=a.Sequence AND b.WorkPoint=a.WorkPoint
  808. INNER JOIN ICSInventoryLot c ON c.LotNo=b.LotNo AND c.WorkPoint=b.WorkPoint
  809. WHERE c.LotNo='{0}' AND c.WorkPoint='{1}'
  810. ) temp ON c.OOCode=temp.OOCode AND a.WorkPoint=temp.WorkPoint AND c.Sequence=temp.Sequence
  811. left join (select warehousecode,invcode,sum(cast((quantity-lockQuantity) as decimal(18,6))) as quantity
  812. from ICSWareHouseLotInfo
  813. where Quantity-lockQuantity>0
  814. group by invcode,warehousecode) temp2 on a.InvCode = temp2.invcode and a.WHCODE = temp2.warehousecode
  815. WHERE a.SupplyType='1'
  816. 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,
  817. 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;
  818. ";
  819. sqlmsg = String.Format(sqlmsg, LotNo, WorkPoint, Quantity);
  820. DataTable tablemsg = DBHelper.SQlReturnData(sqlmsg, cmd);
  821. string message = "";
  822. foreach (DataRow dr in tablemsg.Rows)
  823. {
  824. if (Convert.ToDecimal(dr["needQty"])>0)
  825. message += "料品:" + dr["InvCode"] + ",仓库:" + dr["WHCODE"] + ",库存差额:" + dr["needQty"] + ",需求数量:" + dr["Quantity"] + ",单位:" + dr["InvUnit"];
  826. }
  827. log.Debug(message+ sqlmsg);
  828. throw new Exception(language.GetNameByCode("WMSAPIInfo201") + message);
  829. }
  830. WareHouseLotInfoDown(Identification, model.TransCode, model.Sequence + "~" + model.TransSequence, model.LotNo, model.Quantity, User, WorkPoint, "13", "60", cmd, language,"","","");
  831. log.Debug(model.TransCode + "倒冲" + model.Sequence + "~" + model.TransSequence);
  832. //增加日志表记录 倒冲数据来源(入库批次自由项)
  833. sql = @"update ICSWareHouseLotInfoLog
  834. set EATTRIBUTE3 = (select
  835. 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, '')+
  836. 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, '')
  837. from
  838. ICSWareHouseLotInfo a
  839. inner join ICSInventorylot lot on a.lotno = lot.lotno
  840. inner join ICSExtension ext on lot.ExtensionID=ext.ID and a.workpoint =ext.workpoint
  841. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  842. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.WarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  843. where a.LotNo ='{0}' and a.WorkPoint='{1}')
  844. where Identification ='{2}'AND TransType='13' and BusinessCode ='60' and EATTRIBUTE3 IS null";
  845. sql = String.Format(sql, LotNo, WorkPoint, Identification);
  846. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  847. {
  848. throw new Exception(language.GetNameByCode("WMSAPIInfo199"));
  849. }
  850. //回写已领数量
  851. sql = @"UPDATE ICSOOPick SET IssueQuantity=(ISNULL(IssueQuantity,0)+" + model.Quantity+") WHERE OODetailID='{0}' AND Sequence='{1}' AND WorkPoint='{2}'";
  852. sql = String.Format(sql, model.DetailID, model.TransSequence, WorkPoint);
  853. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  854. {
  855. throw new Exception(language.GetNameByCode("WMSAPIInfo199"));
  856. }
  857. }
  858. }
  859. #endregion
  860. }
  861. catch (Exception)
  862. {
  863. throw;
  864. }
  865. }
  866. /// <summary>
  867. /// 锐腾委外入库倒冲
  868. /// </summary>
  869. /// <param name="LocationCode"></param>
  870. /// <param name="LotNo"></param>
  871. /// <param name="Quantity"></param>
  872. /// <param name="User"></param>
  873. /// <param name="WorkPoint"></param>
  874. /// <param name="TransType"></param>
  875. /// <param name="BusinessCode"></param>
  876. /// <param name="cmd"></param>
  877. /// <param name="jointLotNo"></param>
  878. public static void WareHouseLotInfoBack(string Identification, string LocationCode, string LotNo, string Quantity, string User,
  879. string WorkPoint, string TransType, string BusinessCode, SqlCommand cmd, Dictionary<string, string> language, string LogID, string jointLotNo, string TransCode, string TransSequence,string InvCode,string WHCode)
  880. {
  881. try
  882. {
  883. string VenCode = string.Empty;
  884. string DisVenCode = string.Empty;
  885. string LocaCode = string.Empty;
  886. string newsql = @"select LotNo,WorkPoint,InvCode,ToWarehouseCode,MUSER,Quantity,TransSequence,TransCode
  887. from ICSWareHouseLotInfoLog
  888. WHERE Identification='{0}' AND BusinessCode='{1}'";
  889. newsql = string.Format(newsql, Identification, BusinessCode);
  890. DataTable dt = DBHelper.SQlReturnData(newsql, cmd);
  891. for (int i = 0; i < dt.Rows.Count; i++)
  892. {
  893. string ssql = @"SELECT a.ODNCode,a.Sequence,a.WorkPoint,a.VenCode
  894. FROM ICSODeliveryNotice a
  895. INNER JOIN ICSInventoryLotDetail b ON b.TransCode=a.ODNCode AND b.TransSequence=a.Sequence AND b.WorkPoint=a.WorkPoint
  896. INNER JOIN ICSInventoryLot c ON c.LotNo=b.LotNo AND c.WorkPoint=b.WorkPoint
  897. WHERE c.LotNo='{0}' AND c.WorkPoint='{1}'";
  898. ssql = string.Format(ssql, dt.Rows[i]["LotNo"].ToString(), dt.Rows[i]["WorkPoint"].ToString());
  899. DataTable ssdt = DBHelper.SQlReturnData(ssql, cmd);
  900. if (ssdt.Rows.Count > 0)
  901. {
  902. DisVenCode = ssdt.Rows[0]["VenCode"].ToString();
  903. }
  904. string cheksql = @"select b.F_ItemCode as VenCode ,b.F_ItemName as Name,b.F_EnabledMark AS Enable ,b.F_Define1 AS LocationCode
  905. from Sys_SRM_Items a
  906. left join Sys_SRM_ItemsDetail b on a.F_Id=b.F_ItemId
  907. where a.F_EnCode='WWLocation' AND b.F_ItemCode='{0}'
  908. ";
  909. cheksql = string.Format(cheksql, DisVenCode);
  910. DataTable chekdt = DBHelper.SQlReturnData(cheksql, cmd);
  911. if (chekdt.Rows.Count > 0)
  912. {
  913. LocaCode = chekdt.Rows[0]["LocationCode"].ToString();
  914. }
  915. else
  916. {
  917. throw new Exception("委外供应商未维护:" + DisVenCode);
  918. }
  919. #region 委外入库,倒冲
  920. #region sql
  921. string sql = @"-- 1.创建临时表 初始单据数据 maintemp
  922. SELECT
  923. c.ODNCode AS TransCode,
  924. a.OODetailID AS DetailID,
  925. a.InvCode,
  926. b.InvName,
  927. b.InvStd,
  928. '{2}' AS Quantity,
  929. a.Amount,
  930. a.Sequence AS TransSequence,
  931. a.IssueQuantity,
  932. c.Sequence,
  933. inv.InvUnit,
  934. CAST(0 AS DECIMAL(18, 2)) AS LocationQty,
  935. inv.AmountUnit,
  936. a.ExtensionID,
  937. a.WorkPoint,
  938. ext.ProjectCode,
  939. CASE WHEN ISNULL(inv.BatchEnable, '0')='1' THEN ext.BatchCode ELSE '' END AS BatchCode,
  940. ext.Version,
  941. ext.Brand,
  942. ext.cFree1,
  943. ext.cFree2,
  944. ext.cFree3,
  945. ext.cFree4,
  946. ext.cFree5,
  947. ext.cFree6,
  948. ext.cFree7,
  949. ext.cFree8,
  950. ext.cFree9,
  951. ext.cFree10
  952. INTO #maintemp
  953. FROM
  954. ICSOOPick a
  955. inner join ICSODeliveryNotice c on a.OODetailID=c.OODetailID and a.WorkPoint=c.WorkPoint
  956. LEFT JOIN ICSINVENTORY b ON a.InvCode = b.InvCode AND a.WorkPoint=b.WorkPoint
  957. INNER JOIN ICSExtension ext ON a.ExtensionID=ext.ID AND a.WorkPoint=ext.WorkPoint
  958. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  959. INNER JOIN (
  960. SELECT a.ODNCode,a.Sequence,a.WorkPoint
  961. FROM ICSODeliveryNotice a
  962. INNER JOIN ICSInventoryLotDetail b ON b.TransCode=a.ODNCode AND b.TransSequence=a.Sequence AND b.WorkPoint=a.WorkPoint
  963. INNER JOIN ICSInventoryLot c ON c.LotNo=b.LotNo AND c.WorkPoint=b.WorkPoint
  964. WHERE c.LotNo='{0}' AND c.WorkPoint='{1}'
  965. ) temp ON c.ODNCode=temp.ODNCode AND a.WorkPoint=temp.WorkPoint AND c.Sequence=temp.Sequence
  966. WHERE a.invcode='{3}'
  967. 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,
  968. 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;
  969. select * into #resulttemp from #maintemp
  970. ALTER TABLE #resulttemp ADD LotNo VARCHAR(50)
  971. delete from #resulttemp
  972. -- 2.maintemp barcodetemp
  973. select a.lotno,a.invcode,(a.quantity-a.lockQuantity) as quantity ,a.mtime into #barcodetemp
  974. from ICSWareHouseLotInfo a inner JOIN
  975. (select #maintemp.invcode from #maintemp group by #maintemp.InvCode) b on a.invcode = b.invcode where a.Quantity-a.lockQuantity>0
  976. AND a.WareHouseCode='{4}' and a.LocationCode='{5}'
  977. ORDER BY a.MTIME ASC
  978. -- 3.maintemp ID barcodetemp
  979. BEGIN
  980. DECLARE @transSequence int;--
  981. DECLARE @qty int;--
  982. DECLARE @needqty decimal(10, 2);--
  983. DECLARE @lotno VARCHAR(50);--
  984. DECLARE @DetailID VARCHAR(50);--ID
  985. DECLARE tempCursor CURSOR FOR (select transSequence,DetailID from #maintemp); --tempCursor
  986. OPEN tempCursor; --
  987. FETCH NEXT FROM tempCursor INTO @transSequence,@DetailID; --
  988. WHILE @@fetch_status=0
  989. BEGIN
  990. select @needqty=Quantity from #maintemp where transSequence = @transSequence AND DetailID = @DetailID
  991. PRINT @transSequence
  992. WHILE @needqty>0
  993. BEGIN
  994. select top 1 @qty = isnull(quantity,0),@lotno = isnull(lotno,'') from #barcodetemp a
  995. RIGHT JOIN (select invcode from #maintemp where transSequence = @transSequence AND DetailID = @DetailID) b on a.invcode=b.invcode ORDER BY mtime
  996. BEGIN
  997. IF(@needqty-@qty>=0 and ISNULL(@lotno, '')<>'')
  998. BEGIN
  999. insert INTO #resulttemp (LotNo,TransCode,DetailID,Sequence,TransSequence,IssueQuantity,Quantity,
  1000. Amount,InvCode,InvName,InvStd,InvUnit,LocationQty,AmountUnit,
  1001. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint)
  1002. SELECT @lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity, Quantity,
  1003. ISNULL(Amount, 0), InvCode,InvName,ISNULL(InvStd, ''),InvUnit,@qty,ISNULL(AmountUnit, ''),
  1004. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint from #maintemp
  1005. where #maintemp.transSequence = @transSequence AND DetailID = @DetailID
  1006. delete from #barcodetemp where lotno = @lotno
  1007. SET @needqty=@needqty-@qty
  1008. END
  1009. ELSE IF(@needqty-@qty<0 and ISNULL(@lotno, '')<>'')
  1010. BEGIN
  1011. insert INTO #resulttemp (LotNo,TransCode,DetailID,Sequence,TransSequence,IssueQuantity,Quantity,
  1012. Amount,InvCode,InvName,InvStd,InvUnit,LocationQty,AmountUnit,
  1013. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint)
  1014. SELECT @lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity, Quantity,
  1015. ISNULL(Amount, 0),InvCode,InvName,ISNULL(InvStd, ''),InvUnit,@needqty,ISNULL(AmountUnit, ''),
  1016. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint from #maintemp
  1017. where #maintemp.transSequence = @transSequence AND DetailID = @DetailID
  1018. update #barcodetemp set quantity = @qty-@needqty where lotno = @lotno
  1019. SET @needqty=@needqty-@qty
  1020. END
  1021. ELSE
  1022. BEGIN
  1023. insert INTO #resulttemp (LotNo,TransCode,DetailID,Sequence,TransSequence,IssueQuantity,Quantity,
  1024. Amount,InvCode,InvName,InvStd,InvUnit,LocationQty,AmountUnit,
  1025. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint)
  1026. SELECT @lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity, Quantity,
  1027. ISNULL(Amount, 0),InvCode,InvName,ISNULL(InvStd, ''),InvUnit,0,ISNULL(AmountUnit, ''),
  1028. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint from #maintemp
  1029. where #maintemp.transSequence = @transSequence AND DetailID = @DetailID
  1030. SET @needqty=0
  1031. END
  1032. END
  1033. END
  1034. FETCH NEXT FROM tempCursor INTO @transSequence,@DetailID;
  1035. END
  1036. CLOSE tempCursor
  1037. DEALLOCATE tempCursor
  1038. END
  1039. select TransCode,LotNo,LocationQty AS Quantity,InvCode,DetailID,Sequence,TransSequence from #resulttemp
  1040. --select * from #resulttemp
  1041. DROP table #maintemp
  1042. DROP table #resulttemp
  1043. DROP table #barcodetemp";
  1044. #endregion
  1045. sql = String.Format(sql, dt.Rows[i]["LotNo"].ToString(), dt.Rows[i]["WorkPoint"].ToString(), Quantity, InvCode, WHCode, LocaCode);
  1046. DataTable table = DBHelper.SQlReturnData(sql, cmd);
  1047. string json = JsonConvert.SerializeObject(table);
  1048. List<DownItemModel> downItemModels = JsonConvert.DeserializeObject<List<DownItemModel>>(json);
  1049. foreach (DownItemModel model in downItemModels)
  1050. {
  1051. if (model != null && model.LotNo == null || "" == model.LotNo)
  1052. {
  1053. throw new Exception(language.GetNameByCode("WMSAPIInfo201"));
  1054. }
  1055. WareHouseLotInfoDown(Identification, model.TransCode, model.Sequence + "~" + model.TransSequence, model.LotNo, model.Quantity, User, dt.Rows[i]["WorkPoint"].ToString(), "13", "60", cmd, language, "", "", "");
  1056. //回写已领数量
  1057. sql = @"UPDATE ICSOOPick SET IssueQuantity=(ISNULL(IssueQuantity,0)+" + model.Quantity + ") WHERE OODetailID='{0}' AND Sequence='{1}' AND WorkPoint='{2}'";
  1058. sql = String.Format(sql, model.DetailID, model.TransSequence, dt.Rows[i]["WorkPoint"].ToString());
  1059. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  1060. {
  1061. throw new Exception(language.GetNameByCode("WMSAPIInfo199"));
  1062. }
  1063. }
  1064. #endregion
  1065. }
  1066. }
  1067. catch (Exception)
  1068. {
  1069. throw;
  1070. }
  1071. }
  1072. /// <summary>
  1073. /// 入库倒冲(正向)
  1074. /// </summary>
  1075. /// <param name="LocationCode"></param>
  1076. /// <param name="LotNo"></param>
  1077. /// <param name="Quantity"></param>
  1078. /// <param name="User"></param>
  1079. /// <param name="WorkPoint"></param>
  1080. /// <param name="TransType"></param>
  1081. /// <param name="BusinessCode"></param>
  1082. /// <param name="cmd"></param>
  1083. /// <param name="jointLotNo"></param>
  1084. public static void WareHouseLotInfoBackOut(string Identification,
  1085. string TransCode, string TransSequence, string InvCode, string WHCode, string Quantity, string User,
  1086. string WorkPoint, string TransType, string BusinessCode,string ERPID, string ERPDetailID, string ERPCode,string ERPSequence,
  1087. string cFree1, string cFree2, string cFree3, string cFree4, string cFree5, string cFree6, string cFree7, string cFree8, string cFree9, string cFree10,
  1088. string ProjectCode, string Batch, string Version, string Brand,
  1089. SqlCommand cmd, Dictionary<string, string> language)
  1090. {
  1091. try
  1092. {
  1093. string VenCode = string.Empty;
  1094. string DisVenCode = string.Empty;
  1095. string LocaCode = string.Empty;
  1096. string sqlwhere = string.Empty;
  1097. string ssql = @"SELECT a.ODNCode,a.Sequence,a.WorkPoint,a.VenCode
  1098. FROM ICSODeliveryNotice a
  1099. WHERE a.ODNCode='{0}' AND a.WorkPoint='{1}'";
  1100. ssql = string.Format(ssql, TransCode, WorkPoint);
  1101. DataTable ssdt = DBHelper.SQlReturnData(ssql, cmd);
  1102. if (ssdt.Rows.Count > 0)
  1103. {
  1104. DisVenCode = ssdt.Rows[0]["VenCode"].ToString();
  1105. }
  1106. string cheksql = @"select b.F_ItemCode as VenCode ,b.F_ItemName as Name,b.F_EnabledMark AS Enable ,b.F_Define1 AS LocationCode
  1107. from Sys_SRM_Items a
  1108. left join Sys_SRM_ItemsDetail b on a.F_Id=b.F_ItemId
  1109. where a.F_EnCode='WWLocation' AND b.F_ItemCode='{0}'
  1110. ";
  1111. cheksql = string.Format(cheksql, DisVenCode);
  1112. DataTable chekdt = DBHelper.SQlReturnData(cheksql, cmd);
  1113. if (chekdt.Rows.Count > 0)
  1114. {
  1115. LocaCode = chekdt.Rows[0]["LocationCode"].ToString();
  1116. sqlwhere = @"AND a.invcode = '{0}' AND a.warehousecode = '{3}' and a.locationcode='{4}'";
  1117. }
  1118. else
  1119. {
  1120. if (DBHelper.IsRTU9())
  1121. {
  1122. throw new Exception("委外供应商库位未维护:" + DisVenCode);
  1123. }
  1124. else
  1125. {
  1126. sqlwhere = @"AND a.invcode = '{0}' AND a.warehousecode = '{3}'";
  1127. }
  1128. }
  1129. string MTime = string.Empty;
  1130. //1.查询先进先出字段
  1131. string mtimeSql = @"SELECT Top 1 a.F_ItemName
  1132. FROM Sys_SRM_ItemsDetail a
  1133. INNER JOIN Sys_SRM_Items b ON a.F_ItemId=b.F_Id
  1134. WHERE b.F_EnCode='MtimeControl' AND a.F_EnabledMark='1'
  1135. ORDER BY a.F_SortCode DESc";
  1136. DataTable mtimedt = DBHelper.SQlReturnData(mtimeSql, cmd);
  1137. if (mtimedt.Rows[0]["F_ItemName"].ToString() == "失效日期")
  1138. {
  1139. MTime = "ISNULL(b.ExpirationDate,b.ProductDate)";
  1140. }
  1141. else if (mtimedt.Rows[0]["F_ItemName"].ToString() == "生产日期")
  1142. {
  1143. MTime = "b.ProductDate";
  1144. }
  1145. else if(mtimedt.Rows[0]["F_ItemName"].ToString() == "入库日期")
  1146. {
  1147. MTime = "a.InDate";
  1148. }
  1149. else if (mtimedt.Rows[0]["F_ItemName"].ToString() == "批次")
  1150. {
  1151. MTime = "isnull(c.Batchcode ,'0')";
  1152. }
  1153. if (BusinessCode == "9" || BusinessCode == "10") { TransType = "13"; BusinessCode = "60"; } else { TransType = "12"; BusinessCode = "61"; }
  1154. #region 倒冲
  1155. #region sql
  1156. // sqlwhere = @"AND a.invcode = '{0}' AND a.warehousecode = '{3}'";//and c.batchcode ='{1}' and c.cfree1='{2}'
  1157. if (!string.IsNullOrWhiteSpace(cFree1)) { sqlwhere += " AND c.cFree1 ='" + cFree1 + "'"; }
  1158. if (!string.IsNullOrWhiteSpace(cFree2)) { sqlwhere += " AND c.cFree2 ='" + cFree2 + "'"; }
  1159. if (!string.IsNullOrWhiteSpace(cFree3)) { sqlwhere += " AND c.cFree3 ='" + cFree3 + "'"; }
  1160. if (!string.IsNullOrWhiteSpace(cFree4)) { sqlwhere += " AND c.cFree4 ='" + cFree4 + "'"; }
  1161. if (!string.IsNullOrWhiteSpace(cFree5)) { sqlwhere += " AND c.cFree5 ='" + cFree5 + "'"; }
  1162. if (!string.IsNullOrWhiteSpace(cFree6)) { sqlwhere += " AND c.cFree6 ='" + cFree6 + "'"; }
  1163. if (!string.IsNullOrWhiteSpace(cFree7)) { sqlwhere += " AND c.cFree7 ='" + cFree7 + "'"; }
  1164. if (!string.IsNullOrWhiteSpace(cFree8)) { sqlwhere += " AND c.cFree8 ='" + cFree8 + "'"; }
  1165. if (!string.IsNullOrWhiteSpace(cFree9)) { sqlwhere += " AND c.cFree9 ='" + cFree9 + "'"; }
  1166. if (!string.IsNullOrWhiteSpace(cFree10)) { sqlwhere += " AND c.cFree10 ='" + cFree10 + "'"; }
  1167. //string ProjectCode, string Batch, string Version, string Brand,
  1168. if (!string.IsNullOrWhiteSpace(ProjectCode)) { sqlwhere += " AND c.ProjectCode ='" + ProjectCode + "'"; }
  1169. if (!string.IsNullOrWhiteSpace(Batch)) { sqlwhere += " AND c.Batch ='" + Batch + "'"; }
  1170. if (!string.IsNullOrWhiteSpace(Version)) { sqlwhere += " AND c.Version ='" + Version + "'"; }
  1171. if (!string.IsNullOrWhiteSpace(Brand)) { sqlwhere += " AND c.Brand ='" + Brand + "'"; }
  1172. string sql = @"-- 2.根据返回的物料信息 查出库存中对应的条码信息 barcodetemp 批次 序列号 仓库 料号
  1173. 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
  1174. from ICSWareHouseLotInfo a inner JOIN ICSInventoryLot b on a.lotno = b.lotno
  1175. LEFT JOIN ICSExtension c on b.extensionid = c.id
  1176. where a.Quantity-a.lockQuantity>0 {9} --order by {2} asc
  1177. IF NOT EXISTS(SELECT 1 FROM #barcodetemp)
  1178. BEGIN
  1179. RAISERROR('',16,1)
  1180. RETURN;
  1181. END
  1182. -- 3.maintemp ID barcodetemp
  1183. BEGIN
  1184. DECLARE @qty DECIMAL(18,6);--
  1185. DECLARE @needqty DECIMAL(18,6);--
  1186. DECLARE @lotno VARCHAR(50);--
  1187. DECLARE @Mtime VARCHAR(50);--
  1188. --
  1189. set @needqty = {4}
  1190. DECLARE tempCursor CURSOR FOR (select lotno from #barcodetemp ); --tempCursor
  1191. OPEN tempCursor; --
  1192. FETCH NEXT FROM tempCursor INTO @Mtime; --
  1193. WHILE @@fetch_status=0
  1194. BEGIN
  1195. IF @needqty>0
  1196. BEGIN
  1197. select top 1 @qty = isnull(quantity,0),@lotno = isnull(lotno,'') from #barcodetemp a where lotno =@Mtime
  1198. BEGIN
  1199. IF(@needqty-@qty>=0 and ISNULL(@lotno, '')<>'')--
  1200. BEGIN
  1201. -- @qty
  1202. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  1203. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  1204. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  1205. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  1206. MTIME,WorkPoint,EATTRIBUTE1,MergeID,EATTRIBUTE3,EATTRIBUTE4)
  1207. SELECT NEWID(),'{5}','{10}','{11}',@lotno ,a.InvCode ,
  1208. c.WarehouseCode,c.LocationCode,'','',@qty,
  1209. '','0','{12}','{16}','1','{6}',
  1210. '{1}','{13}','{14}',f.F_Account ,f.F_RealName ,
  1211. SYSDATETIME() ,a.WorkPoint ,'','','',''
  1212. FROM ICSInventoryLot a
  1213. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  1214. INNER JOIN Sys_SRM_User f ON f.F_Account='{7}' AND a.WorkPoint=f.F_Location
  1215. WHERE a.LotNo=@lotno AND a.WorkPoint='{8}'
  1216. --
  1217. UPDATE ICSWareHouseLotInfo set Quantity =0 where lotno = @lotno
  1218. SET @needqty=@needqty-@qty
  1219. END
  1220. ELSE IF(@needqty-@qty<0 and ISNULL(@lotno, '')<>'')
  1221. BEGIN
  1222. -- @qty
  1223. -- @qty
  1224. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  1225. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  1226. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  1227. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  1228. MTIME,WorkPoint,EATTRIBUTE1,MergeID,EATTRIBUTE3,EATTRIBUTE4)
  1229. SELECT NEWID(),'{5}','{10}','{11}',@lotno ,a.InvCode ,
  1230. c.WarehouseCode,c.LocationCode,'','',@needqty,
  1231. '','0','{12}','{16}','1','{6}',
  1232. '{1}','{13}','{14}',f.F_Account ,f.F_RealName ,
  1233. SYSDATETIME() ,a.WorkPoint ,'','','',''
  1234. FROM ICSInventoryLot a
  1235. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  1236. INNER JOIN Sys_SRM_User f ON f.F_Account='{7}' AND a.WorkPoint=f.F_Location
  1237. WHERE a.LotNo=@lotno AND a.WorkPoint='{8}'
  1238. --
  1239. update ICSWareHouseLotInfo set quantity = @qty-@needqty where lotno = @lotno
  1240. SET @needqty=@needqty-@qty
  1241. END
  1242. END
  1243. END
  1244. FETCH NEXT FROM tempCursor INTO @Mtime;
  1245. END
  1246. CLOSE tempCursor
  1247. DEALLOCATE tempCursor
  1248. -- 退
  1249. IF(@needqty>0)
  1250. BEGIN
  1251. -- -@needqty异常退料
  1252. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  1253. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  1254. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  1255. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  1256. MTIME,WorkPoint,EATTRIBUTE1,MergeID,EATTRIBUTE3,EATTRIBUTE4,EATTRIBUTE10)
  1257. SELECT NEWID(),'{5}','{10}','{11}',@lotno ,a.InvCode ,
  1258. '{3}','','','',-@needqty,
  1259. '','0','{12}','{16}','1','{6}',
  1260. '{1}','{13}','{14}',f.F_Account ,f.F_RealName ,
  1261. SYSDATETIME() ,a.WorkPoint ,'','','','',''
  1262. FROM ICSInventory a
  1263. LEFT JOIN ICSWareHouseLotInfo c ON a.INVCODE=c.invcode AND a.WorkPoint=c.WorkPoint
  1264. INNER JOIN Sys_SRM_User f ON f.F_Account='{7}' AND a.WorkPoint=f.F_Location
  1265. WHERE c.LotNo=@lotno AND a.WorkPoint='{8}'
  1266. --
  1267. update ICSWareHouseLotInfo set quantity = quantity-@needqty where lotno = @lotno
  1268. END
  1269. END
  1270. DROP table #barcodetemp";
  1271. sqlwhere = string.Format(sqlwhere,InvCode, "", "", WHCode, LocaCode);
  1272. sql = string.Format(sql, InvCode, ERPDetailID, MTime, WHCode,
  1273. Quantity, Identification, ERPID, User, WorkPoint, sqlwhere, TransCode, TransSequence,TransType, ERPCode, ERPSequence,LocaCode,BusinessCode);
  1274. #endregion
  1275. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  1276. {
  1277. throw new Exception(language.GetNameByCode("WMSAPIInfo200"));//"倒冲出错!"
  1278. }
  1279. #endregion
  1280. }
  1281. catch (Exception)
  1282. {
  1283. throw;
  1284. }
  1285. }
  1286. /// <summary>
  1287. /// 退货倒冲(反向)
  1288. /// </summary>
  1289. /// <param name="LocationCode"></param>
  1290. /// <param name="LotNo"></param>
  1291. /// <param name="Quantity"></param>
  1292. /// <param name="User"></param>
  1293. /// <param name="WorkPoint"></param>
  1294. /// <param name="TransType"></param>
  1295. /// <param name="BusinessCode"></param>
  1296. /// <param name="cmd"></param>
  1297. /// <param name="jointLotNo"></param>
  1298. public static void WareHouseLotInfoBackIn(string Identification,
  1299. string TransCode, string TransSequence, string InvCode, string WHCode, string Quantity, string User,
  1300. string WorkPoint, string TransType, string BusinessCode, string ERPID, string ERPDetailID, string ERPCode, string ERPSequence,
  1301. string cFree1, string cFree2, string cFree3, string cFree4, string cFree5, string cFree6, string cFree7, string cFree8, string cFree9, string cFree10,
  1302. string ProjectCode, string Batch, string Version, string Brand,
  1303. SqlCommand cmd, Dictionary<string, string> language)
  1304. {
  1305. try
  1306. {
  1307. string MTime = string.Empty;
  1308. string LocaCode = string.Empty;
  1309. //1.查询先进先出字段
  1310. string mtimeSql = @"SELECT Top 1 a.F_ItemName
  1311. FROM Sys_SRM_ItemsDetail a
  1312. INNER JOIN Sys_SRM_Items b ON a.F_ItemId=b.F_Id
  1313. WHERE b.F_EnCode='MtimeControl' AND a.F_EnabledMark='1'
  1314. ORDER BY a.F_SortCode DESc";
  1315. DataTable mtimedt = DBHelper.SQlReturnData(mtimeSql, cmd);
  1316. if (mtimedt.Rows[0]["F_ItemName"].ToString() == "失效日期")
  1317. {
  1318. MTime = "ISNULL(b.ExpirationDate,b.ProductDate)";
  1319. }
  1320. else if (mtimedt.Rows[0]["F_ItemName"].ToString() == "生产日期")
  1321. {
  1322. MTime = "b.ProductDate";
  1323. }
  1324. else if (mtimedt.Rows[0]["F_ItemName"].ToString() == "入库日期")
  1325. {
  1326. MTime = "a.InDate";
  1327. }
  1328. else if (mtimedt.Rows[0]["F_ItemName"].ToString() == "批次")
  1329. {
  1330. MTime = "isnull(c.Batchcode ,'0')";
  1331. }
  1332. string sqlwhere = @"where a.invcode = '{0}' AND D.TransCode ='{" + TransCode + "}' and D.TransSequence='" + TransSequence + "'";
  1333. string sqlpick = @"";
  1334. if (BusinessCode == "11")
  1335. {
  1336. BusinessCode = "60"; TransType = "13";
  1337. sqlwhere = @"select a.lotno,a.invcode,sum(D.quantity ) as quantity into #barcodetemp
  1338. from
  1339. ICSWareHouseLotInfoLOG D
  1340. inner JOIN ICSWareHouseLotInfo a on a.lotno = d.lotno
  1341. inner JOIN ICSInventoryLot b on a.lotno = b.lotno
  1342. inner join ICSODeliveryNotice e on e.ODNCode = d.TransCode and e.Sequence = '" + TransSequence + @"'
  1343. inner join ICSOOPick f on f.OODetailID = e.ODNDetailID and d.TransSequence=e.Sequence+'~'+f.Sequence
  1344. inner join ICSExtension g on g.id=b.ExtensionID
  1345. where d.invcode = '{0}' AND D.TransCode ='" + TransCode + @"' and businesscode ='60' and g.batchcode ='"+ Batch + @"'
  1346. group by a.lotno,a.invcode";
  1347. sqlpick = @"update f set f.IssueQuantity=f.IssueQuantity-"+ Math.Abs(Convert.ToDecimal(Quantity)) + @"
  1348. from ICSODeliveryNotice e
  1349. inner join ICSOOPick f on f.OODetailID = e.ODNDetailID
  1350. where e.ODNCode ='" + TransCode + @"' and e.Sequence = '" + TransSequence + @"'";
  1351. } else { BusinessCode = "61"; TransType = "12"; }
  1352. #region 倒冲
  1353. #region sql
  1354. //and c.batchcode ='{1}' and c.cfree1='{2}'
  1355. string sql = @"--从原倒冲出库的log里捞出库数据
  1356. {9}
  1357. IF NOT EXISTS(SELECT 1 FROM #barcodetemp)
  1358. BEGIN
  1359. RAISERROR('',16,1)
  1360. RETURN;
  1361. END
  1362. -- 3.maintemp ID barcodetemp
  1363. BEGIN
  1364. DECLARE @qty DECIMAL(18,6);--
  1365. DECLARE @needqty DECIMAL(18,6);--
  1366. DECLARE @lotno VARCHAR(50);--
  1367. DECLARE @Mtime VARCHAR(50);--
  1368. --
  1369. set @needqty = {4}
  1370. DECLARE tempCursor CURSOR FOR (select lotno from #barcodetemp ); --tempCursor
  1371. OPEN tempCursor; --
  1372. FETCH NEXT FROM tempCursor INTO @Mtime; --
  1373. WHILE @@fetch_status=0
  1374. BEGIN
  1375. IF @needqty>0
  1376. BEGIN
  1377. select top 1 @qty = isnull(quantity,0),@lotno = isnull(lotno,'') from #barcodetemp a where lotno =@Mtime
  1378. BEGIN
  1379. IF(@needqty-@qty>=0 and ISNULL(@lotno, '')<>'')--
  1380. BEGIN
  1381. -- @qty
  1382. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  1383. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  1384. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  1385. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  1386. MTIME,WorkPoint,EATTRIBUTE1,MergeID,EATTRIBUTE3,EATTRIBUTE4)
  1387. SELECT NEWID(),'{5}','{10}','{11}',@lotno ,a.InvCode ,
  1388. c.WarehouseCode,c.LocationCode,c.WarehouseCode,c.LocationCode,-@qty,
  1389. '','0','{12}','{15}','1','{6}',
  1390. '{1}','{13}','{14}',f.F_Account ,f.F_RealName ,
  1391. SYSDATETIME() ,a.WorkPoint ,'','','',''
  1392. FROM ICSInventoryLot a
  1393. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  1394. INNER JOIN Sys_SRM_User f ON f.F_Account='{7}' AND a.WorkPoint=f.F_Location
  1395. WHERE a.LotNo=@lotno AND a.WorkPoint='{8}'
  1396. --
  1397. UPDATE ICSWareHouseLotInfo set Quantity = Quantity+@qty where lotno = @lotno
  1398. SET @needqty=@needqty-@qty
  1399. END
  1400. ELSE IF(@needqty-@qty<0 and ISNULL(@lotno, '')<>'')
  1401. BEGIN
  1402. -- @qty
  1403. -- @qty
  1404. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  1405. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  1406. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  1407. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  1408. MTIME,WorkPoint,EATTRIBUTE1,MergeID,EATTRIBUTE3,EATTRIBUTE4)
  1409. SELECT NEWID(),'{5}','{10}','{11}',@lotno ,a.InvCode ,
  1410. c.WarehouseCode,c.LocationCode,c.WarehouseCode,c.LocationCode,-@needqty,
  1411. '','0','{12}','{15}','1','{6}',
  1412. '{1}','{13}','{14}',f.F_Account ,f.F_RealName ,
  1413. SYSDATETIME() ,a.WorkPoint ,'','','',''
  1414. FROM ICSInventoryLot a
  1415. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  1416. INNER JOIN Sys_SRM_User f ON f.F_Account='{7}' AND a.WorkPoint=f.F_Location
  1417. WHERE a.LotNo=@lotno AND a.WorkPoint='{8}'
  1418. --
  1419. update ICSWareHouseLotInfo set quantity = quantity+@needqty where lotno = @lotno
  1420. SET @needqty=@needqty-@qty
  1421. END
  1422. END
  1423. END
  1424. FETCH NEXT FROM tempCursor INTO @Mtime;
  1425. END
  1426. CLOSE tempCursor
  1427. DEALLOCATE tempCursor
  1428. {16}
  1429. END
  1430. DROP table #barcodetemp";
  1431. sqlwhere = string.Format(sqlwhere, InvCode, "", "", WHCode);
  1432. sql = string.Format(sql, InvCode, ERPDetailID, MTime, WHCode,
  1433. Math.Abs(Convert.ToDecimal(Quantity)), Identification, ERPID, User, WorkPoint, sqlwhere, TransCode, TransSequence, TransType, ERPCode, ERPSequence,BusinessCode, sqlpick);
  1434. #endregion
  1435. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  1436. {
  1437. throw new Exception(language.GetNameByCode("WMSAPIInfo200"));//"倒冲出错!"
  1438. }
  1439. #endregion
  1440. }
  1441. catch (Exception)
  1442. {
  1443. throw;
  1444. }
  1445. }
  1446. public static void WareHouseLotInfoBackInMF(string Identification,
  1447. string TransCode, string TransSequence, string InvCode, string WHCode, string Quantity, string User,
  1448. string WorkPoint, string TransType, string BusinessCode, string ERPID, string ERPDetailID, string ERPCode, string ERPSequence,
  1449. string cFree1, string cFree2, string cFree3, string cFree4, string cFree5, string cFree6, string cFree7, string cFree8, string cFree9, string cFree10,
  1450. string ProjectCode, string Batch, string Version, string Brand, string PickID,
  1451. SqlCommand cmd, Dictionary<string, string> language)
  1452. {
  1453. try
  1454. {
  1455. string MTime = string.Empty;
  1456. string LocaCode = string.Empty;
  1457. //1.查询先进先出字段
  1458. string mtimeSql = @"SELECT Top 1 a.F_ItemName
  1459. FROM Sys_SRM_ItemsDetail a
  1460. INNER JOIN Sys_SRM_Items b ON a.F_ItemId=b.F_Id
  1461. WHERE b.F_EnCode='MtimeControl' AND a.F_EnabledMark='1'
  1462. ORDER BY a.F_SortCode DESc";
  1463. DataTable mtimedt = DBHelper.SQlReturnData(mtimeSql, cmd);
  1464. if (mtimedt.Rows[0]["F_ItemName"].ToString() == "失效日期")
  1465. {
  1466. MTime = "ISNULL(b.ExpirationDate,b.ProductDate)";
  1467. }
  1468. else if (mtimedt.Rows[0]["F_ItemName"].ToString() == "生产日期")
  1469. {
  1470. MTime = "b.ProductDate";
  1471. }
  1472. else if (mtimedt.Rows[0]["F_ItemName"].ToString() == "入库日期")
  1473. {
  1474. MTime = "a.InDate";
  1475. }
  1476. else if (mtimedt.Rows[0]["F_ItemName"].ToString() == "批次")
  1477. {
  1478. MTime = "isnull(c.Batchcode ,'0')";
  1479. }
  1480. string sqlwhere = @"where a.invcode = '{0}' AND D.TransCode ='{" + TransCode + "}' and D.TransSequence='" + TransSequence + "'";
  1481. string sqlpick = @"";
  1482. if (BusinessCode == "11")
  1483. {
  1484. BusinessCode = "60"; TransType = "13";
  1485. sqlwhere = @"select a.lotno,a.invcode,sum(a.quantity ) as quantity into #barcodetemp
  1486. from ICSWareHouseLotInfo a
  1487. inner JOIN ICSInventoryLot b on a.lotno = b.lotno
  1488. inner join ICSOOPick f on f.PickID = '" + PickID + @"' and a.WarehouseCode = f.WHCode and a.invcode = f.InvCode
  1489. inner join ICSExtension g on g.id=b.ExtensionID
  1490. where a.invcode = '{0}' and g.batchcode ='" + Batch + @"'
  1491. group by a.lotno,a.invcode";
  1492. sqlpick = @"update f set f.IssueQuantity=f.IssueQuantity-" + Math.Abs(Convert.ToDecimal(Quantity)) + @"
  1493. from ICSODeliveryNotice e
  1494. inner join ICSOOPick f on f.OODetailID = e.ODNDetailID
  1495. where e.ODNCode ='" + TransCode + @"' and e.Sequence = '" + TransSequence + @"'";
  1496. }
  1497. else { BusinessCode = "61"; TransType = "12"; }
  1498. #region 倒冲
  1499. #region sql
  1500. //and c.batchcode ='{1}' and c.cfree1='{2}'
  1501. string sql = @"--从原倒冲出库的log里捞出库数据
  1502. {9}
  1503. IF NOT EXISTS(SELECT 1 FROM #barcodetemp)
  1504. BEGIN
  1505. RAISERROR('',16,1)
  1506. RETURN;
  1507. END
  1508. -- 3.maintemp ID barcodetemp
  1509. BEGIN
  1510. DECLARE @qty DECIMAL(18,6);--
  1511. DECLARE @needqty DECIMAL(18,6);--
  1512. DECLARE @lotno VARCHAR(50);--
  1513. DECLARE @Mtime VARCHAR(50);--
  1514. --
  1515. set @needqty = {4}
  1516. DECLARE tempCursor CURSOR FOR (select lotno from #barcodetemp ); --tempCursor
  1517. OPEN tempCursor; --
  1518. FETCH NEXT FROM tempCursor INTO @Mtime; --
  1519. WHILE @@fetch_status=0
  1520. BEGIN
  1521. IF @needqty>0
  1522. BEGIN
  1523. select top 1 @qty = @needqty,@lotno = isnull(lotno,'') from #barcodetemp a where lotno =@Mtime
  1524. BEGIN
  1525. IF(@needqty-@qty>=0 and ISNULL(@lotno, '')<>'')--
  1526. BEGIN
  1527. -- @qty
  1528. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  1529. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  1530. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  1531. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  1532. MTIME,WorkPoint,EATTRIBUTE1,MergeID,EATTRIBUTE3,EATTRIBUTE4)
  1533. SELECT NEWID(),'{5}','{10}','{11}',@lotno ,a.InvCode ,
  1534. c.WarehouseCode,c.LocationCode,c.WarehouseCode,c.LocationCode,-@qty,
  1535. '','0','{12}','{15}','1','{6}',
  1536. '{1}','{13}','{14}',f.F_Account ,f.F_RealName ,
  1537. SYSDATETIME() ,a.WorkPoint ,'','','',''
  1538. FROM ICSInventoryLot a
  1539. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  1540. INNER JOIN Sys_SRM_User f ON f.F_Account='{7}' AND a.WorkPoint=f.F_Location
  1541. WHERE a.LotNo=@lotno AND a.WorkPoint='{8}'
  1542. --
  1543. UPDATE ICSWareHouseLotInfo set Quantity = Quantity+@qty where lotno = @lotno
  1544. SET @needqty=@needqty-@qty
  1545. END
  1546. ELSE IF(@needqty-@qty<0 and ISNULL(@lotno, '')<>'')
  1547. BEGIN
  1548. -- @qty
  1549. -- @qty
  1550. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  1551. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  1552. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  1553. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  1554. MTIME,WorkPoint,EATTRIBUTE1,MergeID,EATTRIBUTE3,EATTRIBUTE4)
  1555. SELECT NEWID(),'{5}','{10}','{11}',@lotno ,a.InvCode ,
  1556. c.WarehouseCode,c.LocationCode,c.WarehouseCode,c.LocationCode,-@needqty,
  1557. '','0','{12}','{15}','1','{6}',
  1558. '{1}','{13}','{14}',f.F_Account ,f.F_RealName ,
  1559. SYSDATETIME() ,a.WorkPoint ,'','','',''
  1560. FROM ICSInventoryLot a
  1561. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  1562. INNER JOIN Sys_SRM_User f ON f.F_Account='{7}' AND a.WorkPoint=f.F_Location
  1563. WHERE a.LotNo=@lotno AND a.WorkPoint='{8}'
  1564. --
  1565. update ICSWareHouseLotInfo set quantity = quantity+@needqty where lotno = @lotno
  1566. SET @needqty=@needqty-@qty
  1567. END
  1568. END
  1569. END
  1570. FETCH NEXT FROM tempCursor INTO @Mtime;
  1571. END
  1572. CLOSE tempCursor
  1573. DEALLOCATE tempCursor
  1574. {16}
  1575. END
  1576. DROP table #barcodetemp";
  1577. sqlwhere = string.Format(sqlwhere, InvCode, "", "", WHCode);
  1578. sql = string.Format(sql, InvCode, ERPDetailID, MTime, WHCode,
  1579. Math.Abs(Convert.ToDecimal(Quantity)), Identification, ERPID, User, WorkPoint, sqlwhere, TransCode, TransSequence, TransType, ERPCode, ERPSequence, BusinessCode, sqlpick);
  1580. #endregion
  1581. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  1582. {
  1583. throw new Exception(language.GetNameByCode("WMSAPIInfo200"));//"倒冲出错!"
  1584. }
  1585. #endregion
  1586. }
  1587. catch (Exception)
  1588. {
  1589. throw;
  1590. }
  1591. }
  1592. /// <summary>
  1593. /// 倒冲前检验数量
  1594. /// </summary>
  1595. /// <param name="LocationCode"></param>
  1596. /// <param name="LotNo"></param>
  1597. /// <param name="Quantity"></param>
  1598. /// <param name="User"></param>
  1599. /// <param name="WorkPoint"></param>
  1600. /// <param name="TransType"></param>
  1601. /// <param name="BusinessCode"></param>
  1602. /// <param name="cmd"></param>
  1603. /// <param name="jointLotNo"></param>
  1604. public static void WareHouseLotInfoBackOutBefore(string Identification, string LocationCode, string LotNo, string Quantity, string User,
  1605. string WorkPoint, string TransType, string BusinessCode, SqlCommand cmd, Dictionary<string, string> language, string LogID, string jointLotNo, string TransCode, string TransSequence)
  1606. {
  1607. try
  1608. {
  1609. string sql = string.Empty;
  1610. string LocaCode = "";
  1611. string DisVenCode = "";
  1612. string ssql = @"SELECT a.ODNCode,a.Sequence,a.WorkPoint,a.VenCode
  1613. FROM ICSODeliveryNotice a
  1614. WHERE a.ODNCode='{0}' AND a.WorkPoint='{1}'";
  1615. ssql = string.Format(ssql, TransCode, WorkPoint);
  1616. DataTable ssdt = DBHelper.SQlReturnData(ssql, cmd);
  1617. if (ssdt.Rows.Count > 0)
  1618. {
  1619. DisVenCode = ssdt.Rows[0]["VenCode"].ToString();
  1620. }
  1621. string cheksql = @"select b.F_ItemCode as VenCode ,b.F_ItemName as Name,b.F_EnabledMark AS Enable ,b.F_Define1 AS LocationCode
  1622. from Sys_SRM_Items a
  1623. left join Sys_SRM_ItemsDetail b on a.F_Id=b.F_ItemId
  1624. where a.F_EnCode='WWLocation' AND b.F_ItemCode='{0}'
  1625. ";
  1626. cheksql = string.Format(cheksql, DisVenCode);
  1627. DataTable chekdt = DBHelper.SQlReturnData(cheksql, cmd);
  1628. if (chekdt.Rows.Count > 0)
  1629. {
  1630. LocaCode = chekdt.Rows[0]["LocationCode"].ToString();
  1631. }
  1632. string chekscsql = @"SELECT a.InvCode FROM ICSMOPick a
  1633. inner join ICSMO c on a.MODetailID=c.MODetailID and a.WorkPoint=c.WorkPoint
  1634. LEFT JOIN ICSINVENTORY b ON a.InvCode = b.InvCode AND a.WorkPoint=b.WorkPoint
  1635. INNER JOIN ICSExtension ext ON a.ExtensionID=ext.ID AND a.WorkPoint=ext.WorkPoint
  1636. INNER JOIN ICSInventoryLotDetail d ON c.OOCode=d.TransCode AND c.Sequence=d.TransSequence and c.WorkPoint=d.WorkPoint
  1637. where d.LotNo='{0}' and a.WorkPoint='{1}' and a.SupplyType='1' and a.quantity>0";
  1638. chekscsql = string.Format(chekscsql, LotNo, WorkPoint);
  1639. DataTable chekcdts = DBHelper.SQlReturnData(chekscsql, cmd);
  1640. for (int i = 0; i < chekcdts.Rows.Count; i++)
  1641. {
  1642. #region 成品(生产)入库,倒冲
  1643. if (BusinessCode.Equals(TransTypeEnum.ManufactureReceiveDoc.GetDescription<DBValue>()))
  1644. {
  1645. #region sql
  1646. sql = @"-- 1.创建临时表 初始单据数据 maintemp
  1647. SELECT
  1648. c.MOCode AS TransCode,
  1649. a.MODetailID AS DetailID,
  1650. a.InvCode,
  1651. b.InvName,
  1652. b.InvStd,
  1653. a.Quantity AS Quantity,
  1654. a.Amount,
  1655. a.Sequence AS TransSequence,
  1656. a.IssueQuantity,
  1657. c.Sequence,
  1658. inv.InvUnit,
  1659. cast(0 as decimal(18,6)) AS LocationQty,
  1660. inv.AmountUnit,
  1661. a.ExtensionID,
  1662. a.WorkPoint,
  1663. ext.ProjectCode,
  1664. CASE WHEN ISNULL(inv.BatchEnable, '0')='1' THEN ext.BatchCode ELSE '' END AS BatchCode,
  1665. ext.Version,
  1666. ext.Brand,
  1667. ext.cFree1,
  1668. ext.cFree2,
  1669. ext.cFree3,
  1670. ext.cFree4,
  1671. ext.cFree5,
  1672. ext.cFree6,
  1673. ext.cFree7,
  1674. ext.cFree8,
  1675. ext.cFree9,
  1676. ext.cFree10,a.WHCODE
  1677. INTO #maintemp
  1678. FROM
  1679. ICSMOPick a
  1680. inner join ICSMO c on a.MODetailID=c.MODetailID and a.WorkPoint=c.WorkPoint
  1681. LEFT JOIN ICSINVENTORY b ON a.InvCode = b.InvCode AND a.WorkPoint=b.WorkPoint
  1682. INNER JOIN ICSExtension ext ON a.ExtensionID=ext.ID AND a.WorkPoint=ext.WorkPoint
  1683. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  1684. INNER JOIN (
  1685. SELECT a.MOCode,a.Sequence,a.WorkPoint
  1686. FROM ICSMO a
  1687. INNER JOIN ICSInventoryLotDetail b ON b.TransCode=a.MOCode AND b.TransSequence=a.Sequence AND b.WorkPoint=a.WorkPoint
  1688. INNER JOIN ICSInventoryLot c ON c.LotNo=b.LotNo AND c.WorkPoint=b.WorkPoint
  1689. WHERE c.LotNo='{0}' AND c.WorkPoint='{1}'
  1690. ) temp ON c.MOCode=temp.MOCode AND a.WorkPoint=temp.WorkPoint AND c.Sequence=temp.Sequence
  1691. WHERE a.SupplyType='1' and a.invcode='{2}'
  1692. 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,
  1693. 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;
  1694. select * into #resulttemp from #maintemp
  1695. ALTER TABLE #resulttemp ADD LotNo VARCHAR(50)
  1696. delete from #resulttemp
  1697. -- 2.maintemp barcodetemp
  1698. 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
  1699. (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
  1700. -- 3.maintemp ID barcodetemp
  1701. BEGIN
  1702. DECLARE @transSequence int;--
  1703. DECLARE @qty decimal(18,6);--
  1704. DECLARE @needqty decimal(18,6);--
  1705. DECLARE @lotno VARCHAR(50);--
  1706. DECLARE @DetailID VARCHAR(50);--ID
  1707. DECLARE tempCursor CURSOR FOR (select transSequence,DetailID from #maintemp); --tempCursor
  1708. OPEN tempCursor; --
  1709. FETCH NEXT FROM tempCursor INTO @transSequence,@DetailID; --
  1710. WHILE @@fetch_status=0
  1711. BEGIN
  1712. select @needqty=Quantity from #maintemp where transSequence = @transSequence AND DetailID = @DetailID
  1713. PRINT @transSequence
  1714. WHILE @needqty>0
  1715. BEGIN
  1716. select top 1 @qty = isnull(quantity,0),@lotno = isnull(lotno,'') from #barcodetemp a
  1717. RIGHT JOIN (select invcode from #maintemp where transSequence = @transSequence AND DetailID = @DetailID) b on a.invcode=b.invcode ORDER BY mtime
  1718. BEGIN
  1719. IF(@needqty-@qty>=0 and ISNULL(@lotno, '')<>'')
  1720. BEGIN
  1721. insert INTO #resulttemp (lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity,Quantity,
  1722. Amount,InvCode,InvName,InvStd,InvUnit,LocationQty,AmountUnit,
  1723. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint)
  1724. SELECT @lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity, Quantity,
  1725. ISNULL(Amount, 0), InvCode,InvName,ISNULL(InvStd, ''),InvUnit,@qty,ISNULL(AmountUnit, ''),
  1726. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint from #maintemp
  1727. where #maintemp.transSequence = @transSequence AND DetailID = @DetailID
  1728. delete from #barcodetemp where lotno = @lotno
  1729. SET @needqty=@needqty-@qty
  1730. END
  1731. ELSE IF(@needqty-@qty<0 and ISNULL(@lotno, '')<>'')
  1732. BEGIN
  1733. insert INTO #resulttemp (lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity,Quantity,
  1734. Amount,InvCode,InvName,InvStd,InvUnit,LocationQty,AmountUnit,
  1735. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint)
  1736. SELECT @lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity, Quantity,
  1737. ISNULL(Amount, 0),InvCode,InvName,ISNULL(InvStd, ''),InvUnit,@needqty,ISNULL(AmountUnit, ''),
  1738. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint from #maintemp
  1739. where #maintemp.transSequence = @transSequence AND DetailID = @DetailID
  1740. update #barcodetemp set quantity = @qty-@needqty where lotno = @lotno
  1741. SET @needqty=@needqty-@qty
  1742. END
  1743. ELSE
  1744. BEGIN
  1745. insert INTO #resulttemp (lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity,Quantity,
  1746. Amount,InvCode,InvName,InvStd,InvUnit,LocationQty,AmountUnit,
  1747. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint)
  1748. SELECT @lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity, Quantity,
  1749. ISNULL(Amount, 0),InvCode,InvName,ISNULL(InvStd, ''),InvUnit,0,ISNULL(AmountUnit, ''),
  1750. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint from #maintemp
  1751. where #maintemp.transSequence = @transSequence AND DetailID = @DetailID
  1752. SET @needqty=0
  1753. END
  1754. END
  1755. END
  1756. FETCH NEXT FROM tempCursor INTO @transSequence,@DetailID;
  1757. END
  1758. CLOSE tempCursor
  1759. DEALLOCATE tempCursor
  1760. END
  1761. select TransCode,LotNo,LocationQty AS Quantity,InvCode,DetailID,Sequence,TransSequence from #resulttemp
  1762. --select * from #resulttemp
  1763. DROP table #maintemp
  1764. DROP table #resulttemp
  1765. DROP table #barcodetemp";
  1766. #endregion
  1767. sql = String.Format(sql, LotNo, WorkPoint, Quantity, chekcdts.Rows[i]["InvCode"].ToString());
  1768. DataTable table = DBHelper.SQlReturnData(sql, cmd);
  1769. string json = JsonConvert.SerializeObject(table);
  1770. List<DownItemModel> downItemModels = JsonConvert.DeserializeObject<List<DownItemModel>>(json);
  1771. if (downItemModels.Count == 0)
  1772. {
  1773. throw new Exception(language.GetNameByCode("WMSAPIInfo201"));
  1774. }
  1775. //foreach (DownItemModel model in downItemModels)
  1776. //{
  1777. // if (model != null && model.LotNo == null || "" == model.LotNo)
  1778. // {
  1779. // throw new Exception(language.GetNameByCode("WMSAPIInfo201"));
  1780. // }
  1781. //}
  1782. }
  1783. #endregion
  1784. }
  1785. string chekcsql = @"SELECT a.InvCode FROM ICSOOPick a
  1786. inner join ICSOutsourcingOrder c on a.OODetailID=c.OODetailID and a.WorkPoint=c.WorkPoint
  1787. LEFT JOIN ICSINVENTORY b ON a.InvCode = b.InvCode AND a.WorkPoint=b.WorkPoint
  1788. INNER JOIN ICSExtension ext ON a.ExtensionID=ext.ID AND a.WorkPoint=ext.WorkPoint
  1789. INNER JOIN ICSInventoryLotDetail d ON c.OOCode=d.TransCode AND c.Sequence=d.TransSequence and c.WorkPoint=d.WorkPoint
  1790. where d.LotNo='{0}' and a.WorkPoint='{1}' and a.SupplyType='1' and a.quantity>0";
  1791. chekcsql = string.Format(chekcsql, LotNo, WorkPoint);
  1792. DataTable chekcdt = DBHelper.SQlReturnData(chekcsql, cmd);
  1793. for (int i = 0; i < chekcdt.Rows.Count; i++)
  1794. {
  1795. #region 委外入库,倒冲
  1796. if (BusinessCode.Equals(TransTypeEnum.OutsourcingReceiveDoc.GetDescription<DBValue>())|| BusinessCode.Equals(TransTypeEnum.ODeliveryNotice.GetDescription<DBValue>()))
  1797. {
  1798. if (LocaCode.Equals(""))
  1799. {
  1800. #region sql
  1801. sql = @"-- 1.创建临时表 初始单据数据 maintemp
  1802. SELECT
  1803. c.OOCode AS TransCode,
  1804. a.OODetailID AS DetailID,
  1805. a.InvCode,
  1806. b.InvName,
  1807. b.InvStd,
  1808. a.Quantity AS Quantity,
  1809. a.Amount,
  1810. a.Sequence AS TransSequence,
  1811. a.IssueQuantity,
  1812. c.Sequence,
  1813. inv.InvUnit,
  1814. cast(0 as decimal(18,6)) AS LocationQty,
  1815. inv.AmountUnit,
  1816. a.ExtensionID,
  1817. a.WorkPoint,
  1818. ext.ProjectCode,
  1819. CASE WHEN ISNULL(inv.BatchEnable, '0')='1' THEN ext.BatchCode ELSE '' END AS BatchCode,
  1820. ext.Version,
  1821. ext.Brand,
  1822. ext.cFree1,
  1823. ext.cFree2,
  1824. ext.cFree3,
  1825. ext.cFree4,
  1826. ext.cFree5,
  1827. ext.cFree6,
  1828. ext.cFree7,
  1829. ext.cFree8,
  1830. ext.cFree9,
  1831. ext.cFree10,a.WHCODE
  1832. INTO #maintemp
  1833. FROM
  1834. ICSOOPick a
  1835. inner join ICSOutsourcingOrder c on a.OODetailID=c.OODetailID and a.WorkPoint=c.WorkPoint
  1836. LEFT JOIN ICSINVENTORY b ON a.InvCode = b.InvCode AND a.WorkPoint=b.WorkPoint
  1837. INNER JOIN ICSExtension ext ON a.ExtensionID=ext.ID AND a.WorkPoint=ext.WorkPoint
  1838. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  1839. INNER JOIN (
  1840. SELECT a.OOCode,a.Sequence,a.WorkPoint
  1841. FROM ICSOutsourcingOrder a
  1842. INNER JOIN ICSInventoryLotDetail b ON b.TransCode=a.OOCode AND b.TransSequence=a.Sequence AND b.WorkPoint=a.WorkPoint
  1843. INNER JOIN ICSInventoryLot c ON c.LotNo=b.LotNo AND c.WorkPoint=b.WorkPoint
  1844. WHERE c.LotNo='{0}' AND c.WorkPoint='{1}'
  1845. ) temp ON c.OOCode=temp.OOCode AND a.WorkPoint=temp.WorkPoint AND c.Sequence=temp.Sequence
  1846. WHERE a.SupplyType='1' and a.invcode='{4}'
  1847. 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,
  1848. 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;
  1849. select * into #resulttemp from #maintemp
  1850. ALTER TABLE #resulttemp ADD LotNo VARCHAR(50)
  1851. delete from #resulttemp
  1852. -- 2.maintemp barcodetemp
  1853. 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
  1854. (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
  1855. -- 3.maintemp ID barcodetemp
  1856. BEGIN
  1857. DECLARE @transSequence int;--
  1858. DECLARE @qty decimal(18,6);--
  1859. DECLARE @needqty decimal(18,6);--
  1860. DECLARE @lotno VARCHAR(50);--
  1861. DECLARE @DetailID VARCHAR(50);--ID
  1862. DECLARE tempCursor CURSOR FOR (select transSequence,DetailID from #maintemp); --tempCursor
  1863. OPEN tempCursor; --
  1864. FETCH NEXT FROM tempCursor INTO @transSequence,@DetailID; --
  1865. WHILE @@fetch_status=0
  1866. BEGIN
  1867. select @needqty=Quantity from #maintemp where transSequence = @transSequence AND DetailID = @DetailID
  1868. PRINT @transSequence
  1869. WHILE @needqty>0
  1870. BEGIN
  1871. select top 1 @qty = isnull(quantity,0),@lotno = isnull(lotno,'') from #barcodetemp a
  1872. RIGHT JOIN (select invcode from #maintemp where transSequence = @transSequence AND DetailID = @DetailID) b on a.invcode=b.invcode ORDER BY mtime
  1873. BEGIN
  1874. IF(@needqty-@qty>=0 and ISNULL(@lotno, '')<>'')
  1875. BEGIN
  1876. insert INTO #resulttemp (lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity,Quantity,
  1877. Amount,InvCode,InvName,InvStd,InvUnit,LocationQty,AmountUnit,
  1878. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint)
  1879. SELECT @lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity, Quantity,
  1880. ISNULL(Amount, 0), InvCode,InvName,ISNULL(InvStd, ''),InvUnit,@qty,ISNULL(AmountUnit, ''),
  1881. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint from #maintemp
  1882. where #maintemp.transSequence = @transSequence AND DetailID = @DetailID
  1883. delete from #barcodetemp where lotno = @lotno
  1884. SET @needqty=@needqty-@qty
  1885. END
  1886. ELSE IF(@needqty-@qty<0 and ISNULL(@lotno, '')<>'')
  1887. BEGIN
  1888. insert INTO #resulttemp (lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity,Quantity,
  1889. Amount,InvCode,InvName,InvStd,InvUnit,LocationQty,AmountUnit,
  1890. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint)
  1891. SELECT @lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity, Quantity,
  1892. ISNULL(Amount, 0),InvCode,InvName,ISNULL(InvStd, ''),InvUnit,@needqty,ISNULL(AmountUnit, ''),
  1893. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint from #maintemp
  1894. where #maintemp.transSequence = @transSequence AND DetailID = @DetailID
  1895. update #barcodetemp set quantity = @qty-@needqty where lotno = @lotno
  1896. SET @needqty=@needqty-@qty
  1897. END
  1898. ELSE
  1899. BEGIN
  1900. insert INTO #resulttemp (lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity,Quantity,
  1901. Amount,InvCode,InvName,InvStd,InvUnit,LocationQty,AmountUnit,
  1902. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint)
  1903. SELECT @lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity, Quantity,
  1904. ISNULL(Amount, 0),InvCode,InvName,ISNULL(InvStd, ''),InvUnit,0,ISNULL(AmountUnit, ''),
  1905. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint from #maintemp
  1906. where #maintemp.transSequence = @transSequence AND DetailID = @DetailID
  1907. SET @needqty=0
  1908. END
  1909. END
  1910. END
  1911. FETCH NEXT FROM tempCursor INTO @transSequence,@DetailID;
  1912. END
  1913. CLOSE tempCursor
  1914. DEALLOCATE tempCursor
  1915. END
  1916. select TransCode,LotNo,LocationQty AS Quantity,InvCode,DetailID,Sequence,TransSequence from #resulttemp
  1917. --select * from #resulttemp
  1918. DROP table #maintemp
  1919. DROP table #resulttemp
  1920. DROP table #barcodetemp";
  1921. #endregion
  1922. }
  1923. else
  1924. {
  1925. #region sql
  1926. sql = @"-- 1.创建临时表 初始单据数据 maintemp
  1927. SELECT
  1928. c.OOCode AS TransCode,
  1929. a.OODetailID AS DetailID,
  1930. a.InvCode,
  1931. b.InvName,
  1932. b.InvStd,
  1933. a.Quantity AS Quantity,
  1934. a.Amount,
  1935. a.Sequence AS TransSequence,
  1936. a.IssueQuantity,
  1937. c.Sequence,
  1938. inv.InvUnit,
  1939. cast(0 as decimal(18,6)) AS LocationQty,
  1940. inv.AmountUnit,
  1941. a.ExtensionID,
  1942. a.WorkPoint,
  1943. ext.ProjectCode,
  1944. CASE WHEN ISNULL(inv.BatchEnable, '0')='1' THEN ext.BatchCode ELSE '' END AS BatchCode,
  1945. ext.Version,
  1946. ext.Brand,
  1947. ext.cFree1,
  1948. ext.cFree2,
  1949. ext.cFree3,
  1950. ext.cFree4,
  1951. ext.cFree5,
  1952. ext.cFree6,
  1953. ext.cFree7,
  1954. ext.cFree8,
  1955. ext.cFree9,
  1956. ext.cFree10,a.WHCODE
  1957. INTO #maintemp
  1958. FROM
  1959. ICSOOPick a
  1960. inner join ICSOutsourcingOrder c on a.OODetailID=c.OODetailID and a.WorkPoint=c.WorkPoint
  1961. LEFT JOIN ICSINVENTORY b ON a.InvCode = b.InvCode AND a.WorkPoint=b.WorkPoint
  1962. INNER JOIN ICSExtension ext ON a.ExtensionID=ext.ID AND a.WorkPoint=ext.WorkPoint
  1963. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  1964. INNER JOIN (
  1965. SELECT a.OOCode,a.Sequence,a.WorkPoint
  1966. FROM ICSOutsourcingOrder a
  1967. INNER JOIN ICSInventoryLotDetail b ON b.TransCode=a.OOCode AND b.TransSequence=a.Sequence AND b.WorkPoint=a.WorkPoint
  1968. INNER JOIN ICSInventoryLot c ON c.LotNo=b.LotNo AND c.WorkPoint=b.WorkPoint
  1969. WHERE c.LotNo='{0}' AND c.WorkPoint='{1}'
  1970. ) temp ON c.OOCode=temp.OOCode AND a.WorkPoint=temp.WorkPoint AND c.Sequence=temp.Sequence
  1971. WHERE a.SupplyType='1' and a.invcode='{4}'
  1972. 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,
  1973. 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;
  1974. select * into #resulttemp from #maintemp
  1975. ALTER TABLE #resulttemp ADD LotNo VARCHAR(50)
  1976. delete from #resulttemp
  1977. -- 2.maintemp barcodetemp
  1978. 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
  1979. (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
  1980. -- 3.maintemp ID barcodetemp
  1981. BEGIN
  1982. DECLARE @transSequence int;--
  1983. DECLARE @qty decimal(18,6);--
  1984. DECLARE @needqty decimal(18,6);--
  1985. DECLARE @lotno VARCHAR(50);--
  1986. DECLARE @DetailID VARCHAR(50);--ID
  1987. DECLARE tempCursor CURSOR FOR (select transSequence,DetailID from #maintemp); --tempCursor
  1988. OPEN tempCursor; --
  1989. FETCH NEXT FROM tempCursor INTO @transSequence,@DetailID; --
  1990. WHILE @@fetch_status=0
  1991. BEGIN
  1992. select @needqty=Quantity from #maintemp where transSequence = @transSequence AND DetailID = @DetailID
  1993. PRINT @transSequence
  1994. WHILE @needqty>0
  1995. BEGIN
  1996. select top 1 @qty = isnull(quantity,0),@lotno = isnull(lotno,'') from #barcodetemp a
  1997. RIGHT JOIN (select invcode from #maintemp where transSequence = @transSequence AND DetailID = @DetailID) b on a.invcode=b.invcode ORDER BY mtime
  1998. BEGIN
  1999. IF(@needqty-@qty>=0 and ISNULL(@lotno, '')<>'')
  2000. BEGIN
  2001. insert INTO #resulttemp (lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity,Quantity,
  2002. Amount,InvCode,InvName,InvStd,InvUnit,LocationQty,AmountUnit,
  2003. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint)
  2004. SELECT @lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity, Quantity,
  2005. ISNULL(Amount, 0), InvCode,InvName,ISNULL(InvStd, ''),InvUnit,@qty,ISNULL(AmountUnit, ''),
  2006. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint from #maintemp
  2007. where #maintemp.transSequence = @transSequence AND DetailID = @DetailID
  2008. delete from #barcodetemp where lotno = @lotno
  2009. SET @needqty=@needqty-@qty
  2010. END
  2011. ELSE IF(@needqty-@qty<0 and ISNULL(@lotno, '')<>'')
  2012. BEGIN
  2013. insert INTO #resulttemp (lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity,Quantity,
  2014. Amount,InvCode,InvName,InvStd,InvUnit,LocationQty,AmountUnit,
  2015. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint)
  2016. SELECT @lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity, Quantity,
  2017. ISNULL(Amount, 0),InvCode,InvName,ISNULL(InvStd, ''),InvUnit,@needqty,ISNULL(AmountUnit, ''),
  2018. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint from #maintemp
  2019. where #maintemp.transSequence = @transSequence AND DetailID = @DetailID
  2020. update #barcodetemp set quantity = @qty-@needqty where lotno = @lotno
  2021. SET @needqty=@needqty-@qty
  2022. END
  2023. ELSE
  2024. BEGIN
  2025. insert INTO #resulttemp (lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity,Quantity,
  2026. Amount,InvCode,InvName,InvStd,InvUnit,LocationQty,AmountUnit,
  2027. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint)
  2028. SELECT @lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity, Quantity,
  2029. ISNULL(Amount, 0),InvCode,InvName,ISNULL(InvStd, ''),InvUnit,0,ISNULL(AmountUnit, ''),
  2030. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint from #maintemp
  2031. where #maintemp.transSequence = @transSequence AND DetailID = @DetailID
  2032. SET @needqty=0
  2033. END
  2034. END
  2035. END
  2036. FETCH NEXT FROM tempCursor INTO @transSequence,@DetailID;
  2037. END
  2038. CLOSE tempCursor
  2039. DEALLOCATE tempCursor
  2040. END
  2041. select TransCode,LotNo,LocationQty AS Quantity,InvCode,DetailID,Sequence,TransSequence from #resulttemp
  2042. --select * from #resulttemp
  2043. DROP table #maintemp
  2044. DROP table #resulttemp
  2045. DROP table #barcodetemp";
  2046. #endregion
  2047. }
  2048. sql = String.Format(sql, LotNo, WorkPoint, Quantity,LocaCode, chekcdt.Rows[i]["InvCode"].ToString());
  2049. log.Debug("倒冲前检验子件数量sql:"+sql);
  2050. DataTable table = DBHelper.SQlReturnData(sql, cmd);
  2051. string json = JsonConvert.SerializeObject(table);
  2052. List<DownItemModel> downItemModels = JsonConvert.DeserializeObject<List<DownItemModel>>(json);
  2053. if (downItemModels.Count==0)
  2054. {
  2055. throw new Exception(language.GetNameByCode("WMSAPIInfo201"));
  2056. }
  2057. //foreach (DownItemModel model in downItemModels)
  2058. //{
  2059. // if (model != null && model.LotNo == null || "" == model.LotNo)
  2060. // {
  2061. // }
  2062. //}
  2063. }
  2064. #endregion
  2065. }
  2066. }
  2067. catch (Exception ex)
  2068. {
  2069. log.Debug(ex.ToString());
  2070. }
  2071. }
  2072. /// <summary>
  2073. /// 客供料添加库存
  2074. /// </summary>
  2075. /// <param name="LocationCode"></param>
  2076. /// <param name="LotNo"></param>
  2077. /// <param name="Quantity"></param>
  2078. /// <param name="User"></param>
  2079. /// <param name="WorkPoint"></param>
  2080. /// <param name="TransType"></param>
  2081. /// <param name="BusinessCode"></param>
  2082. /// <param name="cmd"></param>
  2083. /// <param name="jointLotNo"></param>
  2084. public static void WareHouseLotByClientInfoUp(string Identification, string LocationCode, string LotNo, string Quantity, string User,
  2085. string WorkPoint, string TransType, string BusinessCode, SqlCommand cmd, Dictionary<string, string> language, string LogID, string jointLotNo,string TransCode,string TransSequence)
  2086. {
  2087. try
  2088. {
  2089. string sql = string.Empty;
  2090. string locationcode = "";
  2091. sql += @" IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  2092. BEGIN
  2093. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  2094. RETURN
  2095. END
  2096. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}')
  2097. BEGIN
  2098. IF EXISTS(SELECT a.LotNO FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND a.Quantity=0)
  2099. BEGIN
  2100. UPDATE a SET a.Quantity=ISNULL(a.Quantity,0)+'{3}',WarehouseCode=e.WarehouseCode,LocationCode=d.LocationCode
  2101. From ICSWareHouseLotInfo a
  2102. INNER JOIN ICSLocation d ON d.LocationCode='{4}' AND a.WorkPoint=d.WorkPoint
  2103. INNER JOIN ICSWarehouse e ON d.WHID=e.ID AND d.WorkPoint=e.WorkPoint
  2104. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  2105. END
  2106. ELSE IF EXISTS(SELECT a.LotNO FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND a.LocationCode='{4}')
  2107. BEGIN
  2108. UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)+'{3}'
  2109. WHERE LotNo='{0}' AND WorkPoint='{1}'
  2110. END
  2111. ELSE IF('" + locationcode + @"' != '{4}')
  2112. BEGIN
  2113. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo395"), "{4}", locationcode) + @"', 16, 1);
  2114. RETURN
  2115. END
  2116. END
  2117. ELSE
  2118. BEGIN
  2119. IF EXISTS(SELECT il.InvCode FROM ICSInventoryLocation il
  2120. INNER JOIN ICSInventoryLot a ON a.InvCode=il.InvCode AND a.WorkPoint=il.WorkPoint
  2121. WHERE il.Enable='1' AND a.LotNo='{0}' AND a.WorkPoint='{1}')
  2122. BEGIN
  2123. IF NOT EXISTS(SELECT il.InvCode FROM ICSInventoryLocation il
  2124. INNER JOIN ICSInventoryLot a ON a.InvCode=il.InvCode AND a.WorkPoint=il.WorkPoint
  2125. WHERE il.Enable='1' AND a.LotNo='{0}' AND a.WorkPoint='{1}' AND il.LocationCode='{4}')
  2126. BEGIN
  2127. RAISERROR('" + language.GetNameByCode("WMSAPIInfo180") + @"',16,1);
  2128. RETURN
  2129. END
  2130. END
  2131. INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  2132. SELECT NEWID(),a.LotNo ,e.WarehouseCode,d.LocationCode,a.InvCode ,'{3}',SYSDATETIME(),'0',f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint ,''
  2133. FROM ICSInventoryLot a
  2134. --INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  2135. --INNER JOIN ICSOApplyNegDetail c ON b.TransCode=c.OApplyNegCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  2136. INNER JOIN ICSLocation d ON d.LocationCode='{4}' AND a.WorkPoint=d.WorkPoint
  2137. INNER JOIN ICSWarehouse e ON d.WHID=e.ID AND d.WorkPoint=e.WorkPoint
  2138. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  2139. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  2140. END";
  2141. sql = string.Format(sql, LotNo, WorkPoint, User, Quantity, LocationCode);
  2142. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2143. {
  2144. throw new Exception(language.GetNameByCode("WMSAPIInfo165"));
  2145. }
  2146. }
  2147. catch (Exception)
  2148. {
  2149. throw;
  2150. }
  2151. }
  2152. /// <summary>
  2153. /// 客供料上架日志记录
  2154. /// </summary>
  2155. /// <param name="Identification"></param>
  2156. /// <param name="LocationCode"></param>
  2157. /// <param name="LotNo"></param>
  2158. /// <param name="Quantity"></param>
  2159. /// <param name="User"></param>
  2160. /// <param name="WorkPoint"></param>
  2161. /// <param name="TransType"></param>
  2162. /// <param name="BusinessCode"></param>
  2163. /// <param name="cmd"></param>
  2164. /// <param name="language"></param>
  2165. /// <param name="LogID"></param>
  2166. /// <param name="jointLotNo"></param>
  2167. /// <param name="TransCode"></param>
  2168. /// <param name="TransSequence"></param>
  2169. public static void WareHouseLotByClientInfoUpLog(string Identification, string LocationCode, string LotNo, string Quantity, string User,
  2170. string WorkPoint, string TransType, string BusinessCode, SqlCommand cmd, Dictionary<string, string> language, string LogID, string jointLotNo, string TransCode, string TransSequence)
  2171. {
  2172. try
  2173. {
  2174. string sql = string.Empty;
  2175. ///添加日志
  2176. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  2177. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  2178. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  2179. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  2180. MTIME,WorkPoint,EATTRIBUTE1,LogID)
  2181. SELECT NEWID(),'{3}',b.TransCode,b.TransSequence,a.LotNo ,a.InvCode ,
  2182. '','',c.WarehouseCode,c.LocationCode,'{6}',
  2183. '','0','{4}','{5}','0','',
  2184. '','','',f.F_Account ,f.F_RealName ,
  2185. SYSDATETIME() ,a.WorkPoint ,'','{7}'
  2186. FROM ICSInventoryLot a
  2187. INNER JOIN ICSInventoryLotDetailKG b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint AND b.TransCode='{8}' AND b.TransSequence='{9}'
  2188. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  2189. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  2190. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  2191. ";
  2192. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransType, BusinessCode, Quantity, LogID, TransCode, TransSequence);
  2193. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2194. {
  2195. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  2196. }
  2197. }
  2198. catch (Exception)
  2199. {
  2200. throw;
  2201. }
  2202. }
  2203. /// <summary>
  2204. /// 减少库存
  2205. /// </summary>
  2206. /// <param name="Identification"></param>
  2207. /// <param name="TransCode"></param>
  2208. /// <param name="TransSequence"></param>
  2209. /// <param name="LotNo"></param>
  2210. /// <param name="Quantity"></param>
  2211. /// <param name="User"></param>
  2212. /// <param name="WorkPoint"></param>
  2213. /// <param name="TransType"></param>
  2214. /// <param name="BusinessCode"></param>
  2215. /// <param name="cmd"></param>
  2216. public static DataTable WareHouseLotInfoDown(string Identification, string TransCode, string TransSequence, string LotNo, string Quantity, string User,
  2217. string WorkPoint, string TransType, string BusinessCode, SqlCommand cmd, Dictionary<string, string> language, string LogID, string TransID,string MergeID = "")
  2218. {
  2219. decimal LotQTYYY = 0;
  2220. decimal LotQTY = 0;
  2221. decimal SUMQTY = 0;
  2222. string INVCODE = "";
  2223. string Inspect = "";
  2224. string LotEnable = "";
  2225. string LotDocEnable = "";
  2226. string InvOQc = "";
  2227. string chekEnable = "";
  2228. string DisPrintEnable = "";
  2229. string PrintEnable = "";
  2230. string sql = "";
  2231. string lotstr = "";
  2232. int result = 0;
  2233. bool isDis = false;
  2234. List<string> NewBarCodeList = new List<string>();
  2235. DataTable dtLotno = new DataTable();
  2236. DataTable lstDt = new DataTable();
  2237. DataTable ZLtable = new DataTable();
  2238. try
  2239. {
  2240. //检验是否分批
  2241. sql = @"SELECT b.LotEnable,b.PrintEnable,b.InvOQC,b.LotDocEnable FROM ICSInventoryLot a
  2242. LEFT JOIN ICSInventory b ON a.InvCode=b.InvCode AND a.WorkPoint=b.WorkPoint
  2243. where a.LotNo='{0}' and a.WorkPoint='{1}'
  2244. ";
  2245. sql = string.Format(sql, LotNo, WorkPoint);
  2246. DataTable dt = DBHelper.SQlReturnData(sql, cmd);
  2247. if (dt.Rows.Count == 0)
  2248. {
  2249. throw new Exception(language.GetNameByCode("WMSAPIInfo369"));
  2250. }
  2251. else
  2252. {
  2253. LotEnable = dt.Rows[0]["LotEnable"].ToString();
  2254. LotDocEnable = dt.Rows[0]["LotDocEnable"].ToString();
  2255. PrintEnable = dt.Rows[0]["PrintEnable"].ToString();
  2256. InvOQc = dt.Rows[0]["InvOQC"].ToString();
  2257. }
  2258. log.Debug("INVOQC:"+InvOQc);
  2259. 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
  2260. from Sys_SRM_Items a
  2261. left join Sys_SRM_ItemsDetail b on a.F_Id=b.F_ItemId
  2262. where a.F_EnCode='TransBatch' and b.F_ItemCode='{0}' )
  2263. BEGIN
  2264. RAISERROR('" + language.GetNameByCode("WMSAPIInfo470") + @"',16,1);
  2265. RETURN
  2266. END
  2267. select b.F_ItemCode as Code ,b.F_ItemName as Name,b.F_EnabledMark AS Enable ,b.F_IsDefault AS DisPrintEnable
  2268. from Sys_SRM_Items a
  2269. left join Sys_SRM_ItemsDetail b on a.F_Id=b.F_ItemId
  2270. where a.F_EnCode='TransBatch' and b.F_ItemCode='{0}'
  2271. ";
  2272. cheksql = string.Format(cheksql, BusinessCode);
  2273. DataTable chekdt = DBHelper.SQlReturnData(cheksql, cmd);
  2274. if (chekdt.Rows.Count == 0)
  2275. {
  2276. throw new Exception(language.GetNameByCode("WMSAPIInfo369"));
  2277. }
  2278. else
  2279. {
  2280. chekEnable = chekdt.Rows[0]["Enable"].ToString();
  2281. DisPrintEnable = chekdt.Rows[0]["DisPrintEnable"].ToString();
  2282. }
  2283. sql = @"select Quantity,invcode,Inspect from ICSWareHouseLotInfo
  2284. where LotNO='{0}' AND WorkPoint='{1}'";
  2285. sql = string.Format(sql, LotNo, WorkPoint);
  2286. DataTable dtt = DBHelper.SQlReturnData(sql, cmd);
  2287. LotQTYYY = Convert.ToDecimal(dtt.Rows[0]["Quantity"]);
  2288. LotQTY = Convert.ToDecimal(Quantity);
  2289. INVCODE = dtt.Rows[0]["invcode"].ToString();
  2290. Inspect = dtt.Rows[0]["Inspect"].ToString();
  2291. sql = @"SELECT isNULL(SUM(a.quantity)-'{3}',0) AS SumQTY FROM ICSWareHouseLotInfo a
  2292. INNER JOIN ICSReserve b ON a.invcode=b.invcode and a.workpoint=b.workpoint and a.warehousecode=b.whcode
  2293. where a.invcode='{2}' and a.workpoint='{1}' ";
  2294. sql = string.Format(sql, LotNo, WorkPoint,INVCODE, Quantity);
  2295. DataTable Sumdtt = DBHelper.SQlReturnData(sql, cmd);
  2296. log.Debug(Sumdtt.Rows[0]["SumQTY"]);
  2297. SUMQTY = Convert.ToDecimal(Sumdtt.Rows[0]["SumQTY"]);
  2298. //Convert.ToDecimal(Sumdtt.Rows[0]["SumQTY"]);
  2299. if (LotDocEnable.Equals("True"))
  2300. {
  2301. if (LotEnable.Equals("True") && chekEnable.Equals("True") && LotQTYYY - LotQTY > 0)
  2302. {
  2303. ZLtable = ICSControlModeService.GetZL();
  2304. if (ZLtable == null)
  2305. {
  2306. throw new Exception(language.GetNameByCode("WMSAPIInfo471"));
  2307. }
  2308. for (int i = 0; i < ZLtable.Rows.Count; i++)
  2309. {
  2310. string zlName = ZLtable.Rows[i]["Name"].ToString();
  2311. string zlTransCode = ZLtable.Rows[i]["BusinessCode"].ToString();
  2312. string Enable = ZLtable.Rows[i]["Enable"].ToString();
  2313. if (zlTransCode.Equals(BusinessCode))
  2314. {
  2315. if (Enable.Equals("True"))
  2316. {
  2317. ///更新日志
  2318. sql = @"
  2319. 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}')
  2320. BEGIN
  2321. RAISERROR('" + language.GetNameByCode("WMSAPIInfo472") + @"',16,1);
  2322. RETURN
  2323. END
  2324. UPDATE ICSWareHouseLotInfoLog SET EATTRIBUTE2='1' WHERE LotNo='{0}' AND WorkPoint='{1}' and transtype='15' and TransCode='{3}' and TransSequence='{4}'
  2325. ";
  2326. sql = string.Format(sql, LotNo, WorkPoint, LogID,TransCode,TransSequence);
  2327. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2328. {
  2329. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"占料标识更新失败!");
  2330. }
  2331. ///更新库存
  2332. sql = @"DECLARE @ReservedQuantity VARCHAR(10);
  2333. SELECT @ReservedQuantity = CAST(b.Quantity AS VARCHAR(10))
  2334. FROM ICSReserve b
  2335. INNER JOIN ICSWareHouseLotInfo a
  2336. ON a.invcode = b.invcode
  2337. AND a.workpoint = b.workpoint
  2338. AND a.warehousecode = b.whcode
  2339. WHERE '{4}' < b.Quantity
  2340. AND b.invcode = '{3}'
  2341. AND GETDATE() > b.BeginTime
  2342. AND GETDATE() < b.EndTime;
  2343. IF EXISTS(SELECT * FROM ICSWareHouseLotInfo a
  2344. INNER JOIN ICSReserve b ON a.invcode=b.invcode
  2345. AND a.workpoint=b.workpoint
  2346. AND a.warehousecode=b.whcode
  2347. WHERE a.invcode='{3}'
  2348. AND a.workpoint='{1}'
  2349. AND SYSDATETIME() > b.BeginTime
  2350. AND SYSDATETIME() < b.EndTime
  2351. AND b.enable='1')
  2352. BEGIN
  2353. IF @ReservedQuantity IS NOT NULL
  2354. BEGIN
  2355. RAISERROR('''{3}'',''{4}'''' + @ReservedQuantity + ''!', 16, 1);
  2356. RETURN
  2357. END
  2358. END
  2359. UPDATE ICSWareHouseLotInfo
  2360. SET Quantity = ISNULL(Quantity, 0) - '{2}',
  2361. LockQuantity = ISNULL(LockQuantity, 0) - '{2}'
  2362. WHERE LotNo = '{0}'
  2363. AND WorkPoint = '{1}';
  2364. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a
  2365. WHERE a.LotNo = '{0}'
  2366. AND a.WorkPoint = '{1}'
  2367. AND Quantity - LockQuantity < 0)
  2368. BEGIN
  2369. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"', 16, 1);
  2370. RETURN
  2371. END
  2372. ";
  2373. sql = string.Format(sql, LotNo, WorkPoint, Quantity, INVCODE, SUMQTY);
  2374. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2375. {
  2376. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  2377. }
  2378. }
  2379. else
  2380. {
  2381. if (InvOQc.Equals("True"))
  2382. {
  2383. sql = @"select a.id from ICSWareHouseLotInfo a
  2384. inner JOIN ICSInspectDetail b ON a.WorkPoint=b.WorkPoint and a.LotNo=b.LotNo
  2385. where a.LotNo='{0}' and a.WorkPoint='{1}' ";//and a.Inspect = '0'
  2386. sql = string.Format(sql, LotNo, WorkPoint);
  2387. DataTable Inspectdtt = DBHelper.SQlReturnData(sql, cmd);
  2388. if (Inspectdtt.Rows.Count > 0 && Inspectdtt != null)
  2389. {
  2390. sql = @"select a.id from ICSWareHouseLotInfo a
  2391. inner JOIN ICSInspectDetail b ON a.WorkPoint=b.WorkPoint and a.LotNo=b.LotNo
  2392. where a.LotNo='{0}' and a.WorkPoint='{1}' and a.Inspect = '0'";
  2393. sql = string.Format(sql, LotNo, WorkPoint);
  2394. DataTable InspectNewdtt = DBHelper.SQlReturnData(sql, cmd);
  2395. if (InspectNewdtt.Rows.Count == 0 || InspectNewdtt == null)
  2396. {
  2397. throw new Exception("条码在库检验,未检验完成,请确认!");
  2398. }
  2399. }
  2400. }
  2401. ///更新库存
  2402. sql = @"DECLARE @ReservedQuantity VARCHAR(10);
  2403. SELECT @ReservedQuantity = CAST(b.Quantity AS VARCHAR(10))
  2404. FROM ICSReserve b
  2405. INNER JOIN ICSWareHouseLotInfo a
  2406. ON a.invcode = b.invcode
  2407. AND a.workpoint = b.workpoint
  2408. AND a.warehousecode = b.whcode
  2409. WHERE '{4}' < b.Quantity
  2410. AND b.invcode = '{3}'
  2411. AND GETDATE() > b.BeginTime
  2412. AND GETDATE() < b.EndTime;
  2413. IF EXISTS(SELECT * FROM ICSWareHouseLotInfo a
  2414. INNER JOIN ICSReserve b ON a.invcode=b.invcode
  2415. AND a.workpoint=b.workpoint
  2416. AND a.warehousecode=b.whcode
  2417. WHERE a.invcode='{3}'
  2418. AND a.workpoint='{1}'
  2419. AND SYSDATETIME() > b.BeginTime
  2420. AND SYSDATETIME() < b.EndTime
  2421. AND b.enable='1')
  2422. BEGIN
  2423. IF @ReservedQuantity IS NOT NULL
  2424. BEGIN
  2425. RAISERROR('''{3}'',''{4}'''' + @ReservedQuantity + ''!', 16, 1);
  2426. RETURN
  2427. END
  2428. END
  2429. UPDATE ICSWareHouseLotInfo
  2430. SET Quantity = ISNULL(Quantity, 0) - '{2}'
  2431. WHERE LotNo = '{0}'
  2432. AND WorkPoint = '{1}';
  2433. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a
  2434. WHERE a.LotNo = '{0}'
  2435. AND a.WorkPoint = '{1}'
  2436. AND Quantity - LockQuantity < 0)
  2437. BEGIN
  2438. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"', 16, 1);
  2439. RETURN
  2440. END
  2441. ";
  2442. sql = string.Format(sql, LotNo, WorkPoint, Quantity, INVCODE, SUMQTY);
  2443. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2444. {
  2445. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  2446. }
  2447. }
  2448. }
  2449. }
  2450. ///分批前添加日志
  2451. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  2452. BEGIN
  2453. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  2454. RETURN
  2455. END
  2456. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransID,TransCode,TransSequence,LotNo,InvCode,
  2457. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  2458. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  2459. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  2460. MTIME,WorkPoint,EATTRIBUTE1)
  2461. SELECT NEWID(),'{3}','{9}','{7}','{8}',a.LotNo ,a.InvCode ,
  2462. c.WarehouseCode,c.LocationCode,'','',c.Quantity+{6},
  2463. '','0','{4}','31','0','',
  2464. '','','',f.F_Account ,f.F_RealName ,
  2465. SYSDATETIME() ,a.WorkPoint ,''
  2466. FROM ICSInventoryLot a
  2467. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  2468. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  2469. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  2470. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  2471. ";
  2472. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransType, BusinessCode, Quantity, TransCode, TransSequence, TransID);
  2473. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2474. {
  2475. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  2476. }
  2477. #region 获取分批后的条码(lotstr)
  2478. sql = @"SELECT TOP 1 LotNO FROM ICSInventoryLot WHERE EATTRIBUTE1='{0}' AND WorkPoint='{1}'
  2479. ORDER BY CAST(SUBSTRING(LotNO, (LEN(LotNO)-CHARINDEX('-',REVERSE(LotNO))+1)+1,CHARINDEX('-',REVERSE(LotNO))-1) AS INT) DESC";
  2480. sql = string.Format(sql, LotNo, WorkPoint);
  2481. dt = DBHelper.SQlReturnData(sql, cmd);
  2482. if (dt.Rows.Count == 0)
  2483. {
  2484. lotstr = LotNo + "-" + 1;
  2485. }
  2486. else
  2487. {
  2488. lotstr = LotNo + "-" + (Convert.ToInt32(dt.Rows[0]["LotNO"].ToString().Split('-')[dt.Rows[0]["LotNO"].ToString().Split('-').Length - 1]) + 1).ToString();
  2489. }
  2490. NewBarCodeList.Add(lotstr);//将分批后新条码添加到新集合
  2491. #endregion
  2492. #region 将分批后的条码记录插入条码表,库存表及日志表并将原条码库存数量清零
  2493. sql = @"INSERT INTO ICSInventoryLot(ID,LotNo,InvCode,ProductDate,ExpirationDate,
  2494. Quantity,Amount,ExtensionID,Type,PrintTimes,
  2495. LastPrintUser,LastPrintTime,MUSER,MUSERName,MTIME,
  2496. WorkPoint,EATTRIBUTE1,EATTRIBUTE2,EATTRIBUTE3,EATTRIBUTE4,EATTRIBUTE5,EATTRIBUTE6,EATTRIBUTE7,EATTRIBUTE8,
  2497. EATTRIBUTE9,EATTRIBUTE10,EATTRIBUTE11,EATTRIBUTE12,EATTRIBUTE13,EATTRIBUTE14,EATTRIBUTE15,EATTRIBUTE16,EATTRIBUTE17,EATTRIBUTE18,EATTRIBUTE19,EATTRIBUTE20,
  2498. EATTRIBUTE21,EATTRIBUTE22,EATTRIBUTE23,EATTRIBUTE24,EATTRIBUTE25,EATTRIBUTE26,EATTRIBUTE27,EATTRIBUTE28,EATTRIBUTE29,EATTRIBUTE30)
  2499. SELECT TOP 1 NEWID(),'{0}',a.InvCode,a.ProductDate,a.ExpirationDate,
  2500. '{2}',a.Amount/a.Quantity*Quantity,a.ExtensionID,a.Type,a.PrintTimes,
  2501. a.LastPrintUser,a.LastPrintTime,a.MUSER ,a.MUSERName ,GETDATE(),
  2502. a.WorkPoint ,'{1}',a.EATTRIBUTE2,a.EATTRIBUTE3,a.EATTRIBUTE4,a.EATTRIBUTE5,a.EATTRIBUTE6,a.EATTRIBUTE7,a.EATTRIBUTE8,
  2503. a.EATTRIBUTE9,a.EATTRIBUTE10,a.EATTRIBUTE11,a.EATTRIBUTE12,a.EATTRIBUTE13,a.EATTRIBUTE14,a.EATTRIBUTE15,a.EATTRIBUTE16,a.EATTRIBUTE17,a.EATTRIBUTE18,a.EATTRIBUTE19,a.EATTRIBUTE20,
  2504. a.EATTRIBUTE21,a.EATTRIBUTE22,a.EATTRIBUTE23,a.EATTRIBUTE24,a.EATTRIBUTE25,a.EATTRIBUTE26,a.EATTRIBUTE27,a.EATTRIBUTE28,a.EATTRIBUTE29,a.EATTRIBUTE30
  2505. From ICSInventoryLot a
  2506. where a.LotNo='{1}' and a.WorkPoint='{3}'";
  2507. sql = string.Format(sql, lotstr, LotNo, Quantity, WorkPoint);
  2508. cmd.CommandText = sql;
  2509. result = cmd.ExecuteNonQuery();
  2510. if (result <= 0)
  2511. {
  2512. throw new Exception(language.GetNameByCode("WMSAPIInfo195"));//条码分批后条码表存入失败!
  2513. }
  2514. sql = @"INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  2515. select NEWID(),'{0}',WarehouseCode,LocationCode,InvCode,'0',InDate,LockQuantity
  2516. ,MUSER,MUSERName,GETDATE(),'{3}',''
  2517. from ICSWareHouseLotInfo
  2518. where LotNO='{1}' AND WorkPoint='{3}'";
  2519. sql = string.Format(sql, lotstr, LotNo, Quantity, WorkPoint);
  2520. cmd.CommandText = sql;
  2521. result = cmd.ExecuteNonQuery();
  2522. if (result <= 0)
  2523. {
  2524. throw new Exception(language.GetNameByCode("WMSAPIInfo196"));//条码分批后库存表存入失败!
  2525. }
  2526. //插入条码单据表
  2527. sql = @"INSERT INTO ICSInventoryLotDetail(LotNo,TransID,TransCode,TransSequence,MUSER,MUSERName,MTIME,WorkPoint)
  2528. SELECT '{3}','{4}',b.TransCode,b.TransSequence,f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint
  2529. FROM ICSInventoryLot a
  2530. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  2531. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  2532. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  2533. sql = string.Format(sql, LotNo, WorkPoint, User, lotstr, TransID);
  2534. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2535. {
  2536. throw new Exception(language.GetNameByCode("WMSAPIInfo174"));//"条码单据表写入失败!");
  2537. }
  2538. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransID,TransCode,TransSequence,LotNo,InvCode,
  2539. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  2540. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  2541. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  2542. MTIME,WorkPoint,EATTRIBUTE1,LogID)
  2543. SELECT NEWID(),'{3}','{11}','{4}','{5}','{10}' ,a.InvCode ,
  2544. c.WarehouseCode,c.LocationCode,'','','{6}',
  2545. '','0','{7}','{8}','0','',
  2546. '','','',f.F_Account ,f.F_RealName ,
  2547. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  2548. FROM ICSInventoryLot a
  2549. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  2550. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  2551. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  2552. ";
  2553. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID, lotstr, TransID);
  2554. cmd.CommandText = sql;
  2555. result = cmd.ExecuteNonQuery();
  2556. if (result <= 0)
  2557. {
  2558. throw new Exception(language.GetNameByCode("WMSAPIInfo197"));//条码分批后库存日志表存入失败!
  2559. }
  2560. ///添加日志
  2561. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  2562. BEGIN
  2563. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  2564. RETURN
  2565. END
  2566. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransID,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,MergeID)
  2571. SELECT NEWID(),'{3}','{10}','{4}','{5}',a.LotNo ,a.InvCode ,
  2572. c.WarehouseCode,c.LocationCode,'','',c.Quantity,
  2573. '','0','{7}','32','0','',
  2574. '','','',f.F_Account ,f.F_RealName ,
  2575. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  2576. FROM ICSInventoryLot a
  2577. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  2578. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  2579. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  2580. ";
  2581. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID, TransID);
  2582. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2583. {
  2584. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  2585. }
  2586. if (PrintEnable.Equals("True") && DisPrintEnable.Equals("True"))
  2587. {
  2588. string PrintData = DBHelper.ReadPrintStream();
  2589. sql = @""+PrintData+"";
  2590. //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
  2591. // from ICSWareHouseLotInfolog A
  2592. // left join ICSInventoryLot B on A.LotNO=B.LotNO and a.WorkPoint=b.WorkPoint
  2593. // left join ICSWareHouseLotInfo C ON A.LotNO=C.LotNO and a.WorkPoint=c.WorkPoint
  2594. // left join ICSInventory D on b.INVCODE=d.INVCODE and b.WorkPoint=d.WorkPoint
  2595. // where A.lotno ='{0}' and a.workpoint='{1}' and a.BusinessCode='{2}'
  2596. // ";
  2597. sql = string.Format(sql, LotNo, WorkPoint, BusinessCode, Identification);
  2598. log.Debug("打印数据源:" + sql);
  2599. dtLotno = DBHelper.SQlReturnData(sql, cmd);
  2600. lstDt = dtLotno;
  2601. }
  2602. #endregion
  2603. }
  2604. else
  2605. {
  2606. NewBarCodeList.Add(LotNo);
  2607. ///添加日志
  2608. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  2609. BEGIN
  2610. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  2611. RETURN
  2612. END
  2613. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransID,TransCode,TransSequence,LotNo,InvCode,
  2614. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  2615. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  2616. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  2617. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  2618. SELECT NEWID(),'{3}','{10}','{4}','{5}',a.LotNo ,a.InvCode ,
  2619. c.WarehouseCode,c.LocationCode,'','','{6}',
  2620. '','0','{7}','{8}','0','',
  2621. '','','',f.F_Account ,f.F_RealName ,
  2622. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  2623. FROM ICSInventoryLot a
  2624. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  2625. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  2626. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  2627. ";
  2628. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID, TransID);
  2629. log.Debug("出库日志" + sql);
  2630. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2631. {
  2632. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  2633. }
  2634. ZLtable = ICSControlModeService.GetZL();
  2635. if (ZLtable == null)
  2636. {
  2637. throw new Exception(language.GetNameByCode("WMSAPIInfo471"));
  2638. }
  2639. for (int i = 0; i < ZLtable.Rows.Count; i++)
  2640. {
  2641. string zlTransCode = ZLtable.Rows[i]["BusinessCode"].ToString();
  2642. string Enable = ZLtable.Rows[i]["Enable"].ToString();
  2643. if (zlTransCode.Equals(BusinessCode))
  2644. {
  2645. isDis = true;
  2646. if (Enable.Equals("True"))
  2647. {
  2648. ///更新日志
  2649. sql = @"
  2650. 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}')
  2651. BEGIN
  2652. RAISERROR('" + language.GetNameByCode("WMSAPIInfo472") + @"',16,1);
  2653. RETURN
  2654. END
  2655. UPDATE ICSWareHouseLotInfoLog SET EATTRIBUTE2='1' WHERE LotNo='{0}' AND WorkPoint='{1}' and transtype='15' and TransCode='{3}' and TransSequence='{4}'
  2656. ";
  2657. sql = string.Format(sql, LotNo, WorkPoint, LogID, TransCode, TransSequence);
  2658. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2659. {
  2660. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"占料标识更新失败!");
  2661. }
  2662. ///更新库存
  2663. sql = @"DECLARE @ReservedQuantity VARCHAR(10);
  2664. SELECT @ReservedQuantity = CAST(b.Quantity AS VARCHAR(10))
  2665. FROM ICSReserve b
  2666. INNER JOIN ICSWareHouseLotInfo a
  2667. ON a.invcode = b.invcode
  2668. AND a.workpoint = b.workpoint
  2669. AND a.warehousecode = b.whcode
  2670. WHERE '{4}' < b.Quantity
  2671. AND b.invcode = '{3}'
  2672. AND GETDATE() > b.BeginTime
  2673. AND GETDATE() < b.EndTime;
  2674. IF EXISTS(SELECT * FROM ICSWareHouseLotInfo a
  2675. INNER JOIN ICSReserve b ON a.invcode=b.invcode
  2676. AND a.workpoint=b.workpoint
  2677. AND a.warehousecode=b.whcode
  2678. WHERE a.invcode='{3}'
  2679. AND a.workpoint='{1}'
  2680. AND SYSDATETIME() > b.BeginTime
  2681. AND SYSDATETIME() < b.EndTime
  2682. AND b.enable='1')
  2683. BEGIN
  2684. IF @ReservedQuantity IS NOT NULL
  2685. BEGIN
  2686. RAISERROR('''{3}'',''{4}'''' + @ReservedQuantity + ''!', 16, 1);
  2687. RETURN
  2688. END
  2689. END
  2690. UPDATE ICSWareHouseLotInfo
  2691. SET Quantity = ISNULL(Quantity, 0) - '{2}',
  2692. LockQuantity = ISNULL(LockQuantity, 0) - '{2}'
  2693. WHERE LotNo = '{0}'
  2694. AND WorkPoint = '{1}';
  2695. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a
  2696. WHERE a.LotNo = '{0}'
  2697. AND a.WorkPoint = '{1}'
  2698. AND Quantity - LockQuantity < 0)
  2699. BEGIN
  2700. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"', 16, 1);
  2701. RETURN
  2702. END
  2703. ";
  2704. sql = string.Format(sql, LotNo, WorkPoint, Quantity, INVCODE, SUMQTY);
  2705. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2706. {
  2707. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  2708. }
  2709. }
  2710. else
  2711. {
  2712. if (InvOQc.Equals("True"))
  2713. {
  2714. sql = @"select a.id from ICSWareHouseLotInfo a
  2715. inner JOIN ICSInspectDetail b ON a.WorkPoint=b.WorkPoint and a.LotNo=b.LotNo
  2716. where a.LotNo='{0}' and a.WorkPoint='{1}' ";//and a.Inspect = '0'
  2717. sql = string.Format(sql, LotNo, WorkPoint);
  2718. DataTable Inspectdtt = DBHelper.SQlReturnData(sql, cmd);
  2719. if (Inspectdtt.Rows.Count > 0 && Inspectdtt != null)
  2720. {
  2721. sql = @"select a.id from ICSWareHouseLotInfo a
  2722. inner JOIN ICSInspectDetail b ON a.WorkPoint=b.WorkPoint and a.LotNo=b.LotNo
  2723. where a.LotNo='{0}' and a.WorkPoint='{1}' and a.Inspect = '0'";
  2724. sql = string.Format(sql, LotNo, WorkPoint);
  2725. DataTable InspectNewdtt = DBHelper.SQlReturnData(sql, cmd);
  2726. if (InspectNewdtt.Rows.Count == 0 || InspectNewdtt == null)
  2727. {
  2728. throw new Exception("条码在库检验,未检验完成,请确认!");
  2729. }
  2730. }
  2731. }
  2732. ///更新库存
  2733. sql = @"DECLARE @ReservedQuantity VARCHAR(10);
  2734. SELECT @ReservedQuantity = CAST(b.Quantity AS VARCHAR(10))
  2735. FROM ICSReserve b
  2736. INNER JOIN ICSWareHouseLotInfo a
  2737. ON a.invcode = b.invcode
  2738. AND a.workpoint = b.workpoint
  2739. AND a.warehousecode = b.whcode
  2740. WHERE '{4}' < b.Quantity
  2741. AND b.invcode = '{3}'
  2742. AND GETDATE() > b.BeginTime
  2743. AND GETDATE() < b.EndTime;
  2744. IF EXISTS(SELECT * FROM ICSWareHouseLotInfo a
  2745. INNER JOIN ICSReserve b ON a.invcode=b.invcode
  2746. AND a.workpoint=b.workpoint
  2747. AND a.warehousecode=b.whcode
  2748. WHERE a.invcode='{3}'
  2749. AND a.workpoint='{1}'
  2750. AND SYSDATETIME() > b.BeginTime
  2751. AND SYSDATETIME() < b.EndTime
  2752. AND b.enable='1')
  2753. BEGIN
  2754. IF @ReservedQuantity IS NOT NULL
  2755. BEGIN
  2756. RAISERROR('''{3}'',''{4}'''' + @ReservedQuantity + ''!', 16, 1);
  2757. RETURN
  2758. END
  2759. END
  2760. UPDATE ICSWareHouseLotInfo
  2761. SET Quantity = ISNULL(Quantity, 0) - '{2}'
  2762. WHERE LotNo = '{0}'
  2763. AND WorkPoint = '{1}';
  2764. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a
  2765. WHERE a.LotNo = '{0}'
  2766. AND a.WorkPoint = '{1}'
  2767. AND Quantity - LockQuantity < 0)
  2768. BEGIN
  2769. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"', 16, 1);
  2770. RETURN
  2771. END
  2772. ";
  2773. sql = string.Format(sql, LotNo, WorkPoint, Quantity, INVCODE, SUMQTY);
  2774. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2775. {
  2776. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  2777. }
  2778. }
  2779. }
  2780. // else { throw new Exception("单据类型未配置!"); }
  2781. }
  2782. //if (isDis == false)
  2783. //{
  2784. // throw new Exception("单据类型未配置!");
  2785. //}
  2786. /////更新库存
  2787. //sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  2788. // IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity<0)
  2789. // BEGIN
  2790. // RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  2791. // RETURN
  2792. // END";
  2793. //sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  2794. //if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2795. //{
  2796. // throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  2797. //}
  2798. }
  2799. }
  2800. else
  2801. {
  2802. if (LotEnable.Equals("True") && LotQTYYY - LotQTY > 0)
  2803. {
  2804. ZLtable = ICSControlModeService.GetZL();
  2805. if (ZLtable == null)
  2806. {
  2807. throw new Exception(language.GetNameByCode("WMSAPIInfo471"));
  2808. }
  2809. for (int i = 0; i < ZLtable.Rows.Count; i++)
  2810. {
  2811. string zlName = ZLtable.Rows[i]["Name"].ToString();
  2812. string zlTransCode = ZLtable.Rows[i]["BusinessCode"].ToString();
  2813. string Enable = ZLtable.Rows[i]["Enable"].ToString();
  2814. if (zlTransCode.Equals(BusinessCode))
  2815. {
  2816. if (Enable.Equals("True"))
  2817. {
  2818. ///更新日志
  2819. sql = @"
  2820. 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}')
  2821. BEGIN
  2822. RAISERROR('" + language.GetNameByCode("WMSAPIInfo472") + @"',16,1);
  2823. RETURN
  2824. END
  2825. UPDATE ICSWareHouseLotInfoLog SET EATTRIBUTE2='1' WHERE LotNo='{0}' AND WorkPoint='{1}' and transtype='15' and TransCode='{3}' and TransSequence='{4}'
  2826. ";
  2827. sql = string.Format(sql, LotNo, WorkPoint, LogID, TransCode, TransSequence);
  2828. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2829. {
  2830. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"占料标识更新失败!");
  2831. }
  2832. ///更新库存
  2833. sql = @"DECLARE @ReservedQuantity VARCHAR(10);
  2834. SELECT @ReservedQuantity = CAST(b.Quantity AS VARCHAR(10))
  2835. FROM ICSReserve b
  2836. INNER JOIN ICSWareHouseLotInfo a
  2837. ON a.invcode = b.invcode
  2838. AND a.workpoint = b.workpoint
  2839. AND a.warehousecode = b.whcode
  2840. WHERE '{4}' < b.Quantity
  2841. AND b.invcode = '{3}'
  2842. AND GETDATE() > b.BeginTime
  2843. AND GETDATE() < b.EndTime;
  2844. IF EXISTS(SELECT * FROM ICSWareHouseLotInfo a
  2845. INNER JOIN ICSReserve b ON a.invcode=b.invcode
  2846. AND a.workpoint=b.workpoint
  2847. AND a.warehousecode=b.whcode
  2848. WHERE a.invcode='{3}'
  2849. AND a.workpoint='{1}'
  2850. AND SYSDATETIME() > b.BeginTime
  2851. AND SYSDATETIME() < b.EndTime
  2852. AND b.enable='1')
  2853. BEGIN
  2854. IF @ReservedQuantity IS NOT NULL
  2855. BEGIN
  2856. RAISERROR('''{3}'',''{4}'''' + @ReservedQuantity + ''!', 16, 1);
  2857. RETURN
  2858. END
  2859. END
  2860. UPDATE ICSWareHouseLotInfo
  2861. SET Quantity = ISNULL(Quantity, 0) - '{2}',
  2862. LockQuantity = ISNULL(LockQuantity, 0) - '{2}'
  2863. WHERE LotNo = '{0}'
  2864. AND WorkPoint = '{1}';
  2865. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a
  2866. WHERE a.LotNo = '{0}'
  2867. AND a.WorkPoint = '{1}'
  2868. AND Quantity - LockQuantity < 0)
  2869. BEGIN
  2870. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"', 16, 1);
  2871. RETURN
  2872. END
  2873. ";
  2874. sql = string.Format(sql, LotNo, WorkPoint, Quantity, INVCODE, SUMQTY, TransCode, TransSequence);
  2875. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2876. {
  2877. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  2878. }
  2879. }
  2880. else
  2881. {
  2882. if (InvOQc.Equals("True"))
  2883. {
  2884. sql = @"select a.id from ICSWareHouseLotInfo a
  2885. inner JOIN ICSInspectDetail b ON a.WorkPoint=b.WorkPoint and a.LotNo=b.LotNo
  2886. where a.LotNo='{0}' and a.WorkPoint='{1}' ";//and a.Inspect = '0'
  2887. sql = string.Format(sql, LotNo, WorkPoint);
  2888. DataTable Inspectdtt = DBHelper.SQlReturnData(sql, cmd);
  2889. if (Inspectdtt.Rows.Count > 0 && Inspectdtt != null)
  2890. {
  2891. sql = @"select a.id from ICSWareHouseLotInfo a
  2892. inner JOIN ICSInspectDetail b ON a.WorkPoint=b.WorkPoint and a.LotNo=b.LotNo
  2893. where a.LotNo='{0}' and a.WorkPoint='{1}' and a.Inspect = '0'";
  2894. sql = string.Format(sql, LotNo, WorkPoint);
  2895. DataTable InspectNewdtt = DBHelper.SQlReturnData(sql, cmd);
  2896. if (InspectNewdtt.Rows.Count == 0 || InspectNewdtt == null)
  2897. {
  2898. throw new Exception("条码在库检验,未检验完成,请确认!");
  2899. }
  2900. }
  2901. }
  2902. ///更新库存
  2903. sql = @"DECLARE @ReservedQuantity VARCHAR(10);
  2904. SELECT @ReservedQuantity = CAST(b.Quantity AS VARCHAR(10))
  2905. FROM ICSReserve b
  2906. INNER JOIN ICSWareHouseLotInfo a
  2907. ON a.invcode = b.invcode
  2908. AND a.workpoint = b.workpoint
  2909. AND a.warehousecode = b.whcode
  2910. WHERE '{4}' < b.Quantity
  2911. AND b.invcode = '{3}'
  2912. AND GETDATE() > b.BeginTime
  2913. AND GETDATE() < b.EndTime;
  2914. IF EXISTS(SELECT * FROM ICSWareHouseLotInfo a
  2915. INNER JOIN ICSReserve b ON a.invcode=b.invcode
  2916. AND a.workpoint=b.workpoint
  2917. AND a.warehousecode=b.whcode
  2918. WHERE a.invcode='{3}'
  2919. AND a.workpoint='{1}'
  2920. AND SYSDATETIME() > b.BeginTime
  2921. AND SYSDATETIME() < b.EndTime
  2922. AND b.enable='1')
  2923. BEGIN
  2924. IF @ReservedQuantity IS NOT NULL
  2925. BEGIN
  2926. RAISERROR('''{3}'',''{4}'''' + @ReservedQuantity + ''!', 16, 1);
  2927. RETURN
  2928. END
  2929. END
  2930. UPDATE ICSWareHouseLotInfo
  2931. SET Quantity = ISNULL(Quantity, 0) - '{2}'
  2932. WHERE LotNo = '{0}'
  2933. AND WorkPoint = '{1}';
  2934. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a
  2935. WHERE a.LotNo = '{0}'
  2936. AND a.WorkPoint = '{1}'
  2937. AND Quantity - LockQuantity < 0)
  2938. BEGIN
  2939. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"', 16, 1);
  2940. RETURN
  2941. END
  2942. ";
  2943. sql = string.Format(sql, LotNo, WorkPoint, Quantity, INVCODE, SUMQTY);
  2944. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2945. {
  2946. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  2947. }
  2948. }
  2949. }
  2950. }
  2951. ///分批前添加日志
  2952. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  2953. BEGIN
  2954. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  2955. RETURN
  2956. END
  2957. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransID,TransCode,TransSequence,LotNo,InvCode,
  2958. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  2959. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  2960. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  2961. MTIME,WorkPoint,EATTRIBUTE1)
  2962. SELECT NEWID(),'{3}','{9}','{7}','{8}',a.LotNo ,a.InvCode ,
  2963. c.WarehouseCode,c.LocationCode,'','',c.Quantity+{6},
  2964. '','0','{4}','31','0','',
  2965. '','','',f.F_Account ,f.F_RealName ,
  2966. SYSDATETIME() ,a.WorkPoint ,''
  2967. FROM ICSInventoryLot a
  2968. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  2969. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  2970. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  2971. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  2972. ";
  2973. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransType, BusinessCode, Quantity, TransCode, TransSequence, TransID);
  2974. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2975. {
  2976. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  2977. }
  2978. #region 获取分批后的条码(lotstr)
  2979. sql = @"SELECT TOP 1 LotNO FROM ICSInventoryLot WHERE EATTRIBUTE1='{0}' AND WorkPoint='{1}'
  2980. ORDER BY CAST(SUBSTRING(LotNO, (LEN(LotNO)-CHARINDEX('-',REVERSE(LotNO))+1)+1,CHARINDEX('-',REVERSE(LotNO))-1) AS INT) DESC";
  2981. sql = string.Format(sql, LotNo, WorkPoint);
  2982. dt = DBHelper.SQlReturnData(sql, cmd);
  2983. if (dt.Rows.Count == 0)
  2984. {
  2985. lotstr = LotNo + "-" + 1;
  2986. }
  2987. else
  2988. {
  2989. lotstr = LotNo + "-" + (Convert.ToInt32(dt.Rows[0]["LotNO"].ToString().Split('-')[dt.Rows[0]["LotNO"].ToString().Split('-').Length - 1]) + 1).ToString();
  2990. }
  2991. NewBarCodeList.Add(lotstr);//将分批后新条码添加到新集合
  2992. #endregion
  2993. #region 将分批后的条码记录插入条码表,库存表及日志表并将原条码库存数量清零
  2994. sql = @"INSERT INTO ICSInventoryLot(ID,LotNo,InvCode,ProductDate,ExpirationDate,
  2995. Quantity,Amount,ExtensionID,Type,PrintTimes,
  2996. LastPrintUser,LastPrintTime,MUSER,MUSERName,MTIME,
  2997. WorkPoint,EATTRIBUTE1,EATTRIBUTE2,EATTRIBUTE3,EATTRIBUTE4,EATTRIBUTE5,EATTRIBUTE6,EATTRIBUTE7,EATTRIBUTE8,
  2998. EATTRIBUTE9,EATTRIBUTE10,EATTRIBUTE11,EATTRIBUTE12,EATTRIBUTE13,EATTRIBUTE14,EATTRIBUTE15,EATTRIBUTE16,EATTRIBUTE17,EATTRIBUTE18,EATTRIBUTE19,EATTRIBUTE20,
  2999. EATTRIBUTE21,EATTRIBUTE22,EATTRIBUTE23,EATTRIBUTE24,EATTRIBUTE25,EATTRIBUTE26,EATTRIBUTE27,EATTRIBUTE28,EATTRIBUTE29,EATTRIBUTE30)
  3000. SELECT TOP 1 NEWID(),'{0}',a.InvCode,a.ProductDate,a.ExpirationDate,
  3001. '{2}',a.Amount/a.Quantity*Quantity,a.ExtensionID,a.Type,a.PrintTimes,
  3002. a.LastPrintUser,a.LastPrintTime,a.MUSER ,a.MUSERName ,GETDATE(),
  3003. a.WorkPoint ,'{1}',a.EATTRIBUTE2,a.EATTRIBUTE3,a.EATTRIBUTE4,a.EATTRIBUTE5,a.EATTRIBUTE6,a.EATTRIBUTE7,a.EATTRIBUTE8,
  3004. a.EATTRIBUTE9,a.EATTRIBUTE10,a.EATTRIBUTE11,a.EATTRIBUTE12,a.EATTRIBUTE13,a.EATTRIBUTE14,a.EATTRIBUTE15,a.EATTRIBUTE16,a.EATTRIBUTE17,a.EATTRIBUTE18,a.EATTRIBUTE19,a.EATTRIBUTE20,
  3005. a.EATTRIBUTE21,a.EATTRIBUTE22,a.EATTRIBUTE23,a.EATTRIBUTE24,a.EATTRIBUTE25,a.EATTRIBUTE26,a.EATTRIBUTE27,a.EATTRIBUTE28,a.EATTRIBUTE29,a.EATTRIBUTE30
  3006. From ICSInventoryLot a
  3007. where a.LotNo='{1}' and a.WorkPoint='{3}'";
  3008. sql = string.Format(sql, lotstr, LotNo, Quantity, WorkPoint);
  3009. cmd.CommandText = sql;
  3010. result = cmd.ExecuteNonQuery();
  3011. if (result <= 0)
  3012. {
  3013. throw new Exception(language.GetNameByCode("WMSAPIInfo195"));//条码分批后条码表存入失败!
  3014. }
  3015. sql = @"INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  3016. select NEWID(),'{0}',WarehouseCode,LocationCode,InvCode,'0',InDate,LockQuantity
  3017. ,MUSER,MUSERName,GETDATE(),'{3}',''
  3018. from ICSWareHouseLotInfo
  3019. where LotNO='{1}' AND WorkPoint='{3}'";
  3020. sql = string.Format(sql, lotstr, LotNo, Quantity, WorkPoint);
  3021. cmd.CommandText = sql;
  3022. result = cmd.ExecuteNonQuery();
  3023. if (result <= 0)
  3024. {
  3025. throw new Exception(language.GetNameByCode("WMSAPIInfo196"));//条码分批后库存表存入失败!
  3026. }
  3027. //插入条码单据表
  3028. sql = @"INSERT INTO ICSInventoryLotDetail(LotNo,TransID,TransCode,TransSequence,MUSER,MUSERName,MTIME,WorkPoint)
  3029. SELECT '{3}','{4}',b.TransCode,b.TransSequence,f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint
  3030. FROM ICSInventoryLot a
  3031. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  3032. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  3033. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  3034. sql = string.Format(sql, LotNo, WorkPoint, User, lotstr, TransID);
  3035. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3036. {
  3037. throw new Exception(language.GetNameByCode("WMSAPIInfo174"));//"条码单据表写入失败!");
  3038. }
  3039. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransID,TransCode,TransSequence,LotNo,InvCode,
  3040. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  3041. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  3042. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  3043. MTIME,WorkPoint,EATTRIBUTE1,LogID)
  3044. SELECT NEWID(),'{3}','{11}','{4}','{5}','{10}' ,a.InvCode ,
  3045. c.WarehouseCode,c.LocationCode,'','','{6}',
  3046. '','0','{7}','{8}','0','',
  3047. '','','',f.F_Account ,f.F_RealName ,
  3048. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  3049. FROM ICSInventoryLot a
  3050. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  3051. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  3052. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  3053. ";
  3054. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID, lotstr, TransID);
  3055. cmd.CommandText = sql;
  3056. result = cmd.ExecuteNonQuery();
  3057. if (result <= 0)
  3058. {
  3059. throw new Exception(language.GetNameByCode("WMSAPIInfo197"));//条码分批后库存日志表存入失败!
  3060. }
  3061. ///添加日志
  3062. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  3063. BEGIN
  3064. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  3065. RETURN
  3066. END
  3067. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransID,TransCode,TransSequence,LotNo,InvCode,
  3068. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  3069. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  3070. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  3071. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  3072. SELECT NEWID(),'{3}','{10}','{4}','{5}',a.LotNo ,a.InvCode ,
  3073. c.WarehouseCode,c.LocationCode,'','',c.Quantity,
  3074. '','0','{7}','32','0','',
  3075. '','','',f.F_Account ,f.F_RealName ,
  3076. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  3077. FROM ICSInventoryLot a
  3078. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  3079. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  3080. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  3081. ";
  3082. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID, TransID);
  3083. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3084. {
  3085. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  3086. }
  3087. if (PrintEnable.Equals("True") && DisPrintEnable.Equals("True"))
  3088. {
  3089. string PrintData = DBHelper.ReadPrintStream();
  3090. sql = @"" + PrintData + "";
  3091. //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
  3092. // from ICSWareHouseLotInfolog A
  3093. // left join ICSInventoryLot B on A.LotNO=B.LotNO and a.WorkPoint=b.WorkPoint
  3094. // left join ICSWareHouseLotInfo C ON A.LotNO=C.LotNO and a.WorkPoint=c.WorkPoint
  3095. // left join ICSInventory D on b.INVCODE=d.INVCODE and b.WorkPoint=d.WorkPoint
  3096. // where A.lotno ='{0}' and a.workpoint='{1}' and a.BusinessCode='{2}'
  3097. // ";
  3098. sql = string.Format(sql, LotNo, WorkPoint, BusinessCode, Identification);
  3099. log.Debug("打印数据源:" + sql);
  3100. dtLotno = DBHelper.SQlReturnData(sql, cmd);
  3101. lstDt = dtLotno;
  3102. }
  3103. #endregion
  3104. }
  3105. else
  3106. {
  3107. NewBarCodeList.Add(LotNo);
  3108. ///添加日志
  3109. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  3110. BEGIN
  3111. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  3112. RETURN
  3113. END
  3114. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransID,TransCode,TransSequence,LotNo,InvCode,
  3115. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  3116. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  3117. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  3118. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  3119. SELECT NEWID(),'{3}','{10}','{4}','{5}',a.LotNo ,a.InvCode ,
  3120. c.WarehouseCode,c.LocationCode,'','','{6}',
  3121. '','0','{7}','{8}','0','',
  3122. '','','',f.F_Account ,f.F_RealName ,
  3123. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  3124. FROM ICSInventoryLot a
  3125. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  3126. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  3127. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  3128. ";
  3129. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID, TransID);
  3130. log.Debug("出库日志" + sql);
  3131. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3132. {
  3133. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  3134. }
  3135. ZLtable = ICSControlModeService.GetZL();
  3136. if (ZLtable == null)
  3137. {
  3138. throw new Exception(language.GetNameByCode("WMSAPIInfo471"));
  3139. }
  3140. for (int i = 0; i < ZLtable.Rows.Count; i++)
  3141. {
  3142. string zlTransCode = ZLtable.Rows[i]["BusinessCode"].ToString();
  3143. string Enable = ZLtable.Rows[i]["Enable"].ToString();
  3144. if (zlTransCode.Equals(BusinessCode))
  3145. {
  3146. isDis = true;
  3147. if (Enable.Equals("True"))
  3148. {
  3149. ///更新日志
  3150. sql = @"
  3151. 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}')
  3152. BEGIN
  3153. RAISERROR('" + language.GetNameByCode("WMSAPIInfo472") + @"',16,1);
  3154. RETURN
  3155. END
  3156. UPDATE ICSWareHouseLotInfoLog SET EATTRIBUTE2='1' WHERE LotNo='{0}' AND WorkPoint='{1}' and transtype='15' and TransCode='{3}' and TransSequence='{4}'
  3157. ";
  3158. sql = string.Format(sql, LotNo, WorkPoint, LogID, TransCode, TransSequence);
  3159. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3160. {
  3161. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"占料标识更新失败!");
  3162. }
  3163. ///更新库存
  3164. sql = @"DECLARE @ReservedQuantity VARCHAR(10);
  3165. SELECT @ReservedQuantity = CAST(b.Quantity AS VARCHAR(10))
  3166. FROM ICSReserve b
  3167. INNER JOIN ICSWareHouseLotInfo a
  3168. ON a.invcode = b.invcode
  3169. AND a.workpoint = b.workpoint
  3170. AND a.warehousecode = b.whcode
  3171. WHERE '{4}' < b.Quantity
  3172. AND b.invcode = '{3}'
  3173. AND GETDATE() > b.BeginTime
  3174. AND GETDATE() < b.EndTime;
  3175. IF EXISTS(SELECT * FROM ICSWareHouseLotInfo a
  3176. INNER JOIN ICSReserve b ON a.invcode=b.invcode
  3177. AND a.workpoint=b.workpoint
  3178. AND a.warehousecode=b.whcode
  3179. WHERE a.invcode='{3}'
  3180. AND a.workpoint='{1}'
  3181. AND SYSDATETIME() > b.BeginTime
  3182. AND SYSDATETIME() < b.EndTime
  3183. AND b.enable='1')
  3184. BEGIN
  3185. IF @ReservedQuantity IS NOT NULL
  3186. BEGIN
  3187. RAISERROR('''{3}'',''{4}'''' + @ReservedQuantity + ''!', 16, 1);
  3188. RETURN
  3189. END
  3190. END
  3191. UPDATE ICSWareHouseLotInfo
  3192. SET Quantity = ISNULL(Quantity, 0) - '{2}',
  3193. LockQuantity = ISNULL(LockQuantity, 0) - '{2}'
  3194. WHERE LotNo = '{0}'
  3195. AND WorkPoint = '{1}';
  3196. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a
  3197. WHERE a.LotNo = '{0}'
  3198. AND a.WorkPoint = '{1}'
  3199. AND Quantity - LockQuantity < 0)
  3200. BEGIN
  3201. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"', 16, 1);
  3202. RETURN
  3203. END
  3204. ";
  3205. sql = string.Format(sql, LotNo, WorkPoint, Quantity, INVCODE, SUMQTY);
  3206. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3207. {
  3208. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  3209. }
  3210. }
  3211. else
  3212. {
  3213. if (InvOQc.Equals("True"))
  3214. {
  3215. sql = @"select a.id from ICSWareHouseLotInfo a
  3216. inner JOIN ICSInspectDetail b ON a.WorkPoint=b.WorkPoint and a.LotNo=b.LotNo
  3217. where a.LotNo='{0}' and a.WorkPoint='{1}' ";//and a.Inspect = '0'
  3218. sql = string.Format(sql, LotNo, WorkPoint);
  3219. DataTable Inspectdtt = DBHelper.SQlReturnData(sql, cmd);
  3220. if (Inspectdtt.Rows.Count > 0 && Inspectdtt != null)
  3221. {
  3222. sql = @"select a.id from ICSWareHouseLotInfo a
  3223. inner JOIN ICSInspectDetail b ON a.WorkPoint=b.WorkPoint and a.LotNo=b.LotNo
  3224. where a.LotNo='{0}' and a.WorkPoint='{1}' and a.Inspect = '0'";
  3225. sql = string.Format(sql, LotNo, WorkPoint);
  3226. DataTable InspectNewdtt = DBHelper.SQlReturnData(sql, cmd);
  3227. if (InspectNewdtt.Rows.Count == 0 || InspectNewdtt == null)
  3228. {
  3229. throw new Exception("条码在库检验,未检验完成,请确认!");
  3230. }
  3231. }
  3232. }
  3233. ///更新库存
  3234. sql = @"DECLARE @ReservedQuantity VARCHAR(10);
  3235. SELECT @ReservedQuantity = CAST(b.Quantity AS VARCHAR(10))
  3236. FROM ICSReserve b
  3237. INNER JOIN ICSWareHouseLotInfo a
  3238. ON a.invcode = b.invcode
  3239. AND a.workpoint = b.workpoint
  3240. AND a.warehousecode = b.whcode
  3241. WHERE '{4}' < b.Quantity
  3242. AND b.invcode = '{3}'
  3243. AND GETDATE() > b.BeginTime
  3244. AND GETDATE() < b.EndTime;
  3245. IF EXISTS(SELECT * FROM ICSWareHouseLotInfo a
  3246. INNER JOIN ICSReserve b ON a.invcode=b.invcode
  3247. AND a.workpoint=b.workpoint
  3248. AND a.warehousecode=b.whcode
  3249. WHERE a.invcode='{3}'
  3250. AND a.workpoint='{1}'
  3251. AND SYSDATETIME() > b.BeginTime
  3252. AND SYSDATETIME() < b.EndTime
  3253. AND b.enable='1')
  3254. BEGIN
  3255. IF @ReservedQuantity IS NOT NULL
  3256. BEGIN
  3257. RAISERROR('''{3}'',''{4}'''' + @ReservedQuantity + ''!', 16, 1);
  3258. RETURN
  3259. END
  3260. END
  3261. UPDATE ICSWareHouseLotInfo
  3262. SET Quantity = ISNULL(Quantity, 0) - '{2}'
  3263. WHERE LotNo = '{0}'
  3264. AND WorkPoint = '{1}';
  3265. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a
  3266. WHERE a.LotNo = '{0}'
  3267. AND a.WorkPoint = '{1}'
  3268. AND Quantity - LockQuantity < 0)
  3269. BEGIN
  3270. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"', 16, 1);
  3271. RETURN
  3272. END
  3273. ";
  3274. sql = string.Format(sql, LotNo, WorkPoint, Quantity, INVCODE, SUMQTY);
  3275. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3276. {
  3277. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  3278. }
  3279. }
  3280. }
  3281. // else { throw new Exception("单据类型未配置!"); }
  3282. }
  3283. //if (isDis == false)
  3284. //{
  3285. // throw new Exception("单据类型未配置!");
  3286. //}
  3287. /////更新库存
  3288. //sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  3289. // IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity<0)
  3290. // BEGIN
  3291. // RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  3292. // RETURN
  3293. // END";
  3294. //sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  3295. //if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3296. //{
  3297. // throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  3298. //}
  3299. }
  3300. }
  3301. }
  3302. catch (Exception)
  3303. {
  3304. throw;
  3305. }
  3306. return lstDt;
  3307. }
  3308. /// <summary>
  3309. /// 减少库存(库存表四舍五入)
  3310. /// </summary>
  3311. /// <param name="Identification"></param>
  3312. /// <param name="TransCode"></param>
  3313. /// <param name="TransSequence"></param>
  3314. /// <param name="LotNo"></param>
  3315. /// <param name="Quantity"></param>
  3316. /// <param name="User"></param>
  3317. /// <param name="WorkPoint"></param>
  3318. /// <param name="TransType"></param>
  3319. /// <param name="BusinessCode"></param>
  3320. /// <param name="cmd"></param>
  3321. /// <param name="language"></param>
  3322. /// <param name="LogID"></param>
  3323. /// <param name="TransID"></param>
  3324. /// <param name="MergeID"></param>
  3325. /// <returns></returns>
  3326. public static DataTable WareHouseLotInfoDownRound(string Identification, string TransCode, string TransSequence, string LotNo, string Quantity, string User,
  3327. string WorkPoint, string TransType, string BusinessCode, SqlCommand cmd, Dictionary<string, string> language, string LogID, string TransID, string MergeID = "")
  3328. {
  3329. decimal LotQTYYY = 0;
  3330. decimal LotQTY = 0;
  3331. decimal SUMQTY = 0;
  3332. string INVCODE = "";
  3333. string Inspect = "";
  3334. string LotEnable = "";
  3335. string LotDocEnable = "";
  3336. string InvOQc = "";
  3337. string chekEnable = "";
  3338. string DisPrintEnable = "";
  3339. string PrintEnable = "";
  3340. string sql = "";
  3341. string lotstr = "";
  3342. string RoundedQuantity = Quantity;//记录四舍五入后的数量
  3343. int result = 0;
  3344. bool isDis = false;
  3345. List<string> NewBarCodeList = new List<string>();
  3346. DataTable dtLotno = new DataTable();
  3347. DataTable lstDt = new DataTable();
  3348. DataTable ZLtable = new DataTable();
  3349. try
  3350. {
  3351. //获取小数位数
  3352. sql = @"SELECT Figure FROM ICSConfiguration WHERE Code='Figure001' AND WorkPoint='{0}'";
  3353. sql = string.Format(sql, WorkPoint);
  3354. int figureNum = (int)(DBHelper.ExecuteScalar(sql, cmd));
  3355. //进行四舍五入操作
  3356. if(decimal.TryParse(Quantity,out decimal numericQuantity))
  3357. {
  3358. RoundedQuantity = Math.Round(numericQuantity,figureNum).ToString();
  3359. }
  3360. //检验是否分批
  3361. sql = @"SELECT b.LotEnable,b.PrintEnable,b.InvOQC,b.LotDocEnable FROM ICSInventoryLot a
  3362. LEFT JOIN ICSInventory b ON a.InvCode=b.InvCode AND a.WorkPoint=b.WorkPoint
  3363. where a.LotNo='{0}' and a.WorkPoint='{1}'
  3364. ";
  3365. sql = string.Format(sql, LotNo, WorkPoint);
  3366. DataTable dt = DBHelper.SQlReturnData(sql, cmd);
  3367. if (dt.Rows.Count == 0)
  3368. {
  3369. throw new Exception(language.GetNameByCode("WMSAPIInfo369"));
  3370. }
  3371. else
  3372. {
  3373. LotEnable = dt.Rows[0]["LotEnable"].ToString();
  3374. LotDocEnable = dt.Rows[0]["LotDocEnable"].ToString();
  3375. PrintEnable = dt.Rows[0]["PrintEnable"].ToString();
  3376. InvOQc = dt.Rows[0]["InvOQC"].ToString();
  3377. }
  3378. log.Debug("INVOQC:" + InvOQc);
  3379. 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
  3380. from Sys_SRM_Items a
  3381. left join Sys_SRM_ItemsDetail b on a.F_Id=b.F_ItemId
  3382. where a.F_EnCode='TransBatch' and b.F_ItemCode='{0}' )
  3383. BEGIN
  3384. RAISERROR('" + language.GetNameByCode("WMSAPIInfo470") + @"',16,1);
  3385. RETURN
  3386. END
  3387. select b.F_ItemCode as Code ,b.F_ItemName as Name,b.F_EnabledMark AS Enable ,b.F_IsDefault AS DisPrintEnable
  3388. from Sys_SRM_Items a
  3389. left join Sys_SRM_ItemsDetail b on a.F_Id=b.F_ItemId
  3390. where a.F_EnCode='TransBatch' and b.F_ItemCode='{0}'
  3391. ";
  3392. cheksql = string.Format(cheksql, BusinessCode);
  3393. DataTable chekdt = DBHelper.SQlReturnData(cheksql, cmd);
  3394. if (chekdt.Rows.Count == 0)
  3395. {
  3396. throw new Exception(language.GetNameByCode("WMSAPIInfo369"));
  3397. }
  3398. else
  3399. {
  3400. chekEnable = chekdt.Rows[0]["Enable"].ToString();
  3401. DisPrintEnable = chekdt.Rows[0]["DisPrintEnable"].ToString();
  3402. }
  3403. sql = @"select Quantity,invcode,Inspect from ICSWareHouseLotInfo
  3404. where LotNO='{0}' AND WorkPoint='{1}'";
  3405. sql = string.Format(sql, LotNo, WorkPoint);
  3406. DataTable dtt = DBHelper.SQlReturnData(sql, cmd);
  3407. LotQTYYY = Convert.ToDecimal(dtt.Rows[0]["Quantity"]);
  3408. LotQTY = Convert.ToDecimal(RoundedQuantity);
  3409. INVCODE = dtt.Rows[0]["invcode"].ToString();
  3410. Inspect = dtt.Rows[0]["Inspect"].ToString();
  3411. sql = @"SELECT SUM(a.quantity)-'{3}' AS SumQTY FROM ICSWareHouseLotInfo a
  3412. INNER JOIN ICSReserve b ON a.invcode=b.invcode and a.workpoint=b.workpoint
  3413. where a.invcode='{2}' and a.workpoint='{1}' and GETDATE()>b.BeginTime and GETDATE()<b.EndTime";
  3414. sql = string.Format(sql, LotNo, WorkPoint, INVCODE, RoundedQuantity);
  3415. DataTable Sumdtt = DBHelper.SQlReturnData(sql, cmd);
  3416. log.Debug(Sumdtt.Rows[0]["SumQTY"]);
  3417. SUMQTY = 0;
  3418. //Convert.ToDecimal(Sumdtt.Rows[0]["SumQTY"]);
  3419. if (LotDocEnable.Equals("True"))
  3420. {
  3421. if (LotEnable.Equals("True") && chekEnable.Equals("True") && LotQTYYY - LotQTY > 0)
  3422. {
  3423. ZLtable = ICSControlModeService.GetZL();
  3424. if (ZLtable == null)
  3425. {
  3426. throw new Exception(language.GetNameByCode("WMSAPIInfo471"));
  3427. }
  3428. for (int i = 0; i < ZLtable.Rows.Count; i++)
  3429. {
  3430. string zlName = ZLtable.Rows[i]["Name"].ToString();
  3431. string zlTransCode = ZLtable.Rows[i]["BusinessCode"].ToString();
  3432. string Enable = ZLtable.Rows[i]["Enable"].ToString();
  3433. if (zlTransCode.Equals(BusinessCode))
  3434. {
  3435. if (Enable.Equals("True"))
  3436. {
  3437. ///更新日志
  3438. sql = @"
  3439. 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}')
  3440. BEGIN
  3441. RAISERROR('" + language.GetNameByCode("WMSAPIInfo472") + @"',16,1);
  3442. RETURN
  3443. END
  3444. UPDATE ICSWareHouseLotInfoLog SET EATTRIBUTE2='1' WHERE LotNo='{0}' AND WorkPoint='{1}' and transtype='15' and TransCode='{3}' and TransSequence='{4}'
  3445. ";
  3446. sql = string.Format(sql, LotNo, WorkPoint, LogID, TransCode, TransSequence);
  3447. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3448. {
  3449. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"占料标识更新失败!");
  3450. }
  3451. ///更新库存
  3452. sql = @"DECLARE @ReservedQuantity VARCHAR(10);
  3453. SELECT @ReservedQuantity = CAST(b.Quantity AS VARCHAR(10))
  3454. FROM ICSReserve b
  3455. INNER JOIN ICSWareHouseLotInfo a
  3456. ON a.invcode = b.invcode
  3457. AND a.workpoint = b.workpoint
  3458. AND a.warehousecode = b.whcode
  3459. WHERE '{4}' < b.Quantity
  3460. AND b.invcode = '{3}'
  3461. AND GETDATE() > b.BeginTime
  3462. AND GETDATE() < b.EndTime;
  3463. IF EXISTS(SELECT * FROM ICSWareHouseLotInfo a
  3464. INNER JOIN ICSReserve b ON a.invcode=b.invcode
  3465. AND a.workpoint=b.workpoint
  3466. AND a.warehousecode=b.whcode
  3467. WHERE a.invcode='{3}'
  3468. AND a.workpoint='{1}'
  3469. AND SYSDATETIME() > b.BeginTime
  3470. AND SYSDATETIME() < b.EndTime
  3471. AND b.enable='1')
  3472. BEGIN
  3473. IF @ReservedQuantity IS NOT NULL
  3474. BEGIN
  3475. RAISERROR('''{3}'',''{4}'''' + @ReservedQuantity + ''!', 16, 1);
  3476. RETURN
  3477. END
  3478. END
  3479. UPDATE ICSWareHouseLotInfo
  3480. SET Quantity = ISNULL(Quantity, 0) - '{2}',
  3481. LockQuantity = ISNULL(LockQuantity, 0) - '{2}'
  3482. WHERE LotNo = '{0}'
  3483. AND WorkPoint = '{1}';
  3484. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a
  3485. WHERE a.LotNo = '{0}'
  3486. AND a.WorkPoint = '{1}'
  3487. AND Quantity - LockQuantity < 0)
  3488. BEGIN
  3489. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"', 16, 1);
  3490. RETURN
  3491. END
  3492. ";
  3493. sql = string.Format(sql, LotNo, WorkPoint, RoundedQuantity, INVCODE, SUMQTY);
  3494. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3495. {
  3496. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  3497. }
  3498. }
  3499. else
  3500. {
  3501. if (InvOQc.Equals("True"))
  3502. {
  3503. sql = @"select a.id from ICSWareHouseLotInfo a
  3504. inner JOIN ICSInspectDetail b ON a.WorkPoint=b.WorkPoint and a.LotNo=b.LotNo
  3505. where a.LotNo='{0}' and a.WorkPoint='{1}' ";//and a.Inspect = '0'
  3506. sql = string.Format(sql, LotNo, WorkPoint);
  3507. DataTable Inspectdtt = DBHelper.SQlReturnData(sql, cmd);
  3508. if (Inspectdtt.Rows.Count > 0 && Inspectdtt != null)
  3509. {
  3510. sql = @"select a.id from ICSWareHouseLotInfo a
  3511. inner JOIN ICSInspectDetail b ON a.WorkPoint=b.WorkPoint and a.LotNo=b.LotNo
  3512. where a.LotNo='{0}' and a.WorkPoint='{1}' and a.Inspect = '0'";
  3513. sql = string.Format(sql, LotNo, WorkPoint);
  3514. DataTable InspectNewdtt = DBHelper.SQlReturnData(sql, cmd);
  3515. if (InspectNewdtt.Rows.Count == 0 || InspectNewdtt == null)
  3516. {
  3517. throw new Exception("条码在库检验,未检验完成,请确认!");
  3518. }
  3519. }
  3520. }
  3521. ///更新库存
  3522. sql = @"DECLARE @ReservedQuantity VARCHAR(10);
  3523. SELECT @ReservedQuantity = CAST(b.Quantity AS VARCHAR(10))
  3524. FROM ICSReserve b
  3525. INNER JOIN ICSWareHouseLotInfo a
  3526. ON a.invcode = b.invcode
  3527. AND a.workpoint = b.workpoint
  3528. AND a.warehousecode = b.whcode
  3529. WHERE '{4}' < b.Quantity
  3530. AND b.invcode = '{3}'
  3531. AND GETDATE() > b.BeginTime
  3532. AND GETDATE() < b.EndTime;
  3533. IF EXISTS(SELECT * FROM ICSWareHouseLotInfo a
  3534. INNER JOIN ICSReserve b ON a.invcode=b.invcode
  3535. AND a.workpoint=b.workpoint
  3536. AND a.warehousecode=b.whcode
  3537. WHERE a.invcode='{3}'
  3538. AND a.workpoint='{1}'
  3539. AND SYSDATETIME() > b.BeginTime
  3540. AND SYSDATETIME() < b.EndTime
  3541. AND b.enable='1')
  3542. BEGIN
  3543. IF @ReservedQuantity IS NOT NULL
  3544. BEGIN
  3545. RAISERROR('''{3}'',''{4}'''' + @ReservedQuantity + ''!', 16, 1);
  3546. RETURN
  3547. END
  3548. END
  3549. UPDATE ICSWareHouseLotInfo
  3550. SET Quantity = ISNULL(Quantity, 0) - '{2}'
  3551. WHERE LotNo = '{0}'
  3552. AND WorkPoint = '{1}';
  3553. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a
  3554. WHERE a.LotNo = '{0}'
  3555. AND a.WorkPoint = '{1}'
  3556. AND Quantity - LockQuantity < 0)
  3557. BEGIN
  3558. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"', 16, 1);
  3559. RETURN
  3560. END
  3561. ";
  3562. sql = string.Format(sql, LotNo, WorkPoint, RoundedQuantity, INVCODE, SUMQTY);
  3563. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3564. {
  3565. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  3566. }
  3567. }
  3568. }
  3569. }
  3570. ///分批前添加日志
  3571. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  3572. BEGIN
  3573. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  3574. RETURN
  3575. END
  3576. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransID,TransCode,TransSequence,LotNo,InvCode,
  3577. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  3578. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  3579. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  3580. MTIME,WorkPoint,EATTRIBUTE1)
  3581. SELECT NEWID(),'{3}','{9}','{7}','{8}',a.LotNo ,a.InvCode ,
  3582. c.WarehouseCode,c.LocationCode,'','',c.Quantity+{6},
  3583. '','0','{4}','31','0','',
  3584. '','','',f.F_Account ,f.F_RealName ,
  3585. SYSDATETIME() ,a.WorkPoint ,''
  3586. FROM ICSInventoryLot a
  3587. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  3588. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  3589. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  3590. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  3591. ";
  3592. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransType, BusinessCode, Quantity, TransCode, TransSequence, TransID);
  3593. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3594. {
  3595. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  3596. }
  3597. #region 获取分批后的条码(lotstr)
  3598. sql = @"SELECT TOP 1 LotNO FROM ICSInventoryLot WHERE EATTRIBUTE1='{0}' AND WorkPoint='{1}'
  3599. ORDER BY CAST(SUBSTRING(LotNO, (LEN(LotNO)-CHARINDEX('-',REVERSE(LotNO))+1)+1,CHARINDEX('-',REVERSE(LotNO))-1) AS INT) DESC";
  3600. sql = string.Format(sql, LotNo, WorkPoint);
  3601. dt = DBHelper.SQlReturnData(sql, cmd);
  3602. if (dt.Rows.Count == 0)
  3603. {
  3604. lotstr = LotNo + "-" + 1;
  3605. }
  3606. else
  3607. {
  3608. lotstr = LotNo + "-" + (Convert.ToInt32(dt.Rows[0]["LotNO"].ToString().Split('-')[dt.Rows[0]["LotNO"].ToString().Split('-').Length - 1]) + 1).ToString();
  3609. }
  3610. NewBarCodeList.Add(lotstr);//将分批后新条码添加到新集合
  3611. #endregion
  3612. #region 将分批后的条码记录插入条码表,库存表及日志表并将原条码库存数量清零
  3613. sql = @"INSERT INTO ICSInventoryLot(ID,LotNo,InvCode,ProductDate,ExpirationDate,
  3614. Quantity,Amount,ExtensionID,Type,PrintTimes,
  3615. LastPrintUser,LastPrintTime,MUSER,MUSERName,MTIME,
  3616. WorkPoint,EATTRIBUTE1,EATTRIBUTE2,EATTRIBUTE3,EATTRIBUTE4,EATTRIBUTE5,EATTRIBUTE6,EATTRIBUTE7,EATTRIBUTE8,
  3617. EATTRIBUTE9,EATTRIBUTE10,EATTRIBUTE11,EATTRIBUTE12,EATTRIBUTE13,EATTRIBUTE14,EATTRIBUTE15,EATTRIBUTE16,EATTRIBUTE17,EATTRIBUTE18,EATTRIBUTE19,EATTRIBUTE20,
  3618. EATTRIBUTE21,EATTRIBUTE22,EATTRIBUTE23,EATTRIBUTE24,EATTRIBUTE25,EATTRIBUTE26,EATTRIBUTE27,EATTRIBUTE28,EATTRIBUTE29,EATTRIBUTE30)
  3619. SELECT TOP 1 NEWID(),'{0}',a.InvCode,a.ProductDate,a.ExpirationDate,
  3620. '{2}',a.Amount/a.Quantity*Quantity,a.ExtensionID,a.Type,a.PrintTimes,
  3621. a.LastPrintUser,a.LastPrintTime,a.MUSER ,a.MUSERName ,GETDATE(),
  3622. a.WorkPoint ,'{1}',a.EATTRIBUTE2,a.EATTRIBUTE3,a.EATTRIBUTE4,a.EATTRIBUTE5,a.EATTRIBUTE6,a.EATTRIBUTE7,a.EATTRIBUTE8,
  3623. a.EATTRIBUTE9,a.EATTRIBUTE10,a.EATTRIBUTE11,a.EATTRIBUTE12,a.EATTRIBUTE13,a.EATTRIBUTE14,a.EATTRIBUTE15,a.EATTRIBUTE16,a.EATTRIBUTE17,a.EATTRIBUTE18,a.EATTRIBUTE19,a.EATTRIBUTE20,
  3624. a.EATTRIBUTE21,a.EATTRIBUTE22,a.EATTRIBUTE23,a.EATTRIBUTE24,a.EATTRIBUTE25,a.EATTRIBUTE26,a.EATTRIBUTE27,a.EATTRIBUTE28,a.EATTRIBUTE29,a.EATTRIBUTE30
  3625. From ICSInventoryLot a
  3626. where a.LotNo='{1}' and a.WorkPoint='{3}'";
  3627. sql = string.Format(sql, lotstr, LotNo, RoundedQuantity, WorkPoint);
  3628. cmd.CommandText = sql;
  3629. result = cmd.ExecuteNonQuery();
  3630. if (result <= 0)
  3631. {
  3632. throw new Exception(language.GetNameByCode("WMSAPIInfo195"));//条码分批后条码表存入失败!
  3633. }
  3634. sql = @"INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  3635. select NEWID(),'{0}',WarehouseCode,LocationCode,InvCode,'0',InDate,LockQuantity
  3636. ,MUSER,MUSERName,GETDATE(),'{3}',''
  3637. from ICSWareHouseLotInfo
  3638. where LotNO='{1}' AND WorkPoint='{3}'";
  3639. sql = string.Format(sql, lotstr, LotNo, RoundedQuantity, WorkPoint);
  3640. cmd.CommandText = sql;
  3641. result = cmd.ExecuteNonQuery();
  3642. if (result <= 0)
  3643. {
  3644. throw new Exception(language.GetNameByCode("WMSAPIInfo196"));//条码分批后库存表存入失败!
  3645. }
  3646. //插入条码单据表
  3647. sql = @"INSERT INTO ICSInventoryLotDetail(LotNo,TransID,TransCode,TransSequence,MUSER,MUSERName,MTIME,WorkPoint)
  3648. SELECT '{3}','{4}',b.TransCode,b.TransSequence,f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint
  3649. FROM ICSInventoryLot a
  3650. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  3651. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  3652. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  3653. sql = string.Format(sql, LotNo, WorkPoint, User, lotstr, TransID);
  3654. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3655. {
  3656. throw new Exception(language.GetNameByCode("WMSAPIInfo174"));//"条码单据表写入失败!");
  3657. }
  3658. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransID,TransCode,TransSequence,LotNo,InvCode,
  3659. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  3660. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  3661. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  3662. MTIME,WorkPoint,EATTRIBUTE1,LogID)
  3663. SELECT NEWID(),'{3}','{11}','{4}','{5}','{10}' ,a.InvCode ,
  3664. c.WarehouseCode,c.LocationCode,'','','{6}',
  3665. '','0','{7}','{8}','0','',
  3666. '','','',f.F_Account ,f.F_RealName ,
  3667. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  3668. FROM ICSInventoryLot a
  3669. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  3670. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  3671. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  3672. ";
  3673. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID, lotstr, TransID);
  3674. cmd.CommandText = sql;
  3675. result = cmd.ExecuteNonQuery();
  3676. if (result <= 0)
  3677. {
  3678. throw new Exception(language.GetNameByCode("WMSAPIInfo197"));//条码分批后库存日志表存入失败!
  3679. }
  3680. ///添加日志
  3681. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  3682. BEGIN
  3683. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  3684. RETURN
  3685. END
  3686. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransID,TransCode,TransSequence,LotNo,InvCode,
  3687. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  3688. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  3689. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  3690. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  3691. SELECT NEWID(),'{3}','{10}','{4}','{5}',a.LotNo ,a.InvCode ,
  3692. c.WarehouseCode,c.LocationCode,'','',c.Quantity,
  3693. '','0','{7}','32','0','',
  3694. '','','',f.F_Account ,f.F_RealName ,
  3695. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  3696. FROM ICSInventoryLot a
  3697. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  3698. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  3699. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  3700. ";
  3701. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID, TransID);
  3702. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3703. {
  3704. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  3705. }
  3706. if (PrintEnable.Equals("True") && DisPrintEnable.Equals("True"))
  3707. {
  3708. string PrintData = DBHelper.ReadPrintStream();
  3709. sql = @"" + PrintData + "";
  3710. //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
  3711. // from ICSWareHouseLotInfolog A
  3712. // left join ICSInventoryLot B on A.LotNO=B.LotNO and a.WorkPoint=b.WorkPoint
  3713. // left join ICSWareHouseLotInfo C ON A.LotNO=C.LotNO and a.WorkPoint=c.WorkPoint
  3714. // left join ICSInventory D on b.INVCODE=d.INVCODE and b.WorkPoint=d.WorkPoint
  3715. // where A.lotno ='{0}' and a.workpoint='{1}' and a.BusinessCode='{2}'
  3716. // ";
  3717. sql = string.Format(sql, LotNo, WorkPoint, BusinessCode, Identification);
  3718. dtLotno = DBHelper.SQlReturnData(sql, cmd);
  3719. lstDt = dtLotno;
  3720. }
  3721. #endregion
  3722. }
  3723. else
  3724. {
  3725. NewBarCodeList.Add(LotNo);
  3726. ///添加日志
  3727. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  3728. BEGIN
  3729. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  3730. RETURN
  3731. END
  3732. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransID,TransCode,TransSequence,LotNo,InvCode,
  3733. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  3734. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  3735. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  3736. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  3737. SELECT NEWID(),'{3}','{10}','{4}','{5}',a.LotNo ,a.InvCode ,
  3738. c.WarehouseCode,c.LocationCode,'','','{6}',
  3739. '','0','{7}','{8}','0','',
  3740. '','','',f.F_Account ,f.F_RealName ,
  3741. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  3742. FROM ICSInventoryLot a
  3743. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  3744. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  3745. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  3746. ";
  3747. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID, TransID);
  3748. log.Debug("出库日志" + sql);
  3749. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3750. {
  3751. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  3752. }
  3753. ZLtable = ICSControlModeService.GetZL();
  3754. if (ZLtable == null)
  3755. {
  3756. throw new Exception(language.GetNameByCode("WMSAPIInfo471"));
  3757. }
  3758. for (int i = 0; i < ZLtable.Rows.Count; i++)
  3759. {
  3760. string zlTransCode = ZLtable.Rows[i]["BusinessCode"].ToString();
  3761. string Enable = ZLtable.Rows[i]["Enable"].ToString();
  3762. if (zlTransCode.Equals(BusinessCode))
  3763. {
  3764. isDis = true;
  3765. if (Enable.Equals("True"))
  3766. {
  3767. ///更新日志
  3768. sql = @"
  3769. 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}')
  3770. BEGIN
  3771. RAISERROR('" + language.GetNameByCode("WMSAPIInfo472") + @"',16,1);
  3772. RETURN
  3773. END
  3774. UPDATE ICSWareHouseLotInfoLog SET EATTRIBUTE2='1' WHERE LotNo='{0}' AND WorkPoint='{1}' and transtype='15' and TransCode='{3}' and TransSequence='{4}'
  3775. ";
  3776. sql = string.Format(sql, LotNo, WorkPoint, LogID, TransCode, TransSequence);
  3777. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3778. {
  3779. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"占料标识更新失败!");
  3780. }
  3781. ///更新库存
  3782. sql = @"DECLARE @ReservedQuantity VARCHAR(10);
  3783. SELECT @ReservedQuantity = CAST(b.Quantity AS VARCHAR(10))
  3784. FROM ICSReserve b
  3785. INNER JOIN ICSWareHouseLotInfo a
  3786. ON a.invcode = b.invcode
  3787. AND a.workpoint = b.workpoint
  3788. AND a.warehousecode = b.whcode
  3789. WHERE '{4}' < b.Quantity
  3790. AND b.invcode = '{3}'
  3791. AND GETDATE() > b.BeginTime
  3792. AND GETDATE() < b.EndTime;
  3793. IF EXISTS(SELECT * FROM ICSWareHouseLotInfo a
  3794. INNER JOIN ICSReserve b ON a.invcode=b.invcode
  3795. AND a.workpoint=b.workpoint
  3796. AND a.warehousecode=b.whcode
  3797. WHERE a.invcode='{3}'
  3798. AND a.workpoint='{1}'
  3799. AND SYSDATETIME() > b.BeginTime
  3800. AND SYSDATETIME() < b.EndTime
  3801. AND b.enable='1')
  3802. BEGIN
  3803. IF @ReservedQuantity IS NOT NULL
  3804. BEGIN
  3805. RAISERROR('''{3}'',''{4}'''' + @ReservedQuantity + ''!', 16, 1);
  3806. RETURN
  3807. END
  3808. END
  3809. UPDATE ICSWareHouseLotInfo
  3810. SET Quantity = ISNULL(Quantity, 0) - '{2}',
  3811. LockQuantity = ISNULL(LockQuantity, 0) - '{2}'
  3812. WHERE LotNo = '{0}'
  3813. AND WorkPoint = '{1}';
  3814. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a
  3815. WHERE a.LotNo = '{0}'
  3816. AND a.WorkPoint = '{1}'
  3817. AND Quantity - LockQuantity < 0)
  3818. BEGIN
  3819. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"', 16, 1);
  3820. RETURN
  3821. END
  3822. ";
  3823. sql = string.Format(sql, LotNo, WorkPoint, RoundedQuantity, INVCODE, SUMQTY);
  3824. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3825. {
  3826. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  3827. }
  3828. }
  3829. else
  3830. {
  3831. if (InvOQc.Equals("True"))
  3832. {
  3833. sql = @"select a.id from ICSWareHouseLotInfo a
  3834. inner JOIN ICSInspectDetail b ON a.WorkPoint=b.WorkPoint and a.LotNo=b.LotNo
  3835. where a.LotNo='{0}' and a.WorkPoint='{1}' ";//and a.Inspect = '0'
  3836. sql = string.Format(sql, LotNo, WorkPoint);
  3837. DataTable Inspectdtt = DBHelper.SQlReturnData(sql, cmd);
  3838. if (Inspectdtt.Rows.Count > 0 && Inspectdtt != null)
  3839. {
  3840. sql = @"select a.id from ICSWareHouseLotInfo a
  3841. inner JOIN ICSInspectDetail b ON a.WorkPoint=b.WorkPoint and a.LotNo=b.LotNo
  3842. where a.LotNo='{0}' and a.WorkPoint='{1}' and a.Inspect = '0'";
  3843. sql = string.Format(sql, LotNo, WorkPoint);
  3844. DataTable InspectNewdtt = DBHelper.SQlReturnData(sql, cmd);
  3845. if (InspectNewdtt.Rows.Count == 0 || InspectNewdtt == null)
  3846. {
  3847. throw new Exception("条码在库检验,未检验完成,请确认!");
  3848. }
  3849. }
  3850. }
  3851. ///更新库存
  3852. sql = @"DECLARE @ReservedQuantity VARCHAR(10);
  3853. SELECT @ReservedQuantity = CAST(b.Quantity AS VARCHAR(10))
  3854. FROM ICSReserve b
  3855. INNER JOIN ICSWareHouseLotInfo a
  3856. ON a.invcode = b.invcode
  3857. AND a.workpoint = b.workpoint
  3858. AND a.warehousecode = b.whcode
  3859. WHERE '{4}' < b.Quantity
  3860. AND b.invcode = '{3}'
  3861. AND GETDATE() > b.BeginTime
  3862. AND GETDATE() < b.EndTime;
  3863. IF EXISTS(SELECT * FROM ICSWareHouseLotInfo a
  3864. INNER JOIN ICSReserve b ON a.invcode=b.invcode
  3865. AND a.workpoint=b.workpoint
  3866. AND a.warehousecode=b.whcode
  3867. WHERE a.invcode='{3}'
  3868. AND a.workpoint='{1}'
  3869. AND SYSDATETIME() > b.BeginTime
  3870. AND SYSDATETIME() < b.EndTime
  3871. AND b.enable='1')
  3872. BEGIN
  3873. IF @ReservedQuantity IS NOT NULL
  3874. BEGIN
  3875. RAISERROR('''{3}'',''{4}'''' + @ReservedQuantity + ''!', 16, 1);
  3876. RETURN
  3877. END
  3878. END
  3879. UPDATE ICSWareHouseLotInfo
  3880. SET Quantity = ISNULL(Quantity, 0) - '{2}'
  3881. WHERE LotNo = '{0}'
  3882. AND WorkPoint = '{1}';
  3883. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a
  3884. WHERE a.LotNo = '{0}'
  3885. AND a.WorkPoint = '{1}'
  3886. AND Quantity - LockQuantity < 0)
  3887. BEGIN
  3888. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"', 16, 1);
  3889. RETURN
  3890. END
  3891. ";
  3892. sql = string.Format(sql, LotNo, WorkPoint, RoundedQuantity, INVCODE, SUMQTY);
  3893. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3894. {
  3895. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  3896. }
  3897. }
  3898. }
  3899. // else { throw new Exception("单据类型未配置!"); }
  3900. }
  3901. //if (isDis == false)
  3902. //{
  3903. // throw new Exception("单据类型未配置!");
  3904. //}
  3905. /////更新库存
  3906. //sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  3907. // IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity<0)
  3908. // BEGIN
  3909. // RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  3910. // RETURN
  3911. // END";
  3912. //sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  3913. //if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3914. //{
  3915. // throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  3916. //}
  3917. }
  3918. }
  3919. else
  3920. {
  3921. if (LotEnable.Equals("True") && LotQTYYY - LotQTY > 0)
  3922. {
  3923. ZLtable = ICSControlModeService.GetZL();
  3924. if (ZLtable == null)
  3925. {
  3926. throw new Exception(language.GetNameByCode("WMSAPIInfo471"));
  3927. }
  3928. for (int i = 0; i < ZLtable.Rows.Count; i++)
  3929. {
  3930. string zlName = ZLtable.Rows[i]["Name"].ToString();
  3931. string zlTransCode = ZLtable.Rows[i]["BusinessCode"].ToString();
  3932. string Enable = ZLtable.Rows[i]["Enable"].ToString();
  3933. if (zlTransCode.Equals(BusinessCode))
  3934. {
  3935. if (Enable.Equals("True"))
  3936. {
  3937. ///更新日志
  3938. sql = @"
  3939. 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}')
  3940. BEGIN
  3941. RAISERROR('" + language.GetNameByCode("WMSAPIInfo472") + @"',16,1);
  3942. RETURN
  3943. END
  3944. UPDATE ICSWareHouseLotInfoLog SET EATTRIBUTE2='1' WHERE LotNo='{0}' AND WorkPoint='{1}' and transtype='15' and TransCode='{3}' and TransSequence='{4}'
  3945. ";
  3946. sql = string.Format(sql, LotNo, WorkPoint, LogID, TransCode, TransSequence);
  3947. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3948. {
  3949. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"占料标识更新失败!");
  3950. }
  3951. ///更新库存
  3952. sql = @"DECLARE @ReservedQuantity VARCHAR(10);
  3953. SELECT @ReservedQuantity = CAST(b.Quantity AS VARCHAR(10))
  3954. FROM ICSReserve b
  3955. INNER JOIN ICSWareHouseLotInfo a
  3956. ON a.invcode = b.invcode
  3957. AND a.workpoint = b.workpoint
  3958. AND a.warehousecode = b.whcode
  3959. WHERE '{4}' < b.Quantity
  3960. AND b.invcode = '{3}'
  3961. AND GETDATE() > b.BeginTime
  3962. AND GETDATE() < b.EndTime;
  3963. IF EXISTS(SELECT * FROM ICSWareHouseLotInfo a
  3964. INNER JOIN ICSReserve b ON a.invcode=b.invcode
  3965. AND a.workpoint=b.workpoint
  3966. AND a.warehousecode=b.whcode
  3967. WHERE a.invcode='{3}'
  3968. AND a.workpoint='{1}'
  3969. AND SYSDATETIME() > b.BeginTime
  3970. AND SYSDATETIME() < b.EndTime
  3971. AND b.enable='1')
  3972. BEGIN
  3973. IF @ReservedQuantity IS NOT NULL
  3974. BEGIN
  3975. RAISERROR('''{3}'',''{4}'''' + @ReservedQuantity + ''!', 16, 1);
  3976. RETURN
  3977. END
  3978. END
  3979. UPDATE ICSWareHouseLotInfo
  3980. SET Quantity = ISNULL(Quantity, 0) - '{2}',
  3981. LockQuantity = ISNULL(LockQuantity, 0) - '{2}'
  3982. WHERE LotNo = '{0}'
  3983. AND WorkPoint = '{1}';
  3984. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a
  3985. WHERE a.LotNo = '{0}'
  3986. AND a.WorkPoint = '{1}'
  3987. AND Quantity - LockQuantity < 0)
  3988. BEGIN
  3989. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"', 16, 1);
  3990. RETURN
  3991. END
  3992. ";
  3993. sql = string.Format(sql, LotNo, WorkPoint, RoundedQuantity, INVCODE, SUMQTY, TransCode, TransSequence);
  3994. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3995. {
  3996. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  3997. }
  3998. }
  3999. else
  4000. {
  4001. if (InvOQc.Equals("True"))
  4002. {
  4003. sql = @"select a.id from ICSWareHouseLotInfo a
  4004. inner JOIN ICSInspectDetail b ON a.WorkPoint=b.WorkPoint and a.LotNo=b.LotNo
  4005. where a.LotNo='{0}' and a.WorkPoint='{1}' ";//and a.Inspect = '0'
  4006. sql = string.Format(sql, LotNo, WorkPoint);
  4007. DataTable Inspectdtt = DBHelper.SQlReturnData(sql, cmd);
  4008. if (Inspectdtt.Rows.Count > 0 && Inspectdtt != null)
  4009. {
  4010. sql = @"select a.id from ICSWareHouseLotInfo a
  4011. inner JOIN ICSInspectDetail b ON a.WorkPoint=b.WorkPoint and a.LotNo=b.LotNo
  4012. where a.LotNo='{0}' and a.WorkPoint='{1}' and a.Inspect = '0'";
  4013. sql = string.Format(sql, LotNo, WorkPoint);
  4014. DataTable InspectNewdtt = DBHelper.SQlReturnData(sql, cmd);
  4015. if (InspectNewdtt.Rows.Count == 0 || InspectNewdtt == null)
  4016. {
  4017. throw new Exception("条码在库检验,未检验完成,请确认!");
  4018. }
  4019. }
  4020. }
  4021. ///更新库存
  4022. sql = @"DECLARE @ReservedQuantity VARCHAR(10);
  4023. SELECT @ReservedQuantity = CAST(b.Quantity AS VARCHAR(10))
  4024. FROM ICSReserve b
  4025. INNER JOIN ICSWareHouseLotInfo a
  4026. ON a.invcode = b.invcode
  4027. AND a.workpoint = b.workpoint
  4028. AND a.warehousecode = b.whcode
  4029. WHERE '{4}' < b.Quantity
  4030. AND b.invcode = '{3}'
  4031. AND GETDATE() > b.BeginTime
  4032. AND GETDATE() < b.EndTime;
  4033. IF EXISTS(SELECT * FROM ICSWareHouseLotInfo a
  4034. INNER JOIN ICSReserve b ON a.invcode=b.invcode
  4035. AND a.workpoint=b.workpoint
  4036. AND a.warehousecode=b.whcode
  4037. WHERE a.invcode='{3}'
  4038. AND a.workpoint='{1}'
  4039. AND SYSDATETIME() > b.BeginTime
  4040. AND SYSDATETIME() < b.EndTime
  4041. AND b.enable='1')
  4042. BEGIN
  4043. IF @ReservedQuantity IS NOT NULL
  4044. BEGIN
  4045. RAISERROR('''{3}'',''{4}'''' + @ReservedQuantity + ''!', 16, 1);
  4046. RETURN
  4047. END
  4048. END
  4049. UPDATE ICSWareHouseLotInfo
  4050. SET Quantity = ISNULL(Quantity, 0) - '{2}'
  4051. WHERE LotNo = '{0}'
  4052. AND WorkPoint = '{1}';
  4053. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a
  4054. WHERE a.LotNo = '{0}'
  4055. AND a.WorkPoint = '{1}'
  4056. AND Quantity - LockQuantity < 0)
  4057. BEGIN
  4058. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"', 16, 1);
  4059. RETURN
  4060. END
  4061. ";
  4062. sql = string.Format(sql, LotNo, WorkPoint, RoundedQuantity, INVCODE, SUMQTY);
  4063. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4064. {
  4065. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  4066. }
  4067. }
  4068. }
  4069. }
  4070. ///分批前添加日志
  4071. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  4072. BEGIN
  4073. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  4074. RETURN
  4075. END
  4076. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransID,TransCode,TransSequence,LotNo,InvCode,
  4077. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  4078. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  4079. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  4080. MTIME,WorkPoint,EATTRIBUTE1)
  4081. SELECT NEWID(),'{3}','{9}','{7}','{8}',a.LotNo ,a.InvCode ,
  4082. c.WarehouseCode,c.LocationCode,'','',c.Quantity+{6},
  4083. '','0','{4}','31','0','',
  4084. '','','',f.F_Account ,f.F_RealName ,
  4085. SYSDATETIME() ,a.WorkPoint ,''
  4086. FROM ICSInventoryLot a
  4087. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  4088. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  4089. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  4090. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  4091. ";
  4092. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransType, BusinessCode, Quantity, TransCode, TransSequence, TransID);
  4093. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4094. {
  4095. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  4096. }
  4097. #region 获取分批后的条码(lotstr)
  4098. sql = @"SELECT TOP 1 LotNO FROM ICSInventoryLot WHERE EATTRIBUTE1='{0}' AND WorkPoint='{1}'
  4099. ORDER BY CAST(SUBSTRING(LotNO, (LEN(LotNO)-CHARINDEX('-',REVERSE(LotNO))+1)+1,CHARINDEX('-',REVERSE(LotNO))-1) AS INT) DESC";
  4100. sql = string.Format(sql, LotNo, WorkPoint);
  4101. dt = DBHelper.SQlReturnData(sql, cmd);
  4102. if (dt.Rows.Count == 0)
  4103. {
  4104. lotstr = LotNo + "-" + 1;
  4105. }
  4106. else
  4107. {
  4108. lotstr = LotNo + "-" + (Convert.ToInt32(dt.Rows[0]["LotNO"].ToString().Split('-')[dt.Rows[0]["LotNO"].ToString().Split('-').Length - 1]) + 1).ToString();
  4109. }
  4110. NewBarCodeList.Add(lotstr);//将分批后新条码添加到新集合
  4111. #endregion
  4112. #region 将分批后的条码记录插入条码表,库存表及日志表并将原条码库存数量清零
  4113. sql = @"INSERT INTO ICSInventoryLot(ID,LotNo,InvCode,ProductDate,ExpirationDate,
  4114. Quantity,Amount,ExtensionID,Type,PrintTimes,
  4115. LastPrintUser,LastPrintTime,MUSER,MUSERName,MTIME,
  4116. WorkPoint,EATTRIBUTE1,EATTRIBUTE2,EATTRIBUTE3,EATTRIBUTE4,EATTRIBUTE5,EATTRIBUTE6,EATTRIBUTE7,EATTRIBUTE8,
  4117. EATTRIBUTE9,EATTRIBUTE10,EATTRIBUTE11,EATTRIBUTE12,EATTRIBUTE13,EATTRIBUTE14,EATTRIBUTE15,EATTRIBUTE16,EATTRIBUTE17,EATTRIBUTE18,EATTRIBUTE19,EATTRIBUTE20,
  4118. EATTRIBUTE21,EATTRIBUTE22,EATTRIBUTE23,EATTRIBUTE24,EATTRIBUTE25,EATTRIBUTE26,EATTRIBUTE27,EATTRIBUTE28,EATTRIBUTE29,EATTRIBUTE30)
  4119. SELECT TOP 1 NEWID(),'{0}',a.InvCode,a.ProductDate,a.ExpirationDate,
  4120. '{2}',a.Amount/a.Quantity*Quantity,a.ExtensionID,a.Type,a.PrintTimes,
  4121. a.LastPrintUser,a.LastPrintTime,a.MUSER ,a.MUSERName ,GETDATE(),
  4122. a.WorkPoint ,'{1}',a.EATTRIBUTE2,a.EATTRIBUTE3,a.EATTRIBUTE4,a.EATTRIBUTE5,a.EATTRIBUTE6,a.EATTRIBUTE7,a.EATTRIBUTE8,
  4123. a.EATTRIBUTE9,a.EATTRIBUTE10,a.EATTRIBUTE11,a.EATTRIBUTE12,a.EATTRIBUTE13,a.EATTRIBUTE14,a.EATTRIBUTE15,a.EATTRIBUTE16,a.EATTRIBUTE17,a.EATTRIBUTE18,a.EATTRIBUTE19,a.EATTRIBUTE20,
  4124. a.EATTRIBUTE21,a.EATTRIBUTE22,a.EATTRIBUTE23,a.EATTRIBUTE24,a.EATTRIBUTE25,a.EATTRIBUTE26,a.EATTRIBUTE27,a.EATTRIBUTE28,a.EATTRIBUTE29,a.EATTRIBUTE30
  4125. From ICSInventoryLot a
  4126. where a.LotNo='{1}' and a.WorkPoint='{3}'";
  4127. sql = string.Format(sql, lotstr, LotNo, RoundedQuantity, WorkPoint);
  4128. cmd.CommandText = sql;
  4129. result = cmd.ExecuteNonQuery();
  4130. if (result <= 0)
  4131. {
  4132. throw new Exception(language.GetNameByCode("WMSAPIInfo195"));//条码分批后条码表存入失败!
  4133. }
  4134. sql = @"INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  4135. select NEWID(),'{0}',WarehouseCode,LocationCode,InvCode,'0',InDate,LockQuantity
  4136. ,MUSER,MUSERName,GETDATE(),'{3}',''
  4137. from ICSWareHouseLotInfo
  4138. where LotNO='{1}' AND WorkPoint='{3}'";
  4139. sql = string.Format(sql, lotstr, LotNo, RoundedQuantity, WorkPoint);
  4140. cmd.CommandText = sql;
  4141. result = cmd.ExecuteNonQuery();
  4142. if (result <= 0)
  4143. {
  4144. throw new Exception(language.GetNameByCode("WMSAPIInfo196"));//条码分批后库存表存入失败!
  4145. }
  4146. //插入条码单据表
  4147. sql = @"INSERT INTO ICSInventoryLotDetail(LotNo,TransID,TransCode,TransSequence,MUSER,MUSERName,MTIME,WorkPoint)
  4148. SELECT '{3}','{4}',b.TransCode,b.TransSequence,f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint
  4149. FROM ICSInventoryLot a
  4150. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  4151. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  4152. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  4153. sql = string.Format(sql, LotNo, WorkPoint, User, lotstr, TransID);
  4154. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4155. {
  4156. throw new Exception(language.GetNameByCode("WMSAPIInfo174"));//"条码单据表写入失败!");
  4157. }
  4158. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransID,TransCode,TransSequence,LotNo,InvCode,
  4159. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  4160. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  4161. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  4162. MTIME,WorkPoint,EATTRIBUTE1,LogID)
  4163. SELECT NEWID(),'{3}','{11}','{4}','{5}','{10}' ,a.InvCode ,
  4164. c.WarehouseCode,c.LocationCode,'','','{6}',
  4165. '','0','{7}','{8}','0','',
  4166. '','','',f.F_Account ,f.F_RealName ,
  4167. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  4168. FROM ICSInventoryLot a
  4169. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  4170. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  4171. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  4172. ";
  4173. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID, lotstr, TransID);
  4174. cmd.CommandText = sql;
  4175. result = cmd.ExecuteNonQuery();
  4176. if (result <= 0)
  4177. {
  4178. throw new Exception(language.GetNameByCode("WMSAPIInfo197"));//条码分批后库存日志表存入失败!
  4179. }
  4180. ///添加日志
  4181. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  4182. BEGIN
  4183. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  4184. RETURN
  4185. END
  4186. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransID,TransCode,TransSequence,LotNo,InvCode,
  4187. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  4188. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  4189. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  4190. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  4191. SELECT NEWID(),'{3}','{10}','{4}','{5}',a.LotNo ,a.InvCode ,
  4192. c.WarehouseCode,c.LocationCode,'','',c.Quantity,
  4193. '','0','{7}','32','0','',
  4194. '','','',f.F_Account ,f.F_RealName ,
  4195. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  4196. FROM ICSInventoryLot a
  4197. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  4198. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  4199. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  4200. ";
  4201. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID, TransID);
  4202. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4203. {
  4204. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  4205. }
  4206. if (PrintEnable.Equals("True") && DisPrintEnable.Equals("True"))
  4207. {
  4208. string PrintData = DBHelper.ReadPrintStream();
  4209. sql = @"" + PrintData + "";
  4210. //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
  4211. // from ICSWareHouseLotInfolog A
  4212. // left join ICSInventoryLot B on A.LotNO=B.LotNO and a.WorkPoint=b.WorkPoint
  4213. // left join ICSWareHouseLotInfo C ON A.LotNO=C.LotNO and a.WorkPoint=c.WorkPoint
  4214. // left join ICSInventory D on b.INVCODE=d.INVCODE and b.WorkPoint=d.WorkPoint
  4215. // where A.lotno ='{0}' and a.workpoint='{1}' and a.BusinessCode='{2}'
  4216. // ";
  4217. sql = string.Format(sql, LotNo, WorkPoint, BusinessCode, Identification);
  4218. dtLotno = DBHelper.SQlReturnData(sql, cmd);
  4219. lstDt = dtLotno;
  4220. }
  4221. #endregion
  4222. }
  4223. else
  4224. {
  4225. NewBarCodeList.Add(LotNo);
  4226. ///添加日志
  4227. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  4228. BEGIN
  4229. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  4230. RETURN
  4231. END
  4232. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransID,TransCode,TransSequence,LotNo,InvCode,
  4233. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  4234. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  4235. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  4236. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  4237. SELECT NEWID(),'{3}','{10}','{4}','{5}',a.LotNo ,a.InvCode ,
  4238. c.WarehouseCode,c.LocationCode,'','','{6}',
  4239. '','0','{7}','{8}','0','',
  4240. '','','',f.F_Account ,f.F_RealName ,
  4241. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  4242. FROM ICSInventoryLot a
  4243. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  4244. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  4245. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  4246. ";
  4247. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID, TransID);
  4248. log.Debug("出库日志" + sql);
  4249. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4250. {
  4251. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  4252. }
  4253. ZLtable = ICSControlModeService.GetZL();
  4254. if (ZLtable == null)
  4255. {
  4256. throw new Exception(language.GetNameByCode("WMSAPIInfo471"));
  4257. }
  4258. for (int i = 0; i < ZLtable.Rows.Count; i++)
  4259. {
  4260. string zlTransCode = ZLtable.Rows[i]["BusinessCode"].ToString();
  4261. string Enable = ZLtable.Rows[i]["Enable"].ToString();
  4262. if (zlTransCode.Equals(BusinessCode))
  4263. {
  4264. isDis = true;
  4265. if (Enable.Equals("True"))
  4266. {
  4267. ///更新日志
  4268. sql = @"
  4269. 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}')
  4270. BEGIN
  4271. RAISERROR('" + language.GetNameByCode("WMSAPIInfo472") + @"',16,1);
  4272. RETURN
  4273. END
  4274. UPDATE ICSWareHouseLotInfoLog SET EATTRIBUTE2='1' WHERE LotNo='{0}' AND WorkPoint='{1}' and transtype='15' and TransCode='{3}' and TransSequence='{4}'
  4275. ";
  4276. sql = string.Format(sql, LotNo, WorkPoint, LogID, TransCode, TransSequence);
  4277. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4278. {
  4279. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"占料标识更新失败!");
  4280. }
  4281. ///更新库存
  4282. sql = @"DECLARE @ReservedQuantity VARCHAR(10);
  4283. SELECT @ReservedQuantity = CAST(b.Quantity AS VARCHAR(10))
  4284. FROM ICSReserve b
  4285. INNER JOIN ICSWareHouseLotInfo a
  4286. ON a.invcode = b.invcode
  4287. AND a.workpoint = b.workpoint
  4288. AND a.warehousecode = b.whcode
  4289. WHERE '{4}' < b.Quantity
  4290. AND b.invcode = '{3}'
  4291. AND GETDATE() > b.BeginTime
  4292. AND GETDATE() < b.EndTime;
  4293. IF EXISTS(SELECT * FROM ICSWareHouseLotInfo a
  4294. INNER JOIN ICSReserve b ON a.invcode=b.invcode
  4295. AND a.workpoint=b.workpoint
  4296. AND a.warehousecode=b.whcode
  4297. WHERE a.invcode='{3}'
  4298. AND a.workpoint='{1}'
  4299. AND SYSDATETIME() > b.BeginTime
  4300. AND SYSDATETIME() < b.EndTime
  4301. AND b.enable='1')
  4302. BEGIN
  4303. IF @ReservedQuantity IS NOT NULL
  4304. BEGIN
  4305. RAISERROR('''{3}'',''{4}'''' + @ReservedQuantity + ''!', 16, 1);
  4306. RETURN
  4307. END
  4308. END
  4309. UPDATE ICSWareHouseLotInfo
  4310. SET Quantity = ISNULL(Quantity, 0) - '{2}',
  4311. LockQuantity = ISNULL(LockQuantity, 0) - '{2}'
  4312. WHERE LotNo = '{0}'
  4313. AND WorkPoint = '{1}';
  4314. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a
  4315. WHERE a.LotNo = '{0}'
  4316. AND a.WorkPoint = '{1}'
  4317. AND Quantity - LockQuantity < 0)
  4318. BEGIN
  4319. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"', 16, 1);
  4320. RETURN
  4321. END
  4322. ";
  4323. sql = string.Format(sql, LotNo, WorkPoint, RoundedQuantity, INVCODE, SUMQTY);
  4324. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4325. {
  4326. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  4327. }
  4328. }
  4329. else
  4330. {
  4331. if (InvOQc.Equals("True"))
  4332. {
  4333. sql = @"select a.id from ICSWareHouseLotInfo a
  4334. inner JOIN ICSInspectDetail b ON a.WorkPoint=b.WorkPoint and a.LotNo=b.LotNo
  4335. where a.LotNo='{0}' and a.WorkPoint='{1}' ";//and a.Inspect = '0'
  4336. sql = string.Format(sql, LotNo, WorkPoint);
  4337. DataTable Inspectdtt = DBHelper.SQlReturnData(sql, cmd);
  4338. if (Inspectdtt.Rows.Count > 0 && Inspectdtt != null)
  4339. {
  4340. sql = @"select a.id from ICSWareHouseLotInfo a
  4341. inner JOIN ICSInspectDetail b ON a.WorkPoint=b.WorkPoint and a.LotNo=b.LotNo
  4342. where a.LotNo='{0}' and a.WorkPoint='{1}' and a.Inspect = '0'";
  4343. sql = string.Format(sql, LotNo, WorkPoint);
  4344. DataTable InspectNewdtt = DBHelper.SQlReturnData(sql, cmd);
  4345. if (InspectNewdtt.Rows.Count == 0 || InspectNewdtt == null)
  4346. {
  4347. throw new Exception("条码在库检验,未检验完成,请确认!");
  4348. }
  4349. }
  4350. }
  4351. ///更新库存
  4352. sql = @"DECLARE @ReservedQuantity VARCHAR(10);
  4353. SELECT @ReservedQuantity = CAST(b.Quantity AS VARCHAR(10))
  4354. FROM ICSReserve b
  4355. INNER JOIN ICSWareHouseLotInfo a
  4356. ON a.invcode = b.invcode
  4357. AND a.workpoint = b.workpoint
  4358. AND a.warehousecode = b.whcode
  4359. WHERE '{4}' < b.Quantity
  4360. AND b.invcode = '{3}'
  4361. AND GETDATE() > b.BeginTime
  4362. AND GETDATE() < b.EndTime;
  4363. IF EXISTS(SELECT * FROM ICSWareHouseLotInfo a
  4364. INNER JOIN ICSReserve b ON a.invcode=b.invcode
  4365. AND a.workpoint=b.workpoint
  4366. AND a.warehousecode=b.whcode
  4367. WHERE a.invcode='{3}'
  4368. AND a.workpoint='{1}'
  4369. AND SYSDATETIME() > b.BeginTime
  4370. AND SYSDATETIME() < b.EndTime
  4371. AND b.enable='1')
  4372. BEGIN
  4373. IF @ReservedQuantity IS NOT NULL
  4374. BEGIN
  4375. RAISERROR('''{3}'',''{4}'''' + @ReservedQuantity + ''!', 16, 1);
  4376. RETURN
  4377. END
  4378. END
  4379. UPDATE ICSWareHouseLotInfo
  4380. SET Quantity = ISNULL(Quantity, 0) - '{2}'
  4381. WHERE LotNo = '{0}'
  4382. AND WorkPoint = '{1}';
  4383. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a
  4384. WHERE a.LotNo = '{0}'
  4385. AND a.WorkPoint = '{1}'
  4386. AND Quantity - LockQuantity < 0)
  4387. BEGIN
  4388. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"', 16, 1);
  4389. RETURN
  4390. END
  4391. ";
  4392. sql = string.Format(sql, LotNo, WorkPoint, RoundedQuantity, INVCODE, SUMQTY);
  4393. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4394. {
  4395. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  4396. }
  4397. }
  4398. }
  4399. // else { throw new Exception("单据类型未配置!"); }
  4400. }
  4401. //if (isDis == false)
  4402. //{
  4403. // throw new Exception("单据类型未配置!");
  4404. //}
  4405. /////更新库存
  4406. //sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  4407. // IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity<0)
  4408. // BEGIN
  4409. // RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  4410. // RETURN
  4411. // END";
  4412. //sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  4413. //if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4414. //{
  4415. // throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  4416. //}
  4417. }
  4418. }
  4419. }
  4420. catch (Exception)
  4421. {
  4422. throw;
  4423. }
  4424. return lstDt;
  4425. }
  4426. /// <summary>
  4427. /// 减少库存(奥美专用)
  4428. /// </summary>
  4429. /// <param name="Identification"></param>
  4430. /// <param name="TransCode"></param>
  4431. /// <param name="TransSequence"></param>
  4432. /// <param name="LotNo"></param>
  4433. /// <param name="Quantity"></param>
  4434. /// <param name="User"></param>
  4435. /// <param name="WorkPoint"></param>
  4436. /// <param name="TransType"></param>
  4437. /// <param name="BusinessCode"></param>
  4438. /// <param name="cmd"></param>
  4439. public static DataTable AMWareHouseLotInfoDown(string Identification, string TransCode, string TransSequence, string LotNo, string Quantity, string User,
  4440. string WorkPoint, string TransType, string BusinessCode, SqlCommand cmd, Dictionary<string, string> language, string LogID, string TransID, string MergeID = "")
  4441. {
  4442. decimal LotQTYYY = 0;
  4443. decimal LotQTY = 0;
  4444. string LotEnable = "";
  4445. string chekEnable = "";
  4446. string DisPrintEnable = "";
  4447. string PrintEnable = "";
  4448. string sql = "";
  4449. string lotstr = "";
  4450. int result = 0;
  4451. List<string> NewBarCodeList = new List<string>();
  4452. DataTable dtLotno = new DataTable();
  4453. DataTable lstDt = new DataTable();
  4454. DataTable ZLtable = new DataTable();
  4455. try
  4456. {
  4457. string amount = "";
  4458. //string sqql = @"select a.Amount FROM ICSInventoryLot a
  4459. // WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  4460. //sqql = string.Format(sqql, LotNo, WorkPoint);
  4461. //DataTable dtaa = DBHelper.SQlReturnData(sqql, cmd);
  4462. //amount = dtaa.Rows[0]["Amount"].ToString();
  4463. string chekksql = @"select c.EATTRIBUTE1 FROM ICSMOPick a
  4464. INNER JOIN ICSMO b ON a.MODetailID=b.MODetailID AND a.WorkPoint=b.WorkPoint
  4465. INNER JOIN ICSInventory c on a.InvCode=c.InvCode and a.WorkPoint=c.WorkPoint
  4466. WHERE b.MOCode='{0}' AND b.Sequence+'~'+a.Sequence='{3}' AND a.WorkPoint='{1}' and c.AmountEnable='1'";
  4467. chekksql = string.Format(chekksql, TransCode, WorkPoint, Quantity, TransSequence);
  4468. DataTable dta = DBHelper.SQlReturnData(chekksql, cmd);
  4469. if (dta.Rows.Count > 0)
  4470. {
  4471. Quantity = (decimal.Parse(Quantity) * decimal.Parse(dta.Rows[0]["EATTRIBUTE1"].ToString())).ToString();
  4472. }
  4473. //检验是否分批
  4474. sql = @"SELECT b.LotEnable,b.PrintEnable FROM ICSInventoryLot a
  4475. LEFT JOIN ICSInventory b ON a.InvCode=b.InvCode AND a.WorkPoint=b.WorkPoint
  4476. where a.LotNo='{0}' and a.WorkPoint='{1}'
  4477. ";
  4478. sql = string.Format(sql, LotNo, WorkPoint);
  4479. DataTable dt = DBHelper.SQlReturnData(sql, cmd);
  4480. if (dt.Rows.Count == 0)
  4481. {
  4482. throw new Exception(language.GetNameByCode("WMSAPIInfo369"));
  4483. }
  4484. else
  4485. {
  4486. LotEnable = dt.Rows[0]["LotEnable"].ToString();
  4487. PrintEnable = dt.Rows[0]["PrintEnable"].ToString();
  4488. }
  4489. string cheksql = @"IF NOT EXISTS(select b.F_ItemCode as Code ,b.F_ItemName as Name,b.F_EnabledMark AS Enable ,b.F_IsDefault AS DisPrintEnable
  4490. from Sys_SRM_Items a
  4491. left join Sys_SRM_ItemsDetail b on a.F_Id=b.F_ItemId
  4492. where a.F_EnCode='TransBatch' and b.F_ItemCode='{0}' )
  4493. BEGIN
  4494. RAISERROR('" + language.GetNameByCode("WMSAPIInfo470") + @"',16,1);
  4495. RETURN
  4496. END
  4497. select b.F_ItemCode as Code ,b.F_ItemName as Name,b.F_EnabledMark AS Enable ,b.F_IsDefault AS DisPrintEnable
  4498. from Sys_SRM_Items a
  4499. left join Sys_SRM_ItemsDetail b on a.F_Id=b.F_ItemId
  4500. where a.F_EnCode='TransBatch' and b.F_ItemCode='{0}'
  4501. ";
  4502. cheksql = string.Format(cheksql, BusinessCode);
  4503. DataTable chekdt = DBHelper.SQlReturnData(cheksql, cmd);
  4504. if (chekdt.Rows.Count == 0)
  4505. {
  4506. throw new Exception(language.GetNameByCode("WMSAPIInfo369"));
  4507. }
  4508. else
  4509. {
  4510. chekEnable = chekdt.Rows[0]["Enable"].ToString();
  4511. DisPrintEnable = chekdt.Rows[0]["DisPrintEnable"].ToString();
  4512. }
  4513. sql = @"select Quantity from ICSWareHouseLotInfo
  4514. where LotNO='{0}' AND WorkPoint='{1}'";
  4515. sql = string.Format(sql, LotNo, WorkPoint);
  4516. DataTable dtt = DBHelper.SQlReturnData(sql, cmd);
  4517. LotQTYYY = Convert.ToDecimal(dtt.Rows[0]["Quantity"]);
  4518. LotQTY = Convert.ToDecimal(Quantity);
  4519. if (!LotEnable.Equals("False") && !chekEnable.Equals("False") && LotQTYYY - LotQTY > 0)
  4520. {
  4521. ZLtable = ICSControlModeService.GetZL();
  4522. if (ZLtable == null)
  4523. {
  4524. throw new Exception(language.GetNameByCode("WMSAPIInfo471"));
  4525. }
  4526. for (int i = 0; i < ZLtable.Rows.Count; i++)
  4527. {
  4528. string zlName = ZLtable.Rows[i]["Name"].ToString();
  4529. string zlTransCode = ZLtable.Rows[i]["BusinessCode"].ToString();
  4530. string Enable = ZLtable.Rows[i]["Enable"].ToString();
  4531. if (zlTransCode.Equals(BusinessCode))
  4532. {
  4533. if (Enable.Equals("True"))
  4534. {
  4535. ///更新日志
  4536. sql = @"
  4537. IF NOT EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfoLog a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' and transtype='15')
  4538. BEGIN
  4539. RAISERROR('" + language.GetNameByCode("WMSAPIInfo472") + @"',16,1);
  4540. RETURN
  4541. END
  4542. UPDATE ICSWareHouseLotInfoLog SET EATTRIBUTE2='1' WHERE LotNo='{0}' AND WorkPoint='{1}' and transtype='15'
  4543. ";
  4544. sql = string.Format(sql, LotNo, WorkPoint, LogID);
  4545. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4546. {
  4547. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"占料标识更新失败!");
  4548. }
  4549. ///更新库存
  4550. sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}',LockQuantity=ISNULL(LockQuantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  4551. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity-LockQuantity<0)
  4552. BEGIN
  4553. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  4554. RETURN
  4555. END";
  4556. sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  4557. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4558. {
  4559. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  4560. }
  4561. }
  4562. else
  4563. {
  4564. ///更新库存
  4565. sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-ISNULL(LockQuantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  4566. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity-LockQuantity<0)
  4567. BEGIN
  4568. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  4569. RETURN
  4570. END";
  4571. sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  4572. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4573. {
  4574. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  4575. }
  4576. }
  4577. }
  4578. }
  4579. ///分批前添加日志
  4580. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  4581. BEGIN
  4582. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  4583. RETURN
  4584. END
  4585. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  4586. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  4587. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  4588. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  4589. MTIME,WorkPoint,EATTRIBUTE1)
  4590. SELECT NEWID(),'{3}','{7}','{8}',a.LotNo ,a.InvCode ,
  4591. c.WarehouseCode,c.LocationCode,'','',c.Quantity+{6},
  4592. '','0','{4}','31','0','',
  4593. '','','',f.F_Account ,f.F_RealName ,
  4594. SYSDATETIME() ,a.WorkPoint ,''
  4595. FROM ICSInventoryLot a
  4596. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  4597. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  4598. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  4599. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  4600. ";
  4601. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransType, BusinessCode, Quantity, TransCode, TransSequence);
  4602. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4603. {
  4604. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  4605. }
  4606. #region 获取分批后的条码(lotstr)
  4607. sql = @"SELECT TOP 1 LotNO FROM ICSInventoryLot WHERE EATTRIBUTE1='{0}' AND WorkPoint='{1}'
  4608. ORDER BY CAST(SUBSTRING(LotNO, (LEN(LotNO)-CHARINDEX('-',REVERSE(LotNO))+1)+1,CHARINDEX('-',REVERSE(LotNO))-1) AS INT) DESC";
  4609. sql = string.Format(sql, LotNo, WorkPoint);
  4610. dt = DBHelper.SQlReturnData(sql, cmd);
  4611. if (dt.Rows.Count == 0)
  4612. {
  4613. lotstr = LotNo + "-" + 1;
  4614. }
  4615. else
  4616. {
  4617. lotstr = LotNo + "-" + (Convert.ToInt32(dt.Rows[0]["LotNO"].ToString().Split('-')[dt.Rows[0]["LotNO"].ToString().Split('-').Length - 1]) + 1).ToString();
  4618. }
  4619. NewBarCodeList.Add(lotstr);//将分批后新条码添加到新集合
  4620. #endregion
  4621. #region 将分批后的条码记录插入条码表,库存表及日志表并将原条码库存数量清零
  4622. sql = @"INSERT INTO ICSInventoryLot(ID,LotNo,InvCode,ProductDate,ExpirationDate,
  4623. Quantity,Amount,ExtensionID,Type,PrintTimes,
  4624. LastPrintUser,LastPrintTime,MUSER,MUSERName,MTIME,
  4625. WorkPoint,EATTRIBUTE1)
  4626. SELECT TOP 1 NEWID(),'{0}',a.InvCode,a.ProductDate,a.ExpirationDate,
  4627. '{2}',a.Amount/a.Quantity*Quantity,a.ExtensionID,a.Type,a.PrintTimes,
  4628. a.LastPrintUser,a.LastPrintTime,a.MUSER ,a.MUSERName ,GETDATE(),
  4629. a.WorkPoint ,'{1}'
  4630. From ICSInventoryLot a
  4631. where a.LotNo='{1}' and a.WorkPoint='{3}'";
  4632. sql = string.Format(sql, lotstr, LotNo, Quantity, WorkPoint);
  4633. cmd.CommandText = sql;
  4634. result = cmd.ExecuteNonQuery();
  4635. if (result <= 0)
  4636. {
  4637. throw new Exception(language.GetNameByCode("WMSAPIInfo195"));//条码分批后条码表存入失败!
  4638. }
  4639. sql = @"INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  4640. select NEWID(),'{0}',WarehouseCode,LocationCode,InvCode,'0',InDate,LockQuantity
  4641. ,MUSER,MUSERName,GETDATE(),'{3}',''
  4642. from ICSWareHouseLotInfo
  4643. where LotNO='{1}' AND WorkPoint='{3}'";
  4644. sql = string.Format(sql, lotstr, LotNo, Quantity, WorkPoint);
  4645. cmd.CommandText = sql;
  4646. result = cmd.ExecuteNonQuery();
  4647. if (result <= 0)
  4648. {
  4649. throw new Exception(language.GetNameByCode("WMSAPIInfo196"));//条码分批后库存表存入失败!
  4650. }
  4651. //插入条码单据表
  4652. sql = @"INSERT INTO ICSInventoryLotDetail(LotNo,TransCode,TransSequence,MUSER,MUSERName,MTIME,WorkPoint)
  4653. SELECT '{3}',b.TransCode,b.TransSequence,f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint
  4654. FROM ICSInventoryLot a
  4655. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  4656. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  4657. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  4658. sql = string.Format(sql, LotNo, WorkPoint, User, lotstr);
  4659. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4660. {
  4661. throw new Exception(language.GetNameByCode("WMSAPIInfo174"));//"条码单据表写入失败!");
  4662. }
  4663. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  4664. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  4665. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  4666. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  4667. MTIME,WorkPoint,EATTRIBUTE1,LogID)
  4668. SELECT NEWID(),'{3}','{4}','{5}','{10}' ,a.InvCode ,
  4669. c.WarehouseCode,c.LocationCode,'','','{6}',
  4670. '','0','{7}','{8}','0','',
  4671. '','','',f.F_Account ,f.F_RealName ,
  4672. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  4673. FROM ICSInventoryLot a
  4674. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  4675. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  4676. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  4677. ";
  4678. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID, lotstr);
  4679. cmd.CommandText = sql;
  4680. result = cmd.ExecuteNonQuery();
  4681. if (result <= 0)
  4682. {
  4683. throw new Exception(language.GetNameByCode("WMSAPIInfo197"));//条码分批后库存日志表存入失败!
  4684. }
  4685. if (PrintEnable.Equals("True") && DisPrintEnable.Equals("True"))
  4686. {
  4687. sql = @"select A.LotNO AS OLDLotNo , C.Quantity AS OLDLotQty, A.eattribute1 as LotNo, B.Quantity AS LotQty ,b.InvCode,d.InvStd,d.InvName,b.MTime,A.TransCode
  4688. from ICSWareHouseLotInfolog A
  4689. left join ICSInventoryLot B on A.LotNO=B.LotNO and a.WorkPoint=b.WorkPoint
  4690. left join ICSWareHouseLotInfo C ON A.LotNO=C.LotNO and a.WorkPoint=c.WorkPoint
  4691. left join ICSInventory D on b.INVCODE=d.INVCODE and b.WorkPoint=d.WorkPoint
  4692. where A.lotno ='{0}' and a.workpoint='{1}' and a.BusinessCode='{2}'
  4693. ";
  4694. sql = string.Format(sql, lotstr, WorkPoint, BusinessCode);
  4695. dtLotno = DBHelper.SQlReturnData(sql, cmd);
  4696. lstDt = dtLotno;
  4697. }
  4698. ///添加日志
  4699. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  4700. BEGIN
  4701. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  4702. RETURN
  4703. END
  4704. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  4705. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  4706. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  4707. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  4708. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  4709. SELECT NEWID(),'{3}','{4}','{5}',a.LotNo ,a.InvCode ,
  4710. c.WarehouseCode,c.LocationCode,'','',c.Quantity,
  4711. '','0','{7}','32','0','',
  4712. '','','',f.F_Account ,f.F_RealName ,
  4713. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  4714. FROM ICSInventoryLot a
  4715. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  4716. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  4717. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  4718. ";
  4719. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID);
  4720. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4721. {
  4722. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  4723. }
  4724. #endregion
  4725. }
  4726. else
  4727. {
  4728. NewBarCodeList.Add(LotNo);
  4729. ///添加日志
  4730. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  4731. BEGIN
  4732. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  4733. RETURN
  4734. END
  4735. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  4736. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  4737. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  4738. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  4739. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  4740. SELECT NEWID(),'{3}','{4}','{5}',a.LotNo ,a.InvCode ,
  4741. c.WarehouseCode,c.LocationCode,'','','{6}',
  4742. '','0','{7}','{8}','0','',
  4743. '','','',f.F_Account ,f.F_RealName ,
  4744. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  4745. FROM ICSInventoryLot a
  4746. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  4747. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  4748. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  4749. ";
  4750. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID);
  4751. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4752. {
  4753. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  4754. }
  4755. ZLtable = ICSControlModeService.GetZL();
  4756. if (ZLtable == null)
  4757. {
  4758. throw new Exception(language.GetNameByCode("WMSAPIInfo471"));
  4759. }
  4760. for (int i = 0; i < ZLtable.Rows.Count; i++)
  4761. {
  4762. string zlTransCode = ZLtable.Rows[i]["BusinessCode"].ToString();
  4763. string Enable = ZLtable.Rows[i]["Enable"].ToString();
  4764. if (zlTransCode.Equals(BusinessCode))
  4765. {
  4766. if (Enable.Equals("True"))
  4767. {
  4768. ///更新日志
  4769. sql = @"
  4770. IF NOT EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfoLog a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' and transtype='15')
  4771. BEGIN
  4772. RAISERROR('" + language.GetNameByCode("WMSAPIInfo472") + @"',16,1);
  4773. RETURN
  4774. END
  4775. UPDATE ICSWareHouseLotInfoLog SET EATTRIBUTE2='1' WHERE LotNo='{0}' AND WorkPoint='{1}' and transtype='15'
  4776. ";
  4777. sql = string.Format(sql, LotNo, WorkPoint, LogID);
  4778. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4779. {
  4780. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"占料标识更新失败!");
  4781. }
  4782. ///更新库存
  4783. sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}',LockQuantity=ISNULL(LockQuantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  4784. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity-LockQuantity<0)
  4785. BEGIN
  4786. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  4787. RETURN
  4788. END";
  4789. sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  4790. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4791. {
  4792. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  4793. }
  4794. }
  4795. else
  4796. {
  4797. ///更新库存
  4798. sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  4799. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity-LockQuantity<0)
  4800. BEGIN
  4801. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  4802. RETURN
  4803. END";
  4804. sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  4805. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4806. {
  4807. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  4808. }
  4809. }
  4810. }
  4811. }
  4812. /////更新库存
  4813. //sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  4814. // IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity<0)
  4815. // BEGIN
  4816. // RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  4817. // RETURN
  4818. // END";
  4819. //sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  4820. //if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4821. //{
  4822. // throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  4823. //}
  4824. }
  4825. }
  4826. catch (Exception)
  4827. {
  4828. throw;
  4829. }
  4830. return lstDt;
  4831. }
  4832. /// <summary>
  4833. /// 无源头调拨
  4834. /// </summary>
  4835. /// <param name="LocationCode"></param>
  4836. /// <param name="LotNo"></param>
  4837. /// <param name="Quantity"></param>
  4838. /// <param name="User"></param>
  4839. /// <param name="WorkPoint"></param>
  4840. /// <param name="TransType"></param>
  4841. /// <param name="BusinessCode"></param>
  4842. /// <param name="cmd"></param>
  4843. public static DataTable WareHouseLotInfoNoTransfer(string Identification, string WarehouseCode, string LocationCode,
  4844. string LotNo, string Quantity, string User, string WorkPoint, string TransType, string BusinessCode, SqlCommand cmd, Dictionary<string, string> language, string MergeID, string Memo)
  4845. {
  4846. decimal LotQTYYY = 0;
  4847. decimal LotQTY = 0;
  4848. String LotEnable = "";
  4849. String PrintEnable = "";
  4850. String ToWareHouseCode = "";
  4851. String ToLocationCode = "";
  4852. string lotstr = "";
  4853. int result = 0;
  4854. DataTable dtLotno = new DataTable();
  4855. DataTable lstDt = new DataTable();
  4856. List<string> NewBarCodeList = new List<string>();
  4857. string sql = "";
  4858. try
  4859. {
  4860. //检验是否分批
  4861. sql = @"SELECT b.LotEnable,b.PrintEnable FROM ICSInventoryLot a
  4862. LEFT JOIN ICSInventory b ON a.InvCode=b.InvCode AND a.WorkPoint=b.WorkPoint
  4863. where a.LotNo='{0}' and a.WorkPoint='{1}'
  4864. ";
  4865. sql = string.Format(sql, LotNo, WorkPoint);
  4866. DataTable dt = DBHelper.SQlReturnData(sql, cmd);
  4867. if (dt.Rows.Count == 0)
  4868. {
  4869. throw new Exception(language.GetNameByCode("WMSAPIInfo369"));
  4870. }
  4871. else
  4872. {
  4873. LotEnable = dt.Rows[0]["LotEnable"].ToString();
  4874. PrintEnable = dt.Rows[0]["PrintEnable"].ToString();
  4875. }
  4876. sql = @"select Quantity from ICSWareHouseLotInfo
  4877. where LotNO='{0}' AND WorkPoint='{1}'";
  4878. sql = string.Format(sql, LotNo, WorkPoint);
  4879. DataTable dtt = DBHelper.SQlReturnData(sql, cmd);
  4880. LotQTYYY = Convert.ToDecimal(dtt.Rows[0]["Quantity"]);
  4881. LotQTY = Convert.ToDecimal(Quantity);
  4882. if (!LotEnable.Equals("False") && LotQTYYY - LotQTY > 0)
  4883. {
  4884. ///更新库存
  4885. sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  4886. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity<0)
  4887. BEGIN
  4888. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  4889. RETURN
  4890. END";
  4891. sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  4892. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4893. {
  4894. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  4895. }
  4896. ///分批前添加日志
  4897. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  4898. BEGIN
  4899. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  4900. RETURN
  4901. END
  4902. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  4903. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  4904. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  4905. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  4906. MTIME,WorkPoint,EATTRIBUTE1)
  4907. SELECT NEWID(),'{3}','','',a.LotNo ,a.InvCode ,
  4908. c.WarehouseCode,c.LocationCode,'','',c.Quantity+{6},
  4909. '','0','{4}','31','0','',
  4910. '','','',f.F_Account ,f.F_RealName ,
  4911. SYSDATETIME() ,a.WorkPoint ,''
  4912. FROM ICSInventoryLot a
  4913. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  4914. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  4915. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  4916. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  4917. ";
  4918. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransType, BusinessCode, Quantity);
  4919. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4920. {
  4921. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  4922. }
  4923. #region 获取分批后的条码(lotstr)
  4924. sql = @"SELECT TOP 1 LotNO FROM ICSInventoryLot WHERE EATTRIBUTE1='{0}' AND WorkPoint='{1}'
  4925. ORDER BY CAST(SUBSTRING(LotNO, (LEN(LotNO)-CHARINDEX('-',REVERSE(LotNO))+1)+1,CHARINDEX('-',REVERSE(LotNO))-1) AS INT) DESC";
  4926. sql = string.Format(sql, LotNo, WorkPoint);
  4927. dt = DBHelper.SQlReturnData(sql, cmd);
  4928. if (dt.Rows.Count == 0)
  4929. {
  4930. lotstr = LotNo + "-" + 1;
  4931. }
  4932. else
  4933. {
  4934. lotstr = LotNo + "-" + (Convert.ToInt32(dt.Rows[0]["LotNO"].ToString().Split('-')[dt.Rows[0]["LotNO"].ToString().Split('-').Length - 1]) + 1).ToString();
  4935. }
  4936. NewBarCodeList.Add(lotstr);//将分批后新条码添加到新集合
  4937. #endregion
  4938. #region 将分批后的条码记录插入条码表,库存表及日志表并将原条码库存数量清零
  4939. sql = @"INSERT INTO ICSInventoryLot(ID,LotNo,InvCode,ProductDate,ExpirationDate,
  4940. Quantity,Amount,ExtensionID,Type,PrintTimes,
  4941. LastPrintUser,LastPrintTime,MUSER,MUSERName,MTIME,
  4942. WorkPoint,EATTRIBUTE1,EATTRIBUTE2,EATTRIBUTE3,EATTRIBUTE4,EATTRIBUTE5,EATTRIBUTE6,EATTRIBUTE7,EATTRIBUTE8,
  4943. EATTRIBUTE9,EATTRIBUTE10,EATTRIBUTE11,EATTRIBUTE12,EATTRIBUTE13,EATTRIBUTE14,EATTRIBUTE15,EATTRIBUTE16,EATTRIBUTE17,EATTRIBUTE18,EATTRIBUTE19,EATTRIBUTE20,
  4944. EATTRIBUTE21,EATTRIBUTE22,EATTRIBUTE23,EATTRIBUTE24,EATTRIBUTE25,EATTRIBUTE26,EATTRIBUTE27,EATTRIBUTE28,EATTRIBUTE29,EATTRIBUTE30)
  4945. SELECT TOP 1 NEWID(),'{0}',a.InvCode,a.ProductDate,a.ExpirationDate,
  4946. '{2}',a.Amount,a.ExtensionID,a.Type,a.PrintTimes,
  4947. a.LastPrintUser,a.LastPrintTime,a.MUSER ,a.MUSERName ,GETDATE(),
  4948. a.WorkPoint ,'{1}',a.EATTRIBUTE2,a.EATTRIBUTE3,a.EATTRIBUTE4,a.EATTRIBUTE5,a.EATTRIBUTE6,a.EATTRIBUTE7,a.EATTRIBUTE8,
  4949. a.EATTRIBUTE9,a.EATTRIBUTE10,a.EATTRIBUTE11,a.EATTRIBUTE12,a.EATTRIBUTE13,a.EATTRIBUTE14,a.EATTRIBUTE15,a.EATTRIBUTE16,a.EATTRIBUTE17,a.EATTRIBUTE18,a.EATTRIBUTE19,a.EATTRIBUTE20,
  4950. a.EATTRIBUTE21,a.EATTRIBUTE22,a.EATTRIBUTE23,a.EATTRIBUTE24,a.EATTRIBUTE25,a.EATTRIBUTE26,a.EATTRIBUTE27,a.EATTRIBUTE28,a.EATTRIBUTE29,a.EATTRIBUTE30
  4951. From ICSInventoryLot a
  4952. where a.LotNo='{1}' and a.WorkPoint='{3}'";
  4953. sql = string.Format(sql, lotstr, LotNo, Quantity, WorkPoint);
  4954. cmd.CommandText = sql;
  4955. result = cmd.ExecuteNonQuery();
  4956. if (result <= 0)
  4957. {
  4958. throw new Exception(language.GetNameByCode("WMSAPIInfo195"));//条码分批后条码表存入失败!
  4959. }
  4960. #endregion
  4961. sql = @"INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  4962. select NEWID(),'{0}','{4}','{5}',InvCode,'{2}',InDate,LockQuantity
  4963. ,MUSER,MUSERName,GETDATE(),'{3}',''
  4964. from ICSWareHouseLotInfo
  4965. where LotNO='{1}' AND WorkPoint='{3}'";
  4966. sql = string.Format(sql, lotstr, LotNo, Quantity, WorkPoint, WarehouseCode, LocationCode);
  4967. cmd.CommandText = sql;
  4968. result = cmd.ExecuteNonQuery();
  4969. if (result <= 0)
  4970. {
  4971. throw new Exception(language.GetNameByCode("WMSAPIInfo196"));//条码分批后库存表存入失败!
  4972. }
  4973. //插入条码单据表
  4974. sql = @"INSERT INTO ICSInventoryLotDetail(LotNo,TransCode,TransSequence,MUSER,MUSERName,MTIME,WorkPoint)
  4975. SELECT '{3}',b.TransCode,b.TransSequence,f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint
  4976. FROM ICSInventoryLot a
  4977. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  4978. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  4979. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  4980. sql = string.Format(sql, LotNo, WorkPoint, User, lotstr);
  4981. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4982. {
  4983. throw new Exception(language.GetNameByCode("WMSAPIInfo174"));//"条码单据表写入失败!");
  4984. }
  4985. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  4986. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  4987. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  4988. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  4989. MTIME,WorkPoint,EATTRIBUTE1,LogID)
  4990. SELECT NEWID(),'{3}','','','{8}' ,a.InvCode ,
  4991. c.WarehouseCode,c.LocationCode,'{9}','{10}','{4}',
  4992. '{11}','0','{5}','{6}','0','',
  4993. '','','',f.F_Account ,f.F_RealName ,
  4994. SYSDATETIME() ,a.WorkPoint ,'','{7}'
  4995. FROM ICSInventoryLot a
  4996. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  4997. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  4998. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  4999. ";
  5000. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, Quantity, TransType, BusinessCode, MergeID, lotstr, WarehouseCode, LocationCode,Memo);
  5001. cmd.CommandText = sql;
  5002. result = cmd.ExecuteNonQuery();
  5003. if (result <= 0)
  5004. {
  5005. throw new Exception(language.GetNameByCode("WMSAPIInfo197"));//条码分批后库存日志表存入失败!
  5006. }
  5007. ///添加日志
  5008. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  5009. BEGIN
  5010. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  5011. RETURN
  5012. END
  5013. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  5014. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  5015. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  5016. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  5017. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  5018. SELECT NEWID(),'{3}','','',a.LotNo ,a.InvCode ,
  5019. c.WarehouseCode,c.LocationCode,'','',c.Quantity,
  5020. '','0','{5}','32','0','',
  5021. '','','',f.F_Account ,f.F_RealName ,
  5022. SYSDATETIME() ,a.WorkPoint ,'','{7}'
  5023. FROM ICSInventoryLot a
  5024. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  5025. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  5026. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  5027. ";
  5028. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, Quantity, TransType, BusinessCode, MergeID);
  5029. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5030. {
  5031. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  5032. }
  5033. if (PrintEnable.Equals("True"))
  5034. {
  5035. 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
  5036. from ICSWareHouseLotInfolog A
  5037. left join ICSInventoryLot B on A.LotNO=B.LotNO and a.WorkPoint=b.WorkPoint
  5038. left join ICSWareHouseLotInfo C ON A.LotNO=C.LotNO and a.WorkPoint=c.WorkPoint
  5039. left join ICSInventory D on b.INVCODE=d.INVCODE and b.WorkPoint=d.WorkPoint
  5040. where a.BusinessCode ='105'
  5041. and A.lotno like'{0}%' and a.workpoint='{1}'
  5042. ";
  5043. sql = string.Format(sql, LotNo, WorkPoint);
  5044. dtLotno = DBHelper.SQlReturnData(sql, cmd);
  5045. lstDt = dtLotno;
  5046. }
  5047. }
  5048. else
  5049. {
  5050. ///添加日志
  5051. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  5052. BEGIN
  5053. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  5054. RETURN
  5055. END
  5056. IF EXISTS(SELECT id FROM ICSWareHouseLotInfo WHERE WarehouseCode='{7}' AND LocationCode='{8}' AND WorkPoint='{1}' AND LotNo = '{0}')
  5057. BEGIN
  5058. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo355")) + @"',16,1);
  5059. RETURN
  5060. END
  5061. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  5062. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  5063. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  5064. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  5065. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  5066. SELECT NEWID(),'{3}','','',a.LotNo ,a.InvCode ,
  5067. c.WarehouseCode,c.LocationCode,'{7}','{8}',{4},
  5068. '{10}','0','{5}','{6}','0','',
  5069. '','','',f.F_Account ,f.F_RealName ,
  5070. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  5071. FROM ICSInventoryLot a
  5072. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  5073. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  5074. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  5075. ";
  5076. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, Quantity, TransType, BusinessCode, WarehouseCode, LocationCode, MergeID,Memo);
  5077. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5078. {
  5079. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  5080. }
  5081. ///更新库存
  5082. sql = @"UPDATE ICSWareHouseLotInfo SET WareHouseCode='{2}',LocationCode='{3}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  5083. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity<0)
  5084. BEGIN
  5085. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  5086. RETURN
  5087. END";
  5088. sql = string.Format(sql, LotNo, WorkPoint, WarehouseCode, LocationCode);
  5089. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5090. {
  5091. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  5092. }
  5093. }
  5094. }
  5095. catch (Exception)
  5096. {
  5097. log.Error(sql);
  5098. throw;
  5099. }
  5100. return lstDt;
  5101. }
  5102. /// <summary>
  5103. /// 修改库存
  5104. /// </summary>
  5105. /// <param name="Identification"></param>
  5106. /// <param name="TransCode"></param>
  5107. /// <param name="TransSequence"></param>
  5108. /// <param name="LotNo"></param>
  5109. /// <param name="Quantity"></param>
  5110. /// <param name="User"></param>
  5111. /// <param name="WorkPoint"></param>
  5112. /// <param name="TransType"></param>
  5113. /// <param name="cmd"></param>
  5114. public static void WareHouseLotInfoUpdate(string Identification, string TransCode, string TransSequence, string LotNo, string Quantity, string User,
  5115. string WorkPoint, string TransType,string CheckKind, SqlCommand cmd, Dictionary<string, string> language)
  5116. {
  5117. try
  5118. {
  5119. ///添加日志
  5120. string sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  5121. BEGIN
  5122. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  5123. RETURN
  5124. END
  5125. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  5126. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  5127. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  5128. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  5129. MTIME,WorkPoint,EATTRIBUTE1)
  5130. SELECT NEWID(),'{3}','{4}','{5}',a.LotNo ,a.InvCode ,
  5131. a.WarehouseCode,a.LocationCode,'','',a.Quantity,
  5132. '{8}','0','{6}','{7}','0','',
  5133. '','','',f.F_Account ,f.F_RealName ,
  5134. SYSDATETIME() ,a.WorkPoint ,''
  5135. FROM ICSWareHouseLotInfo a
  5136. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  5137. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  5138. ";
  5139. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, TransType, TransTypeEnum.LOTCheckBefore.GetDescription<DBValue>(), CheckKind);
  5140. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5141. {
  5142. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  5143. }
  5144. ///更新库存
  5145. sql = @"UPDATE ICSWareHouseLotInfo SET Quantity='{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'";
  5146. sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  5147. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5148. {
  5149. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  5150. }
  5151. ///添加日志
  5152. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  5153. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  5154. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  5155. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  5156. MTIME,WorkPoint,EATTRIBUTE1)
  5157. SELECT NEWID(),'{3}','{4}','{5}',a.LotNo ,a.InvCode ,
  5158. a.WarehouseCode,a.LocationCode,'','',a.Quantity,
  5159. '{8}','0','{6}','{7}','0','',
  5160. '','','',f.F_Account ,f.F_RealName ,
  5161. SYSDATETIME() ,a.WorkPoint ,''
  5162. FROM ICSWareHouseLotInfo a
  5163. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  5164. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  5165. ";
  5166. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, TransType, TransTypeEnum.LOTCheckAfter.GetDescription<DBValue>(), CheckKind);
  5167. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5168. {
  5169. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  5170. }
  5171. }
  5172. catch (Exception)
  5173. {
  5174. throw;
  5175. }
  5176. }
  5177. /// <summary>
  5178. /// 调拨
  5179. /// </summary>
  5180. /// <param name="LocationCode"></param>
  5181. /// <param name="LotNo"></param>
  5182. /// <param name="Quantity"></param>
  5183. /// <param name="User"></param>
  5184. /// <param name="WorkPoint"></param>
  5185. /// <param name="TransType"></param>
  5186. /// <param name="BusinessCode"></param>
  5187. /// <param name="cmd"></param>
  5188. public static DataTable WareHouseLotInfoTransfer(string Identification, string TransCode, string TransSequence, string WarehouseCode, string LocationCode,
  5189. string LotNo, string Quantity, string User, string WorkPoint,string InWorkPoint, string TransType, string BusinessCode, SqlCommand cmd, Dictionary<string, string> language, string MergeID)
  5190. {
  5191. decimal LotQTYYY = 0;
  5192. decimal LotQTY = 0;
  5193. String LotEnable = "";
  5194. String PrintEnable = "";
  5195. String chekEnable = "";
  5196. String DisPrintEnable = "";
  5197. string lotstr = "";
  5198. int result = 0;
  5199. DataTable dtLotno = new DataTable();
  5200. DataTable lstDt = new DataTable();
  5201. List<string> NewBarCodeList = new List<string>();
  5202. string Colspan = "";
  5203. string ProjectCode = "";
  5204. string BatchCode = "";
  5205. string Version = "";
  5206. string Brand = "";
  5207. string cFree1 = "";
  5208. string cFree2 = "";
  5209. string cFree3 = "";
  5210. string cFree4 = "";
  5211. string cFree5 = "";
  5212. string cFree6 = "";
  5213. string cFree7 = "";
  5214. string cFree8 = "";
  5215. string cFree9 = "";
  5216. string cFree10 = "";
  5217. string IDD = "";
  5218. try
  5219. {
  5220. //派纳不查站点
  5221. if (DBHelper.IsPNU9())
  5222. {
  5223. 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
  5224. from Sys_SRM_Items a
  5225. left join Sys_SRM_ItemsDetail b on a.F_Id=b.F_ItemId
  5226. where a.F_EnCode='TransBatch' and b.F_ItemCode='{0}' )
  5227. BEGIN
  5228. RAISERROR('" + language.GetNameByCode("WMSAPIInfo470") + @"',16,1);
  5229. RETURN
  5230. END
  5231. select b.F_ItemCode as Code ,b.F_ItemName as Name,b.F_EnabledMark AS Enable ,b.F_IsDefault AS DisPrintEnable
  5232. from Sys_SRM_Items a
  5233. left join Sys_SRM_ItemsDetail b on a.F_Id=b.F_ItemId
  5234. where a.F_EnCode='TransBatch' and b.F_ItemCode='{0}'
  5235. ";
  5236. cheksql = string.Format(cheksql, BusinessCode);
  5237. DataTable chekdt = DBHelper.SQlReturnData(cheksql, cmd);
  5238. if (chekdt.Rows.Count == 0)
  5239. {
  5240. throw new Exception(language.GetNameByCode("WMSAPIInfo369"));
  5241. }
  5242. else
  5243. {
  5244. chekEnable = chekdt.Rows[0]["Enable"].ToString();
  5245. DisPrintEnable = chekdt.Rows[0]["DisPrintEnable"].ToString();
  5246. }
  5247. //检验是否分批
  5248. string sql = @"SELECT b.LotEnable,b.PrintEnable FROM ICSInventoryLot a
  5249. LEFT JOIN ICSInventory b ON a.InvCode=b.InvCode --AND a.WorkPoint=b.WorkPoint
  5250. where a.LotNo='{0}'
  5251. ";
  5252. sql = string.Format(sql, LotNo, WorkPoint);
  5253. DataTable dt = DBHelper.SQlReturnData(sql, cmd);
  5254. if (dt.Rows.Count == 0)
  5255. {
  5256. throw new Exception(language.GetNameByCode("WMSAPIInfo369"));
  5257. }
  5258. else
  5259. {
  5260. LotEnable = dt.Rows[0]["LotEnable"].ToString();
  5261. PrintEnable = dt.Rows[0]["PrintEnable"].ToString();
  5262. }
  5263. sql = @"select Quantity from ICSWareHouseLotInfo
  5264. where LotNO='{0}' ";
  5265. sql = string.Format(sql, LotNo, WorkPoint);
  5266. DataTable dtt = DBHelper.SQlReturnData(sql, cmd);
  5267. LotQTYYY = Convert.ToDecimal(dtt.Rows[0]["Quantity"]);
  5268. LotQTY = Convert.ToDecimal(Quantity);
  5269. if (LotEnable.Equals("True") && chekEnable.Equals("True") && LotQTYYY - LotQTY > 0)//增加数量判断
  5270. {
  5271. ///更新库存
  5272. sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}' , WorkPoint='{3}' WHERE LotNo='{0}'
  5273. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND Quantity<0)
  5274. BEGIN
  5275. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  5276. RETURN
  5277. END";
  5278. sql = string.Format(sql, LotNo, WorkPoint, Quantity,InWorkPoint);
  5279. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5280. {
  5281. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  5282. }
  5283. ///分批前添加日志
  5284. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  5285. BEGIN
  5286. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  5287. RETURN
  5288. END
  5289. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  5290. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  5291. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  5292. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  5293. MTIME,WorkPoint,EATTRIBUTE1)
  5294. SELECT NEWID(),'{3}','{7}','{8}',a.LotNo ,a.InvCode ,
  5295. c.WarehouseCode,c.LocationCode,'','',c.Quantity+{6},
  5296. '','0','{4}','31','0','',
  5297. '','','',f.F_Account ,f.F_RealName ,
  5298. SYSDATETIME() ,'{1}' ,''
  5299. FROM ICSInventoryLot a
  5300. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo --AND a.WorkPoint=b.WorkPoint
  5301. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo --AND a.WorkPoint=c.WorkPoint
  5302. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  5303. WHERE a.LotNo='{0}'
  5304. ";
  5305. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransType, BusinessCode, Quantity, TransCode, TransSequence);
  5306. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5307. {
  5308. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  5309. }
  5310. #region 获取分批后的条码(lotstr)
  5311. sql = @"SELECT TOP 1 LotNO FROM ICSInventoryLot WHERE EATTRIBUTE1='{0}'
  5312. ORDER BY CAST(SUBSTRING(LotNO, (LEN(LotNO)-CHARINDEX('-',REVERSE(LotNO))+1)+1,CHARINDEX('-',REVERSE(LotNO))-1) AS INT) DESC";
  5313. sql = string.Format(sql, LotNo, WorkPoint);
  5314. dt = DBHelper.SQlReturnData(sql, cmd);
  5315. if (dt.Rows.Count == 0)
  5316. {
  5317. lotstr = LotNo + "-" + 1;
  5318. }
  5319. else
  5320. {
  5321. lotstr = LotNo + "-" + (Convert.ToInt32(dt.Rows[0]["LotNO"].ToString().Split('-')[dt.Rows[0]["LotNO"].ToString().Split('-').Length - 1]) + 1).ToString();
  5322. }
  5323. NewBarCodeList.Add(lotstr);//将分批后新条码添加到新集合
  5324. #endregion
  5325. #region 将分批后的条码记录插入条码表,库存表及日志表并将原条码库存数量清零
  5326. sql = @"INSERT INTO ICSInventoryLot(ID,LotNo,InvCode,ProductDate,ExpirationDate,
  5327. Quantity,Amount,ExtensionID,Type,PrintTimes,
  5328. LastPrintUser,LastPrintTime,MUSER,MUSERName,MTIME,
  5329. WorkPoint,EATTRIBUTE1)
  5330. SELECT TOP 1 NEWID(),'{0}',a.InvCode,a.ProductDate,a.ExpirationDate,
  5331. '{2}',a.Amount,a.ExtensionID,a.Type,a.PrintTimes,
  5332. a.LastPrintUser,a.LastPrintTime,a.MUSER ,a.MUSERName ,GETDATE(),
  5333. '{3}' ,'{1}'
  5334. From ICSInventoryLot a
  5335. where a.LotNo='{1}' ";
  5336. sql = string.Format(sql, lotstr, LotNo, Quantity, WorkPoint);
  5337. cmd.CommandText = sql;
  5338. result = cmd.ExecuteNonQuery();
  5339. if (result <= 0)
  5340. {
  5341. throw new Exception(language.GetNameByCode("WMSAPIInfo195"));//条码分批后条码表存入失败!
  5342. }
  5343. #endregion
  5344. sql = @"INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  5345. select NEWID(),'{0}','{4}','{5}',InvCode,'{2}',InDate,LockQuantity
  5346. ,MUSER,MUSERName,GETDATE(),'{3}',''
  5347. from ICSWareHouseLotInfo
  5348. where LotNO='{1}' ";
  5349. sql = string.Format(sql, lotstr, LotNo, Quantity, WorkPoint, WarehouseCode, LocationCode);
  5350. cmd.CommandText = sql;
  5351. result = cmd.ExecuteNonQuery();
  5352. if (result <= 0)
  5353. {
  5354. throw new Exception(language.GetNameByCode("WMSAPIInfo196"));//条码分批后库存表存入失败!
  5355. }
  5356. //插入条码单据表
  5357. sql = @"INSERT INTO ICSInventoryLotDetail(LotNo,TransCode,TransSequence,MUSER,MUSERName,MTIME,WorkPoint)
  5358. SELECT '{3}',b.TransCode,b.TransSequence,f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint
  5359. FROM ICSInventoryLot a
  5360. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo --AND a.WorkPoint=b.WorkPoint
  5361. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  5362. WHERE a.LotNo='{0}' ";
  5363. sql = string.Format(sql, LotNo, WorkPoint, User, lotstr);
  5364. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5365. {
  5366. throw new Exception(language.GetNameByCode("WMSAPIInfo174"));//"条码单据表写入失败!");
  5367. }
  5368. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  5369. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  5370. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  5371. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  5372. MTIME,WorkPoint,EATTRIBUTE1,LogID)
  5373. SELECT NEWID(),'{3}','{4}','{5}','{10}' ,a.InvCode ,
  5374. c.WarehouseCode,c.LocationCode,'{11}','{12}','{6}',
  5375. '','0','{7}','{8}','0','',
  5376. '','','',f.F_Account ,f.F_RealName ,
  5377. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  5378. FROM ICSInventoryLot a
  5379. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo --AND a.WorkPoint=c.WorkPoint
  5380. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  5381. WHERE a.LotNo='{0}'
  5382. ";
  5383. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID, lotstr, WarehouseCode, LocationCode);
  5384. cmd.CommandText = sql;
  5385. result = cmd.ExecuteNonQuery();
  5386. if (result <= 0)
  5387. {
  5388. throw new Exception(language.GetNameByCode("WMSAPIInfo197"));//条码分批后库存日志表存入失败!
  5389. }
  5390. ///添加日志
  5391. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  5392. BEGIN
  5393. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  5394. RETURN
  5395. END
  5396. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  5397. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  5398. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  5399. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  5400. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  5401. SELECT NEWID(),'{3}','{4}','{5}',a.LotNo ,a.InvCode ,
  5402. c.WarehouseCode,c.LocationCode,'','',c.Quantity,
  5403. '','0','{7}','32','0','',
  5404. '','','',f.F_Account ,f.F_RealName ,
  5405. SYSDATETIME() ,'{1}' ,'','{9}'
  5406. FROM ICSInventoryLot a
  5407. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo --AND a.WorkPoint=c.WorkPoint
  5408. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  5409. WHERE a.LotNo='{0}'
  5410. ";
  5411. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID);
  5412. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5413. {
  5414. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  5415. }
  5416. if (PrintEnable.Equals("True"))
  5417. {
  5418. string PrintData = DBHelper.ReadFileStream();
  5419. //sql = @""+PrintData+"";
  5420. 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
  5421. from ICSWareHouseLotInfolog A
  5422. left join ICSInventoryLot B on A.LotNO=B.LotNO and a.WorkPoint=b.WorkPoint
  5423. left join ICSWareHouseLotInfo C ON A.LotNO=C.LotNO and a.WorkPoint=c.WorkPoint
  5424. left join ICSInventory D on b.INVCODE=d.INVCODE and b.WorkPoint=d.WorkPoint
  5425. where A.lotno like '%{0}%' and a.Identification='{3}' and a.BusinessCode='{2}'";
  5426. sql = string.Format(sql, LotNo, WorkPoint, BusinessCode, Identification);
  5427. dtLotno = DBHelper.SQlReturnData(sql, cmd);
  5428. lstDt = dtLotno;
  5429. }
  5430. }
  5431. else
  5432. {
  5433. if (DBHelper.IsPNU9() && TransType == "14")
  5434. {
  5435. ///添加日志
  5436. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' )
  5437. BEGIN
  5438. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  5439. RETURN
  5440. END
  5441. IF EXISTS(SELECT id FROM ICSWareHouseLotInfo WHERE WarehouseCode='{9}' AND LocationCode='{10}' AND LotNo = '{0}')
  5442. BEGIN
  5443. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo355")) + @"',16,1);
  5444. RETURN
  5445. END
  5446. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  5447. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  5448. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  5449. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  5450. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  5451. SELECT NEWID(),'{3}','{4}','{5}',a.LotNo ,a.InvCode ,
  5452. c.WarehouseCode,c.LocationCode,'{9}','{10}',{6},
  5453. '','0','{7}','{8}','0','',
  5454. '','','',f.F_Account ,f.F_RealName ,
  5455. SYSDATETIME() ,'{1}' ,'','{11}'
  5456. FROM ICSInventoryLot a
  5457. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo --AND a.WorkPoint=c.WorkPoint
  5458. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  5459. WHERE a.LotNo='{0}'
  5460. ";
  5461. sql = string.Format(sql, LotNo, InWorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, WarehouseCode, LocationCode, MergeID);
  5462. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5463. {
  5464. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  5465. }
  5466. }
  5467. else
  5468. {
  5469. ///添加日志
  5470. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' )
  5471. BEGIN
  5472. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  5473. RETURN
  5474. END
  5475. IF EXISTS(SELECT id FROM ICSWareHouseLotInfo WHERE WarehouseCode='{9}' AND LocationCode='{10}' AND LotNo = '{0}')
  5476. BEGIN
  5477. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo355")) + @"',16,1);
  5478. RETURN
  5479. END
  5480. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  5481. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  5482. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  5483. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  5484. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  5485. SELECT NEWID(),'{3}','{4}','{5}',a.LotNo ,a.InvCode ,
  5486. c.WarehouseCode,c.LocationCode,'{9}','{10}',{6},
  5487. '','0','{7}','{8}','0','',
  5488. '','','',f.F_Account ,f.F_RealName ,
  5489. SYSDATETIME() ,'{1}' ,'','{11}'
  5490. FROM ICSInventoryLot a
  5491. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo --AND a.WorkPoint=c.WorkPoint
  5492. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  5493. WHERE a.LotNo='{0}'
  5494. ";
  5495. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, WarehouseCode, LocationCode, MergeID);
  5496. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5497. {
  5498. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  5499. }
  5500. }
  5501. if (DBHelper.IsPNU9() && TransType == "14")
  5502. {
  5503. ///更新库存
  5504. //sql = @"UPDATE ICSWareHouseLotInfo SET WorkPoint='{4}' WHERE LotNo='{0}'
  5505. // IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND Quantity<=0)
  5506. // BEGIN
  5507. // RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  5508. // RETURN
  5509. // END";
  5510. string upsql = @"select b.ProjectCode,b.BatchCode,b.Version,b.Brand,b.cFree1,b.cFree2,b.cFree3,
  5511. b.cFree4,b.cFree5,b.cFree6,b.cFree7,b.cFree8,b.cFree9,b.cFree10 from ICSInventoryLot a
  5512. INNER JOIN ICSExtension B on B.ID=A.ExtensionID
  5513. where a.lotno='{0}' and a.WorkPoint='{1}'";
  5514. upsql = string.Format(upsql, LotNo, WorkPoint);
  5515. DataTable Sumdtt = DBHelper.SQlReturnData(upsql, cmd);
  5516. ProjectCode = Sumdtt.Rows[0]["ProjectCode"].ToString();
  5517. BatchCode = Sumdtt.Rows[0]["BatchCode"].ToString();
  5518. Version = Sumdtt.Rows[0]["Version"].ToString();
  5519. Brand = Sumdtt.Rows[0]["Brand"].ToString();
  5520. cFree1 = Sumdtt.Rows[0]["cFree1"].ToString();
  5521. cFree2 = Sumdtt.Rows[0]["cFree2"].ToString();
  5522. cFree3 = Sumdtt.Rows[0]["cFree3"].ToString();
  5523. cFree4 = Sumdtt.Rows[0]["cFree4"].ToString();
  5524. cFree5 = Sumdtt.Rows[0]["cFree5"].ToString();
  5525. cFree6 = Sumdtt.Rows[0]["cFree6"].ToString();
  5526. cFree7 = Sumdtt.Rows[0]["cFree7"].ToString();
  5527. cFree8 = Sumdtt.Rows[0]["cFree8"].ToString();
  5528. cFree9 = Sumdtt.Rows[0]["cFree9"].ToString();
  5529. cFree10 = Sumdtt.Rows[0]["cFree10"].ToString();
  5530. //检验自由项
  5531. Colspan = ProjectCode + "~" + BatchCode + "~" + Version
  5532. + "~" + Brand + "~" + cFree1
  5533. + "~" + cFree2 + "~" + cFree3 + "~" + cFree4
  5534. + "~" + cFree5 + "~" + cFree6 + "~" + cFree7
  5535. + "~" + cFree8 + "~" + cFree9 + "~" + cFree10;
  5536. string exsql = @"select ID,Colspan from ICSExtension a
  5537. where Colspan='{0}' and WorkPoint='{1}'";
  5538. exsql = string.Format(exsql, Colspan, InWorkPoint);
  5539. DataTable dttt = DBHelper.SQlReturnData(exsql, cmd);
  5540. if (dttt.Rows.Count == 0)
  5541. {
  5542. IDD = Guid.NewGuid().ToString();
  5543. sql = @"Insert into ICSExtension(ID, Colspan, ProjectCode, BatchCode, Version, Brand, cFree1, cFree2, cFree3, cFree4, cFree5, cFree6, cFree7, cFree8, cFree9, cFree10, MTIME, MUSER, MUSERName, WorkPoint)
  5544. 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}'";
  5545. sql = string.Format(sql, Colspan, ProjectCode, BatchCode, Version, Brand, cFree1, cFree2, cFree3, cFree4, cFree5, cFree6, cFree7, cFree8, cFree9, cFree10, User, InWorkPoint, IDD);
  5546. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5547. {
  5548. throw new Exception(language.GetNameByCode("WMSAPIInfo366"));
  5549. }
  5550. string uppsql = @"update ICSInventoryLot SET ExtensionID='{0}' where lotno='{1}'";
  5551. uppsql = string.Format(uppsql, IDD, LotNo);
  5552. if (!DBHelper.ExecuteNonQuery(uppsql, cmd))
  5553. {
  5554. throw new Exception(language.GetNameByCode("跨组织条码修改自由项id失败"));
  5555. }
  5556. }
  5557. else
  5558. {
  5559. string uppsql = @"update ICSInventoryLot SET ExtensionID='{0}' where lotno='{1}'";
  5560. uppsql = string.Format(uppsql, dttt.Rows[0]["ID"].ToString(), LotNo);
  5561. if (!DBHelper.ExecuteNonQuery(uppsql, cmd))
  5562. {
  5563. throw new Exception(language.GetNameByCode("跨组织条码修改自由项id失败"));
  5564. }
  5565. }
  5566. sql = @"IF EXISTS(SELECT id FROM ICSTransferApplication a WHERE a.TransferNO='{5}' AND isnull(EATTRIBUTE29,'')<>isnull(EATTRIBUTE30,''))
  5567. BEGIN
  5568. UPDATE ICSWareHouseLotInfo SET WorkPoint='{4}' WHERE LotNo='{0}'
  5569. UPDATE ICSInventoryLot SET WorkPoint='{4}' WHERE LotNo='{0}'
  5570. UPDATE ICSInventoryLotDetail SET WorkPoint='{4}' WHERE LotNo='{0}'
  5571. END
  5572. ELSE
  5573. BEGIN
  5574. UPDATE ICSInventoryLot SET WorkPoint='{4}' WHERE LotNo='{0}'
  5575. UPDATE ICSWareHouseLotInfo SET WareHouseCode='{2}',LocationCode='{3}' , WorkPoint='{4}' WHERE LotNo='{0}'
  5576. END
  5577. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND Quantity<=0)
  5578. BEGIN
  5579. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  5580. RETURN
  5581. END";
  5582. sql = string.Format(sql, LotNo, WorkPoint, WarehouseCode, LocationCode, InWorkPoint,TransCode);
  5583. }
  5584. else if (DBHelper.IsPNU9() && TransType == "6")
  5585. {
  5586. ///更新库存
  5587. //sql = @"UPDATE ICSWareHouseLotInfo SET WorkPoint='{4}' WHERE LotNo='{0}'
  5588. // IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND Quantity<=0)
  5589. // BEGIN
  5590. // RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  5591. // RETURN
  5592. // END";
  5593. string upsql = @"select b.ProjectCode,b.BatchCode,b.Version,b.Brand,b.cFree1,b.cFree2,b.cFree3,
  5594. b.cFree4,b.cFree5,b.cFree6,b.cFree7,b.cFree8,b.cFree9,b.cFree10 from ICSInventoryLot a
  5595. INNER JOIN ICSExtension B on B.ID=A.ExtensionID
  5596. where a.lotno='{0}' and a.WorkPoint='{1}'";
  5597. upsql = string.Format(upsql, LotNo, WorkPoint);
  5598. DataTable Sumdtt = DBHelper.SQlReturnData(upsql, cmd);
  5599. ProjectCode = Sumdtt.Rows[0]["ProjectCode"].ToString();
  5600. BatchCode = Sumdtt.Rows[0]["BatchCode"].ToString();
  5601. Version = Sumdtt.Rows[0]["Version"].ToString();
  5602. Brand = Sumdtt.Rows[0]["Brand"].ToString();
  5603. cFree1 = Sumdtt.Rows[0]["cFree1"].ToString();
  5604. cFree2 = Sumdtt.Rows[0]["cFree2"].ToString();
  5605. cFree3 = Sumdtt.Rows[0]["cFree3"].ToString();
  5606. cFree4 = Sumdtt.Rows[0]["cFree4"].ToString();
  5607. cFree5 = Sumdtt.Rows[0]["cFree5"].ToString();
  5608. cFree6 = Sumdtt.Rows[0]["cFree6"].ToString();
  5609. cFree7 = Sumdtt.Rows[0]["cFree7"].ToString();
  5610. cFree8 = Sumdtt.Rows[0]["cFree8"].ToString();
  5611. cFree9 = Sumdtt.Rows[0]["cFree9"].ToString();
  5612. cFree10 = Sumdtt.Rows[0]["cFree10"].ToString();
  5613. //检验自由项
  5614. Colspan = ProjectCode + "~" + BatchCode + "~" + Version
  5615. + "~" + Brand + "~" + cFree1
  5616. + "~" + cFree2 + "~" + cFree3 + "~" + cFree4
  5617. + "~" + cFree5 + "~" + cFree6 + "~" + cFree7
  5618. + "~" + cFree8 + "~" + cFree9 + "~" + cFree10;
  5619. string exsql = @"select ID,Colspan from ICSExtension a
  5620. where Colspan='{0}' and WorkPoint='{1}'";
  5621. exsql = string.Format(exsql, Colspan, WorkPoint);
  5622. DataTable dttt = DBHelper.SQlReturnData(exsql, cmd);
  5623. if (dttt.Rows.Count == 0)
  5624. {
  5625. IDD = Guid.NewGuid().ToString();
  5626. sql = @"Insert into ICSExtension(ID, Colspan, ProjectCode, BatchCode, Version, Brand, cFree1, cFree2, cFree3, cFree4, cFree5, cFree6, cFree7, cFree8, cFree9, cFree10, MTIME, MUSER, MUSERName, WorkPoint)
  5627. 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}'";
  5628. sql = string.Format(sql, Colspan, ProjectCode, BatchCode, Version, Brand, cFree1, cFree2, cFree3, cFree4, cFree5, cFree6, cFree7, cFree8, cFree9, cFree10, User, WorkPoint, IDD);
  5629. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5630. {
  5631. throw new Exception(language.GetNameByCode("WMSAPIInfo366"));
  5632. }
  5633. string uppsql = @"update ICSInventoryLot SET ExtensionID='{0}' where lotno='{1}'";
  5634. uppsql = string.Format(uppsql, IDD, LotNo);
  5635. if (!DBHelper.ExecuteNonQuery(uppsql, cmd))
  5636. {
  5637. throw new Exception(language.GetNameByCode("跨组织条码修改自由项id失败"));
  5638. }
  5639. }
  5640. else
  5641. {
  5642. string uppsql = @"update ICSInventoryLot SET ExtensionID='{0}' where lotno='{1}'";
  5643. uppsql = string.Format(uppsql, dttt.Rows[0]["ID"].ToString(), LotNo);
  5644. if (!DBHelper.ExecuteNonQuery(uppsql, cmd))
  5645. {
  5646. throw new Exception(language.GetNameByCode("跨组织条码修改自由项id失败"));
  5647. }
  5648. }
  5649. sql = @"IF EXISTS(SELECT id FROM ICSTransferApplication a WHERE a.TransferNO='{5}' AND isnull(EATTRIBUTE29,'')<>isnull(EATTRIBUTE30,''))
  5650. BEGIN
  5651. UPDATE ICSWareHouseLotInfo SET WorkPoint='{4}' WHERE LotNo='{0}'
  5652. UPDATE ICSInventoryLot SET WorkPoint='{4}' WHERE LotNo='{0}'
  5653. END
  5654. ELSE
  5655. BEGIN
  5656. UPDATE ICSInventoryLot SET WorkPoint='{4}' WHERE LotNo='{0}'
  5657. UPDATE ICSWareHouseLotInfo SET WareHouseCode='{2}',LocationCode='{3}' , WorkPoint='{4}' WHERE LotNo='{0}'
  5658. END
  5659. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND Quantity<=0)
  5660. BEGIN
  5661. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  5662. RETURN
  5663. END";
  5664. sql = string.Format(sql, LotNo, WorkPoint, WarehouseCode, LocationCode, WorkPoint, TransCode);
  5665. }
  5666. else
  5667. {
  5668. ///更新库存
  5669. sql = @"UPDATE ICSWareHouseLotInfo SET WareHouseCode='{2}',LocationCode='{3}' , WorkPoint='{1}' WHERE LotNo='{0}'
  5670. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND Quantity<=0)
  5671. BEGIN
  5672. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  5673. RETURN
  5674. END";
  5675. sql = string.Format(sql, LotNo, WorkPoint, WarehouseCode, LocationCode, WorkPoint);
  5676. }
  5677. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5678. {
  5679. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  5680. }
  5681. }
  5682. DateTime now = DateTime.Now;
  5683. sql = @"select 1 from ICSContainerLot
  5684. where LotNo='{0}'
  5685. ";
  5686. sql = string.Format(sql, LotNo, WorkPoint);
  5687. log.Debug("查询容器条码关联表是否存在");
  5688. DataTable dttte = DBHelper.SQlReturnData(sql, cmd);
  5689. if (dttte.Rows.Count > 0)
  5690. {
  5691. ///删除条码关联表数据
  5692. sql = @"DELETE FROM ICSContainerLot
  5693. where LotNo='{0}'
  5694. ";
  5695. sql = string.Format(sql, LotNo, WorkPoint);
  5696. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5697. {
  5698. throw new Exception(language.GetNameByCode("容器条码关联表数据删除失败"));
  5699. }
  5700. }
  5701. }
  5702. else
  5703. {
  5704. 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
  5705. from Sys_SRM_Items a
  5706. left join Sys_SRM_ItemsDetail b on a.F_Id=b.F_ItemId
  5707. where a.F_EnCode='TransBatch' and b.F_ItemCode='{0}' )
  5708. BEGIN
  5709. RAISERROR('" + language.GetNameByCode("WMSAPIInfo470") + @"',16,1);
  5710. RETURN
  5711. END
  5712. select b.F_ItemCode as Code ,b.F_ItemName as Name,b.F_EnabledMark AS Enable ,b.F_IsDefault AS DisPrintEnable
  5713. from Sys_SRM_Items a
  5714. left join Sys_SRM_ItemsDetail b on a.F_Id=b.F_ItemId
  5715. where a.F_EnCode='TransBatch' and b.F_ItemCode='{0}'
  5716. ";
  5717. cheksql = string.Format(cheksql, BusinessCode);
  5718. DataTable chekdt = DBHelper.SQlReturnData(cheksql, cmd);
  5719. if (chekdt.Rows.Count == 0)
  5720. {
  5721. throw new Exception(language.GetNameByCode("WMSAPIInfo369"));
  5722. }
  5723. else
  5724. {
  5725. chekEnable = chekdt.Rows[0]["Enable"].ToString();
  5726. DisPrintEnable = chekdt.Rows[0]["DisPrintEnable"].ToString();
  5727. }
  5728. //检验是否分批
  5729. string sql = @"SELECT b.LotEnable,b.PrintEnable FROM ICSInventoryLot a
  5730. LEFT JOIN ICSInventory b ON a.InvCode=b.InvCode AND a.WorkPoint=b.WorkPoint
  5731. where a.LotNo='{0}' and a.WorkPoint='{1}'
  5732. ";
  5733. sql = string.Format(sql, LotNo, WorkPoint);
  5734. DataTable dt = DBHelper.SQlReturnData(sql, cmd);
  5735. if (dt.Rows.Count == 0)
  5736. {
  5737. throw new Exception(language.GetNameByCode("WMSAPIInfo369"));
  5738. }
  5739. else
  5740. {
  5741. LotEnable = dt.Rows[0]["LotEnable"].ToString();
  5742. PrintEnable = dt.Rows[0]["PrintEnable"].ToString();
  5743. }
  5744. sql = @"select Quantity from ICSWareHouseLotInfo
  5745. where LotNO='{0}' AND WorkPoint='{1}'";
  5746. sql = string.Format(sql, LotNo, WorkPoint);
  5747. DataTable dtt = DBHelper.SQlReturnData(sql, cmd);
  5748. LotQTYYY = Convert.ToDecimal(dtt.Rows[0]["Quantity"]);
  5749. LotQTY = Convert.ToDecimal(Quantity);
  5750. if (LotEnable.Equals("True") && chekEnable.Equals("True") && LotQTYYY - LotQTY > 0)//增加数量判断
  5751. {
  5752. ///更新库存
  5753. sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  5754. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND Quantity<0)
  5755. BEGIN
  5756. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  5757. RETURN
  5758. END";
  5759. sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  5760. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5761. {
  5762. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  5763. }
  5764. ///分批前添加日志
  5765. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  5766. BEGIN
  5767. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  5768. RETURN
  5769. END
  5770. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  5771. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  5772. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  5773. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  5774. MTIME,WorkPoint,EATTRIBUTE1)
  5775. SELECT NEWID(),'{3}','{7}','{8}',a.LotNo ,a.InvCode ,
  5776. c.WarehouseCode,c.LocationCode,'','',c.Quantity+{6},
  5777. '','0','{4}','31','0','',
  5778. '','','',f.F_Account ,f.F_RealName ,
  5779. SYSDATETIME() ,a.WorkPoint ,''
  5780. FROM ICSInventoryLot a
  5781. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  5782. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  5783. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  5784. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  5785. ";
  5786. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransType, BusinessCode, Quantity, TransCode, TransSequence);
  5787. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5788. {
  5789. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  5790. }
  5791. #region 获取分批后的条码(lotstr)
  5792. sql = @"SELECT TOP 1 LotNO FROM ICSInventoryLot WHERE EATTRIBUTE1='{0}' AND WorkPoint='{1}'
  5793. ORDER BY CAST(SUBSTRING(LotNO, (LEN(LotNO)-CHARINDEX('-',REVERSE(LotNO))+1)+1,CHARINDEX('-',REVERSE(LotNO))-1) AS INT) DESC";
  5794. sql = string.Format(sql, LotNo, WorkPoint);
  5795. dt = DBHelper.SQlReturnData(sql, cmd);
  5796. if (dt.Rows.Count == 0)
  5797. {
  5798. lotstr = LotNo + "-" + 1;
  5799. }
  5800. else
  5801. {
  5802. lotstr = LotNo + "-" + (Convert.ToInt32(dt.Rows[0]["LotNO"].ToString().Split('-')[dt.Rows[0]["LotNO"].ToString().Split('-').Length - 1]) + 1).ToString();
  5803. }
  5804. NewBarCodeList.Add(lotstr);//将分批后新条码添加到新集合
  5805. #endregion
  5806. #region 将分批后的条码记录插入条码表,库存表及日志表并将原条码库存数量清零
  5807. sql = @"INSERT INTO ICSInventoryLot(ID,LotNo,InvCode,ProductDate,ExpirationDate,
  5808. Quantity,Amount,ExtensionID,Type,PrintTimes,
  5809. LastPrintUser,LastPrintTime,MUSER,MUSERName,MTIME,
  5810. WorkPoint,EATTRIBUTE1,EATTRIBUTE2,EATTRIBUTE3,EATTRIBUTE4,EATTRIBUTE5,EATTRIBUTE6,EATTRIBUTE7,EATTRIBUTE8,
  5811. EATTRIBUTE9,EATTRIBUTE10,EATTRIBUTE11,EATTRIBUTE12,EATTRIBUTE13,EATTRIBUTE14,EATTRIBUTE15,EATTRIBUTE16,EATTRIBUTE17,EATTRIBUTE18,EATTRIBUTE19,EATTRIBUTE20,
  5812. EATTRIBUTE21,EATTRIBUTE22,EATTRIBUTE23,EATTRIBUTE24,EATTRIBUTE25,EATTRIBUTE26,EATTRIBUTE27,EATTRIBUTE28,EATTRIBUTE29,EATTRIBUTE30)
  5813. SELECT TOP 1 NEWID(),'{0}',a.InvCode,a.ProductDate,a.ExpirationDate,
  5814. '{2}',a.Amount,a.ExtensionID,a.Type,a.PrintTimes,
  5815. a.LastPrintUser,a.LastPrintTime,a.MUSER ,a.MUSERName ,GETDATE(),
  5816. a.WorkPoint ,'{1}',a.EATTRIBUTE2,a.EATTRIBUTE3,a.EATTRIBUTE4,a.EATTRIBUTE5,a.EATTRIBUTE6,a.EATTRIBUTE7,a.EATTRIBUTE8,
  5817. a.EATTRIBUTE9,a.EATTRIBUTE10,a.EATTRIBUTE11,a.EATTRIBUTE12,a.EATTRIBUTE13,a.EATTRIBUTE14,a.EATTRIBUTE15,a.EATTRIBUTE16,a.EATTRIBUTE17,a.EATTRIBUTE18,a.EATTRIBUTE19,a.EATTRIBUTE20,
  5818. a.EATTRIBUTE21,a.EATTRIBUTE22,a.EATTRIBUTE23,a.EATTRIBUTE24,a.EATTRIBUTE25,a.EATTRIBUTE26,a.EATTRIBUTE27,a.EATTRIBUTE28,a.EATTRIBUTE29,a.EATTRIBUTE30
  5819. From ICSInventoryLot a
  5820. where a.LotNo='{1}' and a.WorkPoint='{3}'";
  5821. sql = string.Format(sql, lotstr, LotNo, Quantity, WorkPoint);
  5822. cmd.CommandText = sql;
  5823. result = cmd.ExecuteNonQuery();
  5824. if (result <= 0)
  5825. {
  5826. throw new Exception(language.GetNameByCode("WMSAPIInfo195"));//条码分批后条码表存入失败!
  5827. }
  5828. #endregion
  5829. sql = @"INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  5830. select NEWID(),'{0}','{4}','{5}',InvCode,'{2}',InDate,LockQuantity
  5831. ,MUSER,MUSERName,GETDATE(),'{3}',''
  5832. from ICSWareHouseLotInfo
  5833. where LotNO='{1}' AND WorkPoint='{3}'";
  5834. sql = string.Format(sql, lotstr, LotNo, Quantity, WorkPoint, WarehouseCode, LocationCode);
  5835. cmd.CommandText = sql;
  5836. result = cmd.ExecuteNonQuery();
  5837. if (result <= 0)
  5838. {
  5839. throw new Exception(language.GetNameByCode("WMSAPIInfo196"));//条码分批后库存表存入失败!
  5840. }
  5841. //插入条码单据表
  5842. sql = @"INSERT INTO ICSInventoryLotDetail(LotNo,TransCode,TransSequence,MUSER,MUSERName,MTIME,WorkPoint)
  5843. SELECT '{3}',b.TransCode,b.TransSequence,f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint
  5844. FROM ICSInventoryLot a
  5845. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  5846. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  5847. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  5848. sql = string.Format(sql, LotNo, WorkPoint, User, lotstr);
  5849. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5850. {
  5851. throw new Exception(language.GetNameByCode("WMSAPIInfo174"));//"条码单据表写入失败!");
  5852. }
  5853. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  5854. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  5855. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  5856. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  5857. MTIME,WorkPoint,EATTRIBUTE1,LogID)
  5858. SELECT NEWID(),'{3}','{4}','{5}','{10}' ,a.InvCode ,
  5859. c.WarehouseCode,c.LocationCode,'{11}','{12}','{6}',
  5860. '','0','{7}','{8}','0','',
  5861. '','','',f.F_Account ,f.F_RealName ,
  5862. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  5863. FROM ICSInventoryLot a
  5864. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  5865. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  5866. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  5867. ";
  5868. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID, lotstr, WarehouseCode, LocationCode);
  5869. cmd.CommandText = sql;
  5870. result = cmd.ExecuteNonQuery();
  5871. if (result <= 0)
  5872. {
  5873. throw new Exception(language.GetNameByCode("WMSAPIInfo197"));//条码分批后库存日志表存入失败!
  5874. }
  5875. ///添加日志
  5876. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  5877. BEGIN
  5878. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  5879. RETURN
  5880. END
  5881. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  5882. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  5883. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  5884. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  5885. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  5886. SELECT NEWID(),'{3}','{4}','{5}',a.LotNo ,a.InvCode ,
  5887. c.WarehouseCode,c.LocationCode,'','',c.Quantity,
  5888. '','0','{7}','32','0','',
  5889. '','','',f.F_Account ,f.F_RealName ,
  5890. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  5891. FROM ICSInventoryLot a
  5892. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  5893. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  5894. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  5895. ";
  5896. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID);
  5897. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5898. {
  5899. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  5900. }
  5901. if (PrintEnable.Equals("True"))
  5902. {
  5903. string PrintData = DBHelper.ReadFileStream();
  5904. //sql = @""+PrintData+"";
  5905. 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
  5906. from ICSWareHouseLotInfolog A
  5907. left join ICSInventoryLot B on A.LotNO=B.LotNO and a.WorkPoint=b.WorkPoint
  5908. left join ICSWareHouseLotInfo C ON A.LotNO=C.LotNO and a.WorkPoint=c.WorkPoint
  5909. left join ICSInventory D on b.INVCODE=d.INVCODE and b.WorkPoint=d.WorkPoint
  5910. where A.lotno like '%{0}%' and a.Identification='{3}' and a.workpoint='{1}' and a.BusinessCode='{2}'";
  5911. sql = string.Format(sql, LotNo, WorkPoint, BusinessCode, Identification);
  5912. dtLotno = DBHelper.SQlReturnData(sql, cmd);
  5913. lstDt = dtLotno;
  5914. }
  5915. }
  5916. else
  5917. {
  5918. ///添加日志
  5919. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  5920. BEGIN
  5921. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  5922. RETURN
  5923. END
  5924. IF EXISTS(SELECT id FROM ICSWareHouseLotInfo WHERE WarehouseCode='{9}' AND LocationCode='{10}' AND WorkPoint='{1}' AND LotNo = '{0}')
  5925. BEGIN
  5926. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo355")) + @"',16,1);
  5927. RETURN
  5928. END
  5929. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  5930. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  5931. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  5932. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  5933. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  5934. SELECT NEWID(),'{3}','{4}','{5}',a.LotNo ,a.InvCode ,
  5935. c.WarehouseCode,c.LocationCode,'{9}','{10}',{6},
  5936. '','0','{7}','{8}','0','',
  5937. '','','',f.F_Account ,f.F_RealName ,
  5938. SYSDATETIME() ,a.WorkPoint ,'','{11}'
  5939. FROM ICSInventoryLot a
  5940. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  5941. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  5942. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  5943. ";
  5944. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, WarehouseCode, LocationCode, MergeID);
  5945. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5946. {
  5947. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  5948. }
  5949. ///更新库存
  5950. sql = @"UPDATE ICSWareHouseLotInfo SET WareHouseCode='{2}',LocationCode='{3}',WorkPoint='{1}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  5951. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity<=0)
  5952. BEGIN
  5953. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  5954. RETURN
  5955. END";
  5956. sql = string.Format(sql, LotNo, WorkPoint, WarehouseCode, LocationCode);
  5957. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5958. {
  5959. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  5960. }
  5961. }
  5962. DateTime now = DateTime.Now;
  5963. sql = @"select 1 from ICSContainerLot
  5964. where LotNo='{0}' and WorkPoint='{1}'
  5965. ";
  5966. sql = string.Format(sql, LotNo, WorkPoint);
  5967. log.Debug("查询容器条码关联表是否存在");
  5968. DataTable dttte = DBHelper.SQlReturnData(sql, cmd);
  5969. if (dttte.Rows.Count > 0)
  5970. {
  5971. ///删除条码关联表数据
  5972. sql = @"DELETE FROM ICSContainerLot
  5973. where LotNo='{0}' and WorkPoint='{1}'
  5974. ";
  5975. sql = string.Format(sql, LotNo, WorkPoint);
  5976. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5977. {
  5978. throw new Exception(language.GetNameByCode("容器条码关联表数据删除失败"));
  5979. }
  5980. }
  5981. }
  5982. }
  5983. catch (Exception)
  5984. {
  5985. throw;
  5986. }
  5987. return lstDt;
  5988. }
  5989. /// <summary>
  5990. /// 移库
  5991. /// </summary>
  5992. /// <param name="LocationCode"></param>
  5993. /// <param name="LotNo"></param>
  5994. /// <param name="Quantity"></param>
  5995. /// <param name="User"></param>
  5996. /// <param name="WorkPoint"></param>
  5997. /// <param name="TransType"></param>
  5998. /// <param name="BusinessCode"></param>
  5999. /// <param name="cmd"></param>
  6000. public static void WareHouseLotInfoLibrary(string Identification, string TransCode, string TransSequence, string WarehouseCode, string LocationCode,
  6001. string LotNo, string User, string WorkPoint, string TransType, string BusinessCode,String ScanType, SqlCommand cmd, Dictionary<string, string> language)
  6002. {
  6003. try
  6004. {
  6005. string sql = @"SELECT WarehouseCode FROM ICSWareHouseLotInfo a WHERE LotNo='{0}' AND WorkPoint='{1}'";
  6006. sql = string.Format(sql, LotNo,WorkPoint);
  6007. DataTable dt = DBHelper.SQlReturnData(sql, cmd);
  6008. if (dt == null || dt.Rows.Count <= 0)
  6009. {
  6010. throw new Exception(string.Format(language.GetNameByCode("WMSAPIInfo171"), LotNo));
  6011. }
  6012. string whcode = dt.Rows[0]["WarehouseCode"].ToString();
  6013. ///添加日志
  6014. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  6015. BEGIN
  6016. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  6017. RETURN
  6018. END
  6019. IF('" + whcode + @"' != '{8}')
  6020. BEGIN
  6021. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo394"), "{8}", whcode) + @"', 16, 1);
  6022. RETURN
  6023. END
  6024. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  6025. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  6026. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  6027. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  6028. MTIME,WorkPoint,EATTRIBUTE1 )
  6029. SELECT NEWID(),'{3}','{4}','{5}',a.LotNo ,a.InvCode ,
  6030. c.WarehouseCode,c.LocationCode,'{8}','{9}',c.Quantity,
  6031. '','0','{6}','{7}','0','',
  6032. '','','',f.F_Account ,f.F_RealName ,
  6033. SYSDATETIME() ,a.WorkPoint ,''
  6034. FROM ICSInventoryLot a
  6035. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  6036. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  6037. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  6038. ";
  6039. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, TransType, BusinessCode, WarehouseCode, LocationCode);
  6040. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  6041. {
  6042. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  6043. }
  6044. ///添加库存
  6045. sql = @"IF NOT EXISTS(SELECT a.ID FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity>0)
  6046. BEGIN
  6047. RAISERROR('" + language.GetNameByCode("WMSAPIInfo038") + @"',16,1);
  6048. RETURN
  6049. END
  6050. IF NOT EXISTS(SELECT a.ID FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND a.WarehouseCode='{2}')
  6051. BEGIN
  6052. RAISERROR('" + language.GetNameByCode("WMSAPIInfo038") + @"',16,1);
  6053. RETURN
  6054. END
  6055. UPDATE ICSWareHouseLotInfo SET WarehouseCode='{2}',LocationCode='{3}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  6056. ";
  6057. sql = string.Format(sql, LotNo, WorkPoint, WarehouseCode, LocationCode);
  6058. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  6059. {
  6060. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存表更新失败!");
  6061. }
  6062. DateTime now = DateTime.Now;
  6063. if (ScanType== "LOTNO")
  6064. {
  6065. sql = @"select 1 from ICSContainerLot
  6066. where LotNo='{0}' and WorkPoint='{1}'
  6067. ";
  6068. sql = string.Format(sql, LotNo, WorkPoint);
  6069. log.Debug("查询容器条码关联表是否存在");
  6070. DataTable dttte = DBHelper.SQlReturnData(sql, cmd);
  6071. if (dttte.Rows.Count > 0)
  6072. {
  6073. ///删除条码关联表数据
  6074. sql = @"DELETE FROM ICSContainerLot
  6075. where LotNo='{0}' and WorkPoint='{1}'
  6076. ";
  6077. sql = string.Format(sql, LotNo, WorkPoint);
  6078. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  6079. {
  6080. throw new Exception(language.GetNameByCode("容器条码关联表数据删除失败"));
  6081. }
  6082. }
  6083. }
  6084. }
  6085. catch (Exception)
  6086. {
  6087. throw;
  6088. }
  6089. }
  6090. /// <summary>
  6091. /// 两步调入
  6092. /// </summary>
  6093. /// <param name="LocationCode"></param>
  6094. /// <param name="LotNo"></param>
  6095. /// <param name="Quantity"></param>
  6096. /// <param name="User"></param>
  6097. /// <param name="WorkPoint"></param>
  6098. /// <param name="TransType"></param>
  6099. /// <param name="BusinessCode"></param>
  6100. /// <param name="cmd"></param>
  6101. public static void WareHouseLotInfoTwoStepTransferDocIn(string Identification, string TransCode, string TransSequence, string WarehouseCode,
  6102. string LocationCode, string LotNo, string Quantity, string User, string WorkPoint, string TransType, string BusinessCode, SqlCommand cmd, Dictionary<string, string> language)
  6103. {
  6104. try
  6105. {
  6106. ///添加日志
  6107. string sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  6108. BEGIN
  6109. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  6110. RETURN
  6111. END
  6112. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  6113. ToWarehouseCode,ToLocationCode,Quantity,
  6114. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  6115. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  6116. MTIME,WorkPoint,EATTRIBUTE1)
  6117. SELECT NEWID(),'{3}','{4}','{5}',a.LotNo ,a.InvCode ,
  6118. '{9}','{10}','{6}',
  6119. '','0','{7}','{8}','0','',
  6120. '','','',f.F_Account ,f.F_RealName ,
  6121. SYSDATETIME() ,a.WorkPoint ,''
  6122. FROM ICSInventoryLot a
  6123. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  6124. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  6125. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  6126. ";
  6127. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, WarehouseCode, LocationCode);
  6128. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  6129. {
  6130. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  6131. }
  6132. ///添加库存
  6133. sql = @"IF NOT EXISTS(SELECT a.ID FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}')
  6134. BEGIN
  6135. RAISERROR('" + language.GetNameByCode("WMSAPIInfo171") + @"',16,1);
  6136. RETURN
  6137. END
  6138. UPDATE ICSWareHouseLotInfo SET WarehouseCode='{2}',LocationCode='{3}',Quantity=Quantity+'{4}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  6139. ";
  6140. sql = string.Format(sql, LotNo, WorkPoint, WarehouseCode, LocationCode, Quantity);
  6141. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  6142. {
  6143. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存表更新失败!");
  6144. }
  6145. }
  6146. catch (Exception)
  6147. {
  6148. throw;
  6149. }
  6150. }
  6151. /// <summary>
  6152. /// 锐腾两步调入
  6153. /// </summary>
  6154. /// <param name="LocationCode"></param>
  6155. /// <param name="LotNo"></param>
  6156. /// <param name="Quantity"></param>
  6157. /// <param name="User"></param>
  6158. /// <param name="WorkPoint"></param>
  6159. /// <param name="TransType"></param>
  6160. /// <param name="BusinessCode"></param>
  6161. /// <param name="cmd"></param>
  6162. public static void RTWareHouseLotInfoTwoStepTransferDocIn(string Identification, string TransCode, string TransSequence, string WarehouseCode,
  6163. string LocationCode, string LotNo, string Quantity, string User, string WorkPoint, string TransType, string BusinessCode, SqlCommand cmd, Dictionary<string, string> language)
  6164. {
  6165. try
  6166. {
  6167. ///添加日志
  6168. string sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  6169. BEGIN
  6170. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  6171. RETURN
  6172. END
  6173. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  6174. ToWarehouseCode,ToLocationCode,Quantity,
  6175. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  6176. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  6177. MTIME,WorkPoint,EATTRIBUTE1)
  6178. SELECT NEWID(),'{3}','{4}','{5}',a.LotNo ,a.InvCode ,
  6179. '{9}','{10}','{6}',
  6180. '','0','{7}','{8}','0','',
  6181. '','','',f.F_Account ,f.F_RealName ,
  6182. SYSDATETIME() ,a.WorkPoint ,''
  6183. FROM ICSInventoryLot a
  6184. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  6185. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  6186. ";
  6187. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, WarehouseCode, LocationCode);
  6188. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  6189. {
  6190. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  6191. }
  6192. ///添加库存
  6193. sql = @"IF EXISTS(SELECT a.ID FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}')
  6194. BEGIN
  6195. RAISERROR('!',16,1);
  6196. RETURN
  6197. END
  6198. INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  6199. SELECT NEWID(),a.LotNo ,e.WarehouseCode,d.LocationCode,a.InvCode ,'{3}',SYSDATETIME(),'0',f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint ,''
  6200. FROM ICSInventoryLot a
  6201. LEFT JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  6202. --INNER JOIN ICSOApplyNegDetail c ON b.TransCode=c.OApplyNegCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  6203. INNER JOIN ICSLocation d ON d.LocationCode='{4}' AND a.WorkPoint=d.WorkPoint
  6204. INNER JOIN ICSWarehouse e ON d.WHID=e.ID AND d.WorkPoint=e.WorkPoint
  6205. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  6206. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  6207. ";
  6208. sql = string.Format(sql, LotNo, WorkPoint, User, Quantity, LocationCode);
  6209. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  6210. {
  6211. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存表更新失败!");
  6212. }
  6213. }
  6214. catch (Exception)
  6215. {
  6216. throw;
  6217. }
  6218. }
  6219. /// <summary>
  6220. /// 合并日志
  6221. /// </summary>
  6222. /// <param name="Identification"></param>
  6223. /// <param name="LotNo"></param>
  6224. /// <param name="User"></param>
  6225. /// <param name="WorkPoint"></param>
  6226. /// <param name="TransType"></param>
  6227. /// <param name="BusinessCode"></param>
  6228. /// <param name="cmd"></param>
  6229. public static DataTable WareHouseLotInfoLogMerge(string Identification, string LotNo, string User, string WorkPoint, string TransType, string BusinessCode, string newLotno, SqlCommand cmd, Dictionary<string, string> language)
  6230. {
  6231. String LotEnable = "";
  6232. String PrintEnable = "";
  6233. DataTable dtLotno = new DataTable();
  6234. DataTable lstDt = new DataTable();
  6235. try
  6236. {
  6237. //检验是否分批
  6238. string sql = @"SELECT b.LotEnable,b.PrintEnable FROM ICSInventoryLot a
  6239. LEFT JOIN ICSInventory b ON a.InvCode=b.InvCode AND a.WorkPoint=b.WorkPoint
  6240. where a.LotNo='{0}' and a.WorkPoint='{1}'
  6241. ";
  6242. sql = string.Format(sql, LotNo, WorkPoint);
  6243. DataTable dt = DBHelper.SQlReturnData(sql, cmd);
  6244. if (dt.Rows.Count == 0)
  6245. {
  6246. throw new Exception(language.GetNameByCode("WMSAPIInfo369"));
  6247. }
  6248. else
  6249. {
  6250. LotEnable = dt.Rows[0]["LotEnable"].ToString();
  6251. PrintEnable = dt.Rows[0]["PrintEnable"].ToString();
  6252. }
  6253. ///添加日志
  6254. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  6255. BEGIN
  6256. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  6257. RETURN
  6258. END
  6259. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  6260. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  6261. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  6262. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  6263. MTIME,WorkPoint,EATTRIBUTE1)
  6264. SELECT NEWID(),'{3}',b.TransCode,b.TransSequence,a.LotNo ,a.InvCode ,
  6265. '','',c.WarehouseCode,c.LocationCode,c.Quantity,
  6266. '','0','{4}','{5}','0','',
  6267. '','','',f.F_Account ,f.F_RealName ,
  6268. SYSDATETIME() ,a.WorkPoint ,''
  6269. FROM ICSInventoryLot a
  6270. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  6271. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  6272. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  6273. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  6274. ";
  6275. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransType, BusinessCode);
  6276. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  6277. {
  6278. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  6279. }
  6280. if (PrintEnable.Equals("True"))
  6281. {
  6282. sql = @"select A.LotNO , B.Quantity AS OLDLotQty, C.Quantity AS LotQty ,b.InvCode,d.INVSTD,d.INVNAME,b.MTIME,A.TransCode
  6283. from ICSWareHouseLotInfolog A
  6284. left join ICSInventoryLot B on A.LotNO=B.LotNO and a.WorkPoint=b.WorkPoint
  6285. left join ICSWareHouseLotInfo C ON A.LotNO=C.LotNO and a.WorkPoint=c.WorkPoint
  6286. left join ICSInventory D on b.INVCODE=d.INVCODE and b.WorkPoint=d.WorkPoint
  6287. where a.BusinessCode='34'
  6288. and A.lotno = '{0}' and a.workpoint='{1}'
  6289. ";
  6290. sql = string.Format(sql, LotNo, WorkPoint, BusinessCode, newLotno);
  6291. dtLotno = DBHelper.SQlReturnData(sql, cmd);
  6292. lstDt = dtLotno;
  6293. }
  6294. }
  6295. catch (Exception)
  6296. {
  6297. throw;
  6298. }
  6299. return lstDt;
  6300. }
  6301. /// <summary>
  6302. /// 拆分、合并日志
  6303. /// </summary>
  6304. /// <param name="Identification"></param>
  6305. /// <param name="LotNo"></param>
  6306. /// <param name="User"></param>
  6307. /// <param name="WorkPoint"></param>
  6308. /// <param name="TransType"></param>
  6309. /// <param name="BusinessCode"></param>
  6310. /// <param name="cmd"></param>
  6311. public static DataTable WareHouseLotInfoLog(string Identification, string LotNo, string User, string WorkPoint, string TransType, string BusinessCode,string newLotno, SqlCommand cmd, Dictionary<string, string> language)
  6312. {
  6313. String LotEnable = "";
  6314. String PrintEnable = "";
  6315. DataTable dtLotno = new DataTable();
  6316. DataTable lstDt = new DataTable();
  6317. try{
  6318. //检验是否分批
  6319. string sql = @"SELECT b.LotEnable,b.PrintEnable FROM ICSInventoryLot a
  6320. LEFT JOIN ICSInventory b ON a.InvCode=b.InvCode AND a.WorkPoint=b.WorkPoint
  6321. where a.LotNo='{0}' and a.WorkPoint='{1}'
  6322. ";
  6323. sql = string.Format(sql, LotNo, WorkPoint);
  6324. DataTable dt = DBHelper.SQlReturnData(sql, cmd);
  6325. if (dt.Rows.Count == 0)
  6326. {
  6327. throw new Exception(language.GetNameByCode("WMSAPIInfo369"));
  6328. }
  6329. else
  6330. {
  6331. LotEnable = dt.Rows[0]["LotEnable"].ToString();
  6332. PrintEnable = dt.Rows[0]["PrintEnable"].ToString();
  6333. }
  6334. ///添加日志
  6335. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  6336. BEGIN
  6337. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  6338. RETURN
  6339. END
  6340. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  6341. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  6342. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  6343. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  6344. MTIME,WorkPoint,EATTRIBUTE1)
  6345. SELECT NEWID(),'{3}',b.TransCode,b.TransSequence,a.LotNo ,a.InvCode ,
  6346. '','',c.WarehouseCode,c.LocationCode,c.Quantity,
  6347. '','0','{4}','{5}','0','',
  6348. '','','',f.F_Account ,f.F_RealName ,
  6349. SYSDATETIME() ,a.WorkPoint ,''
  6350. FROM ICSInventoryLot a
  6351. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  6352. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  6353. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  6354. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  6355. ";
  6356. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransType, BusinessCode);
  6357. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  6358. {
  6359. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  6360. }
  6361. //if (PrintEnable.Equals("True"))
  6362. //{
  6363. // 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
  6364. // from ICSWareHouseLotInfolog A
  6365. // left join ICSInventoryLot B on A.LotNO=B.LotNO and a.WorkPoint=b.WorkPoint
  6366. // left join ICSWareHouseLotInfo C ON A.LotNO=C.LotNO and a.WorkPoint=c.WorkPoint
  6367. // left join ICSInventory D on b.INVCODE=d.INVCODE and b.WorkPoint=d.WorkPoint
  6368. // left JOIN ICSExtension f on b.ExtensionID=f.id and b.WorkPoint=f.WorkPoint
  6369. // where a.BusinessCode='32'
  6370. // and A.lotno = '{3}' and a.workpoint='{1}'
  6371. // ";
  6372. // sql = string.Format(sql, LotNo, WorkPoint, BusinessCode,newLotno);
  6373. // dtLotno = DBHelper.SQlReturnData(sql, cmd);
  6374. // lstDt = dtLotno;
  6375. //}
  6376. if (PrintEnable.Equals("True") )
  6377. {
  6378. string PrintData = DBHelper.ReadPrintStream();
  6379. sql = @"" + PrintData + "";
  6380. //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
  6381. // from ICSWareHouseLotInfolog A
  6382. // left join ICSInventoryLot B on A.LotNO=B.LotNO and a.WorkPoint=b.WorkPoint
  6383. // left join ICSWareHouseLotInfo C ON A.LotNO=C.LotNO and a.WorkPoint=c.WorkPoint
  6384. // left join ICSInventory D on b.INVCODE=d.INVCODE and b.WorkPoint=d.WorkPoint
  6385. // where A.lotno ='{0}' and a.workpoint='{1}' and a.BusinessCode='{2}'
  6386. // ";
  6387. sql = string.Format(sql, newLotno, WorkPoint, BusinessCode, Identification);
  6388. log.Debug("拆分数据源:"+ sql);
  6389. dtLotno = DBHelper.SQlReturnData(sql, cmd);
  6390. lstDt = dtLotno;
  6391. }
  6392. }
  6393. catch (Exception)
  6394. {
  6395. throw;
  6396. }
  6397. return lstDt;
  6398. }
  6399. /// <summary>
  6400. /// 合并
  6401. /// </summary>
  6402. /// <param name="Identification"></param>
  6403. /// <param name="LotNo"></param>
  6404. /// <param name="User"></param>
  6405. /// <param name="WorkPoint"></param>
  6406. /// <param name="TransType"></param>
  6407. /// <param name="BusinessCode"></param>
  6408. /// <param name="cmd"></param>
  6409. public static void WareHouseLotInfoMerge(string Identification, string LotNo, string CurrentLotNo, string Quantity, string User, string WorkPoint, string TransType,
  6410. string BusinessCode, SqlCommand cmd, Dictionary<string, string> language)
  6411. {
  6412. try
  6413. {
  6414. ///更新目标条码库存
  6415. string sql = @"IF NOT EXISTS(SELECT a.LotNo FROM ICSInventoryLot a
  6416. INNER JOIN ICSInventoryLot b ON b.LotNo='{3}' AND a.InvCode=b.InvCode AND a.WorkPoint=b.WorkPoint
  6417. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}')
  6418. BEGIN
  6419. RAISERROR('" + language.GetNameByCode("WMSAPIInfo170") + @"',16,1);
  6420. RETURN
  6421. END
  6422. IF NOT EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}')
  6423. BEGIN
  6424. RAISERROR('" + language.GetNameByCode("WMSAPIInfo171") + @"',16,1);
  6425. RETURN
  6426. END
  6427. IF EXISTS(
  6428. SELECT * FROM ICSWareHouseLotInfo a
  6429. INNER JOIN ICSInventoryLot c on a.LotNo=c.LotNo and a.WorkPoint=c.WorkPoint
  6430. INNER JOIN ICSInventory d on c.invcode=d.invcode and c.WorkPoint=d.WorkPoint
  6431. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' and d.BatchEnable='1'
  6432. )
  6433. BEGIN
  6434. IF NOT EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a
  6435. INNER JOIN ICSWareHouseLotInfo b ON b.LotNo='{3}' AND a.WarehouseCode=b.WarehouseCode AND a.WorkPoint=b.WorkPoint
  6436. INNER JOIN ICSInventoryLot c on a.LotNo=c.LotNo and a.WorkPoint=c.WorkPoint
  6437. INNER JOIN ICSInventoryLot d on b.LotNo=d.LotNo and b.WorkPoint=d.WorkPoint
  6438. INNER JOIN ICSExtension e on c.ExtensionID=e.ID and c.WorkPoint=e.WorkPoint
  6439. INNER JOIN ICSExtension f on d.ExtensionID=f.id and d.WorkPoint=f.WorkPoint
  6440. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' and e.ID=f.ID)
  6441. BEGIN
  6442. RAISERROR('/',16,1);
  6443. RETURN
  6444. END
  6445. END
  6446. IF NOT EXISTS(
  6447. SELECT * FROM ICSWareHouseLotInfo a
  6448. INNER JOIN ICSInventoryLot c on a.LotNo=c.LotNo and a.WorkPoint=c.WorkPoint
  6449. INNER JOIN ICSInventory d on c.invcode=d.invcode and c.WorkPoint=d.WorkPoint
  6450. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' and d.BatchEnable='1'
  6451. )
  6452. BEGIN
  6453. IF NOT EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a
  6454. INNER JOIN ICSWareHouseLotInfo b ON b.LotNo='{3}' AND a.WarehouseCode=b.WarehouseCode AND a.WorkPoint=b.WorkPoint
  6455. INNER JOIN ICSInventoryLot c on a.LotNo=c.LotNo and a.WorkPoint=c.WorkPoint
  6456. INNER JOIN ICSInventoryLot d on b.LotNo=d.LotNo and b.WorkPoint=d.WorkPoint
  6457. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}')
  6458. BEGIN
  6459. RAISERROR('/',16,1);
  6460. RETURN
  6461. END
  6462. END
  6463. UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)+'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  6464. UPDATE ICSInventoryLot SET Amount=(ISNULL(Amount,0)+(select Amount from
  6465. ICSInventoryLot where LotNo='{3}' AND WorkPoint='{1}')) WHERE LotNo='{0}' AND WorkPoint='{1}'
  6466. ";
  6467. sql = string.Format(sql, LotNo, WorkPoint, Quantity, CurrentLotNo);
  6468. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  6469. {
  6470. throw new Exception(language.GetNameByCode("WMSAPIInfo169"));//"目标条码库存更新失败!");
  6471. }
  6472. ///更新原条码库存
  6473. sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  6474. UPDATE ICSInventoryLot SET Amount=(ISNULL(Amount,0)-(select Amount from
  6475. ICSInventoryLot where LotNo='{0}' AND WorkPoint='{1}')) WHERE LotNo='{0}' AND WorkPoint='{1}'
  6476. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity<0)
  6477. BEGIN
  6478. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  6479. RETURN
  6480. END";
  6481. sql = string.Format(sql, CurrentLotNo, WorkPoint, Quantity);
  6482. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  6483. {
  6484. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  6485. }
  6486. ///添加日志
  6487. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  6488. BEGIN
  6489. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  6490. RETURN
  6491. END
  6492. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  6493. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  6494. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  6495. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  6496. MTIME,WorkPoint,EATTRIBUTE1)
  6497. SELECT NEWID(),'{3}',b.TransCode,b.TransSequence,a.LotNo ,a.InvCode ,
  6498. '','',c.WarehouseCode,c.LocationCode,c.Quantity,
  6499. '','0','{4}','{5}','0','',
  6500. '','','',f.F_Account ,f.F_RealName ,
  6501. SYSDATETIME() ,a.WorkPoint ,''
  6502. FROM ICSInventoryLot a
  6503. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  6504. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  6505. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  6506. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  6507. ";
  6508. sql = string.Format(sql, CurrentLotNo, WorkPoint, User, Identification, TransType, BusinessCode);
  6509. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  6510. {
  6511. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  6512. }
  6513. }
  6514. catch (Exception)
  6515. {
  6516. throw;
  6517. }
  6518. }
  6519. /// <summary>
  6520. /// 拆分
  6521. /// </summary>
  6522. /// <param name="Identification"></param>
  6523. /// <param name="LotNo"></param>
  6524. /// <param name="User"></param>
  6525. /// <param name="WorkPoint"></param>
  6526. /// <param name="TransType"></param>
  6527. /// <param name="BusinessCode"></param>
  6528. /// <param name="cmd"></param>
  6529. public static void WareHouseLotInfoSplit(string Identification, string LotNo, string CurrentLotNo, string Quantity, string User, string WorkPoint, string TransType,
  6530. string BusinessCode, SqlCommand cmd, Dictionary<string, string> language)
  6531. {
  6532. try
  6533. {
  6534. ///更新库存
  6535. string sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  6536. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity<0)
  6537. BEGIN
  6538. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  6539. RETURN
  6540. END";
  6541. sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  6542. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  6543. {
  6544. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  6545. }
  6546. #region 添加库存
  6547. //插入条码表
  6548. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  6549. BEGIN
  6550. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  6551. RETURN
  6552. END
  6553. IF EXISTS(SELECT a.LotNo FROM ICSInventoryLot a WHERE a.LotNo='{4}' AND a.WorkPoint='{1}')
  6554. BEGIN
  6555. RAISERROR('" + language.GetNameByCode("WMSAPIInfo172") + @"',16,1);
  6556. RETURN
  6557. END
  6558. INSERT INTO ICSInventoryLot(ID,LotNo,InvCode,ProductDate,ExpirationDate,Quantity,Amount,ExtensionID,Type,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1,EATTRIBUTE2,EATTRIBUTE3,EATTRIBUTE4,EATTRIBUTE5,EATTRIBUTE6,EATTRIBUTE7,EATTRIBUTE8,
  6559. EATTRIBUTE9,EATTRIBUTE10,EATTRIBUTE11,EATTRIBUTE12,EATTRIBUTE13,EATTRIBUTE14,EATTRIBUTE15,EATTRIBUTE16,EATTRIBUTE17,EATTRIBUTE18,EATTRIBUTE19,EATTRIBUTE20,
  6560. EATTRIBUTE21,EATTRIBUTE22,EATTRIBUTE23,EATTRIBUTE24,EATTRIBUTE25,EATTRIBUTE26,EATTRIBUTE27,EATTRIBUTE28,EATTRIBUTE29,EATTRIBUTE30)
  6561. 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,
  6562. a.EATTRIBUTE9,a.EATTRIBUTE10,a.EATTRIBUTE11,a.EATTRIBUTE12,a.EATTRIBUTE13,a.EATTRIBUTE14,a.EATTRIBUTE15,a.EATTRIBUTE16,a.EATTRIBUTE17,a.EATTRIBUTE18,a.EATTRIBUTE19,a.EATTRIBUTE20,
  6563. a.EATTRIBUTE21,a.EATTRIBUTE22,a.EATTRIBUTE23,a.EATTRIBUTE24,a.EATTRIBUTE25,a.EATTRIBUTE26,a.EATTRIBUTE27,a.EATTRIBUTE28,a.EATTRIBUTE29,a.EATTRIBUTE30
  6564. FROM ICSInventoryLot a
  6565. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  6566. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  6567. sql = string.Format(sql, LotNo, WorkPoint, User, Quantity, CurrentLotNo);
  6568. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  6569. {
  6570. throw new Exception(language.GetNameByCode("WMSAPIInfo173"));//"条码表写入失败!");
  6571. }
  6572. //插入条码单据表
  6573. sql = @"INSERT INTO ICSInventoryLotDetail(LotNo,TransCode,TransSequence,MUSER,MUSERName,MTIME,WorkPoint)
  6574. SELECT '{3}',b.TransCode,b.TransSequence,f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint
  6575. FROM ICSInventoryLot a
  6576. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  6577. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  6578. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  6579. sql = string.Format(sql, LotNo, WorkPoint, User, CurrentLotNo);
  6580. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  6581. {
  6582. throw new Exception(language.GetNameByCode("WMSAPIInfo174"));//"条码单据表写入失败!");
  6583. }
  6584. ///添加库存
  6585. sql = @"IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}')
  6586. BEGIN
  6587. RAISERROR('" + language.GetNameByCode("WMSAPIInfo164") + @"',16,1);
  6588. RETURN
  6589. END
  6590. INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1,freeze)
  6591. 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
  6592. FROM ICSInventoryLot a
  6593. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  6594. INNER JOIN ICSWareHouseLotInfo d ON a.EATTRIBUTE1=d.LotNo AND a.WorkPoint=d.WorkPoint
  6595. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  6596. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  6597. sql = string.Format(sql, CurrentLotNo, WorkPoint, User, Quantity);
  6598. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  6599. {
  6600. throw new Exception(language.GetNameByCode("WMSAPIInfo165"));
  6601. }
  6602. ///添加日志
  6603. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  6604. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  6605. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  6606. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  6607. MTIME,WorkPoint,EATTRIBUTE1)
  6608. SELECT NEWID(),'{3}',b.TransCode,b.TransSequence,a.LotNo ,a.InvCode ,
  6609. '','',c.WarehouseCode,c.LocationCode,c.Quantity,
  6610. '','0','{4}','{5}','0','',
  6611. '','','',f.F_Account ,f.F_RealName ,
  6612. SYSDATETIME() ,a.WorkPoint ,''
  6613. FROM ICSInventoryLot a
  6614. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  6615. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  6616. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  6617. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  6618. ";
  6619. sql = string.Format(sql, CurrentLotNo, WorkPoint, User, Identification, TransType, BusinessCode);
  6620. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  6621. {
  6622. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  6623. }
  6624. #endregion
  6625. }
  6626. catch (Exception)
  6627. {
  6628. throw;
  6629. }
  6630. }
  6631. /// <summary>
  6632. /// 拆分(奥美)
  6633. /// </summary>
  6634. /// <param name="Identification"></param>
  6635. /// <param name="LotNo"></param>
  6636. /// <param name="User"></param>
  6637. /// <param name="WorkPoint"></param>
  6638. /// <param name="TransType"></param>
  6639. /// <param name="BusinessCode"></param>
  6640. /// <param name="cmd"></param>
  6641. public static void AMWareHouseLotInfoSplit(string Identification, string LotNo, string CurrentLotNo, string Quantity, string User, string WorkPoint, string TransType,
  6642. string BusinessCode, SqlCommand cmd, Dictionary<string, string> language)
  6643. {
  6644. try
  6645. {
  6646. string amount = "";
  6647. //string sqql = @"select a.Amount FROM ICSInventoryLot a
  6648. // WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  6649. //sqql = string.Format(sqql, LotNo, WorkPoint);
  6650. //DataTable dtaa = DBHelper.SQlReturnData(sqql, cmd);
  6651. //amount = dtaa.Rows[0]["Amount"].ToString();
  6652. string cheksql = @"select d.EATTRIBUTE1 FROM ICSInventoryLot a
  6653. INNER JOIN ICSWareHouseLotInfo b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  6654. INNER JOIN ICSInventory d on a.InvCode=d.InvCode and a.WorkPoint=d.WorkPoint
  6655. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' and d.AmountEnable='1'";
  6656. cheksql = string.Format(cheksql, LotNo, WorkPoint);
  6657. DataTable dta = DBHelper.SQlReturnData(cheksql, cmd);
  6658. if (dta.Rows.Count > 0)
  6659. {
  6660. Quantity = (decimal.Parse(Quantity) * decimal.Parse(dta.Rows[0]["EATTRIBUTE1"].ToString())).ToString();
  6661. }
  6662. ///更新库存
  6663. string sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  6664. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity<0)
  6665. BEGIN
  6666. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  6667. RETURN
  6668. END";
  6669. sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  6670. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  6671. {
  6672. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  6673. }
  6674. #region 添加库存
  6675. //插入条码表
  6676. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  6677. BEGIN
  6678. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  6679. RETURN
  6680. END
  6681. IF EXISTS(SELECT a.LotNo FROM ICSInventoryLot a WHERE a.LotNo='{4}' AND a.WorkPoint='{1}')
  6682. BEGIN
  6683. RAISERROR('" + language.GetNameByCode("WMSAPIInfo172") + @"',16,1);
  6684. RETURN
  6685. END
  6686. INSERT INTO ICSInventoryLot(ID,LotNo,InvCode,ProductDate,ExpirationDate,Quantity,Amount,ExtensionID,Type,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  6687. 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
  6688. FROM ICSInventoryLot a
  6689. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  6690. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  6691. sql = string.Format(sql, LotNo, WorkPoint, User, Quantity, CurrentLotNo);
  6692. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  6693. {
  6694. throw new Exception(language.GetNameByCode("WMSAPIInfo173"));//"条码表写入失败!");
  6695. }
  6696. //插入条码单据表
  6697. sql = @"INSERT INTO ICSInventoryLotDetail(LotNo,TransCode,TransSequence,MUSER,MUSERName,MTIME,WorkPoint)
  6698. SELECT '{3}',b.TransCode,b.TransSequence,f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint
  6699. FROM ICSInventoryLot a
  6700. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  6701. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  6702. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  6703. sql = string.Format(sql, LotNo, WorkPoint, User, CurrentLotNo);
  6704. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  6705. {
  6706. throw new Exception(language.GetNameByCode("WMSAPIInfo174"));//"条码单据表写入失败!");
  6707. }
  6708. ///添加库存
  6709. sql = @"IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}')
  6710. BEGIN
  6711. RAISERROR('" + language.GetNameByCode("WMSAPIInfo164") + @"',16,1);
  6712. RETURN
  6713. END
  6714. INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  6715. SELECT NEWID(),a.LotNo ,d.WarehouseCode,d.LocationCode,a.InvCode ,'{3}',SYSDATETIME(),'0',f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint ,''
  6716. FROM ICSInventoryLot a
  6717. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  6718. INNER JOIN ICSWareHouseLotInfo d ON a.EATTRIBUTE1=d.LotNo AND a.WorkPoint=d.WorkPoint
  6719. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  6720. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  6721. sql = string.Format(sql, CurrentLotNo, WorkPoint, User, Quantity);
  6722. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  6723. {
  6724. throw new Exception(language.GetNameByCode("WMSAPIInfo165"));
  6725. }
  6726. ///添加日志
  6727. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  6728. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  6729. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  6730. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  6731. MTIME,WorkPoint,EATTRIBUTE1)
  6732. SELECT NEWID(),'{3}',b.TransCode,b.TransSequence,a.LotNo ,a.InvCode ,
  6733. '','',c.WarehouseCode,c.LocationCode,c.Quantity,
  6734. '','0','{4}','{5}','0','',
  6735. '','','',f.F_Account ,f.F_RealName ,
  6736. SYSDATETIME() ,a.WorkPoint ,''
  6737. FROM ICSInventoryLot a
  6738. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  6739. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  6740. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  6741. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  6742. ";
  6743. sql = string.Format(sql, CurrentLotNo, WorkPoint, User, Identification, TransType, BusinessCode);
  6744. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  6745. {
  6746. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  6747. }
  6748. #endregion
  6749. }
  6750. catch (Exception)
  6751. {
  6752. throw;
  6753. }
  6754. }
  6755. /// <summary>
  6756. /// 回写ERP ID
  6757. /// </summary>
  6758. /// <param name="TransType"></param>
  6759. /// <param name="SourceDetailID"></param>
  6760. /// <param name="Identification"></param>
  6761. /// <param name="ID"></param>
  6762. /// <param name="DetailID"></param>
  6763. /// <param name="Code"></param>
  6764. /// <param name="Sequence"></param>
  6765. /// <param name="cmd"></param>
  6766. 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)
  6767. {
  6768. string ERPupdate = string.Empty;
  6769. string NewERPupdate = string.Empty;
  6770. try
  6771. {
  6772. //采购入库
  6773. if (TransType == TransTypeEnum.PurchaseReceiveDoc.GetDescription())
  6774. {
  6775. ERPupdate = @"SELECT a.id
  6776. INTO #NewTempERP
  6777. FROM ICSWareHouseLotInfoLog a
  6778. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  6779. INNER JOIN ICSPurchaseOrder c ON b.TransCode=c.POCode AND b.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  6780. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  6781. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  6782. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  6783. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.ToWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  6784. WHERE c.PODetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  6785. 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, '') +
  6786. 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}'
  6787. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6788. where ID in (select id from #NewTempERP)
  6789. DROP TABLE #NewTempERP";
  6790. }
  6791. //客供料入库
  6792. else if (TransType == TransTypeEnum.PurchaseReceiveDoc.GetDescription())
  6793. {
  6794. ERPupdate = @"SELECT a.id
  6795. INTO #NewTempERP
  6796. FROM ICSWareHouseLotInfoLog a
  6797. INNER JOIN ICSInventoryLotDetailKG b ON a.LotNo=b.LotNo AND b.TransCode=a.TransCode AND b.TransSequence=a.TransSequence AND a.WorkPoint=b.WorkPoint
  6798. INNER JOIN ICSDeliveryNotice c ON b.TransCode=c.DNCode AND b.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  6799. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  6800. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  6801. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.ToWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  6802. WHERE c.PODetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  6803. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6804. where ID in (select id from #NewTempERP)
  6805. DROP TABLE #NewTempERP";
  6806. }
  6807. //审核的到货单
  6808. else if (TransType == TransTypeEnum.DeliveryNotice.GetDescription())
  6809. {
  6810. ERPupdate = @"SELECT a.id
  6811. INTO #NewTempERP
  6812. FROM ICSWareHouseLotInfoLog a
  6813. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  6814. INNER JOIN ICSDeliveryNotice c ON b.TransCode=c.DNCode AND b.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  6815. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  6816. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  6817. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  6818. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.ToWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  6819. WHERE c.DNDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  6820. 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, '') +
  6821. 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}'
  6822. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6823. where ID in (select id from #NewTempERP)
  6824. DROP TABLE #NewTempERP
  6825. ";
  6826. }
  6827. //采购拒收
  6828. else if (TransType == TransTypeEnum.PurchaseRejectDoc.GetDescription())
  6829. {
  6830. ERPupdate = @"SELECT a.id
  6831. INTO #NewTempERP
  6832. FROM ICSWareHouseLotInfoLog a
  6833. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  6834. INNER JOIN ICSDeliveryNotice c ON b.TransCode=c.DNCode AND b.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  6835. WHERE c.DNDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  6836. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6837. where ID in (select id from #NewTempERP)
  6838. DROP TABLE #NewTempERP
  6839. ";
  6840. }
  6841. //审核的委外到货单
  6842. else if (TransType == TransTypeEnum.ODeliveryNotice.GetDescription())
  6843. {
  6844. ERPupdate = @"SELECT a.id
  6845. INTO #NewTempERP
  6846. FROM ICSWareHouseLotInfoLog a
  6847. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  6848. INNER JOIN ICSODeliveryNotice c ON b.TransCode=c.ODNCode AND b.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  6849. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  6850. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  6851. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  6852. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.ToWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  6853. WHERE c.ODNDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  6854. 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, '') +
  6855. 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}'
  6856. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6857. where ID in (select id from #NewTempERP)
  6858. DROP TABLE #NewTempERP
  6859. ";
  6860. }
  6861. //委外拒收
  6862. else if (TransType == TransTypeEnum.OutsourcingRejectDoc.GetDescription())
  6863. {
  6864. ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6865. FROM ICSWareHouseLotInfoLog a
  6866. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  6867. INNER JOIN ICSODeliveryNotice c ON b.TransCode=c.ODNCode AND b.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  6868. ";
  6869. }
  6870. //采购退货
  6871. else if (TransType == TransTypeEnum.PurchaseReceiveDoctNegative.GetDescription())
  6872. {
  6873. ERPupdate = @"SELECT a.id
  6874. INTO #NewTempERP
  6875. FROM ICSWareHouseLotInfoLog a
  6876. INNER JOIN ICSDeliveryNotice c ON a.TransCode=c.DNCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  6877. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  6878. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  6879. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  6880. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.ToWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  6881. WHERE c.DNDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}' --AND c.DNType='2'
  6882. 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, '') +
  6883. 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}'
  6884. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6885. where ID in (select id from #NewTempERP)
  6886. DROP TABLE #NewTempERP
  6887. ";
  6888. }
  6889. //委外发料
  6890. else if (TransType == TransTypeEnum.OutsourcingIssueDoc.GetDescription())
  6891. {
  6892. ERPupdate = @"SELECT a.id
  6893. INTO #NewTempERP
  6894. FROM ICSWareHouseLotInfoLog a
  6895. INNER JOIN ICSOutsourcingOrder y ON a.TransCode=y.OOCode AND a.WorkPoint=y.WorkPoint
  6896. INNER JOIN ICSOOPick x ON x.OODetailID=y.OODetailID AND a.TransSequence=y.Sequence+'~'+x.Sequence AND x.WorkPoint=y.WorkPoint
  6897. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  6898. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  6899. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  6900. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  6901. WHERE x.PickID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  6902. 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, '') +
  6903. 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}'
  6904. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6905. where ID in (select id from #NewTempERP)
  6906. DROP TABLE #NewTempERP
  6907. ";
  6908. }
  6909. //委外退料
  6910. else if (TransType == TransTypeEnum.ICSOutsourcingIssueDoNegative.GetDescription()
  6911. || TransType == TransTypeEnum.ICSOutsourcingIssueDoNegativeApply.GetDescription()
  6912. || TransType == TransTypeEnum.ICSOutsourcingIssueDoNegativeIssue.GetDescription())
  6913. {
  6914. ERPupdate = @"--根据退料单退料
  6915. UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6916. FROM ICSWareHouseLotInfoLog a
  6917. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  6918. INNER JOIN ICSOApplyNegDetail c ON b.TransCode=c.OApplyNegCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  6919. INNER JOIN ICSOApplyNeg d ON c.OApplyNegCode=d.OApplyNegCode AND c.WorkPoint=d.WorkPoint
  6920. Left JOIN ICSOIssue m ON (CASE WHEN d.Type='3' THEN c.SourceDetailID ELSE 0 END)=m.IssueDetailID AND c.WorkPoint=m.WorkPoint
  6921. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  6922. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  6923. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  6924. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  6925. WHERE ISNULL(m.ApplyDetailID,ISNULL(m.PickID, c.SourceDetailID))='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  6926. 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, '') +
  6927. 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}'
  6928. --退-
  6929. UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6930. FROM ICSWareHouseLotInfoLog a
  6931. INNER JOIN ICSWareHouseLotInfoLog b ON a.LogID=b.ID AND a.WorkPoint=b.WorkPoint
  6932. INNER JOIN ICSOutsourcingOrder y ON b.TransCode=y.OOCode AND b.WorkPoint=y.WorkPoint
  6933. INNER JOIN ICSOOPick x ON x.OODetailID=y.OODetailID AND x.WorkPoint=y.WorkPoint AND b.TransSequence = y.Sequence + '~' + x.Sequence
  6934. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  6935. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  6936. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  6937. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  6938. WHERE x.PickID='{0}' AND a.Identification='{1}' AND a.ERPUpload='0' AND a.BusinessCode ='{7}'
  6939. 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, '') +
  6940. 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}'
  6941. --退-
  6942. UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6943. FROM ICSWareHouseLotInfoLog a
  6944. INNER JOIN ICSWareHouseLotInfoLog b ON a.LogID=b.ID AND a.WorkPoint=b.WorkPoint
  6945. INNER JOIN ICSOApply z ON b.TransCode=z.ApplyCode AND b.TransSequence=z.Sequence AND b.WorkPoint=z.WorkPoint
  6946. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  6947. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  6948. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  6949. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  6950. WHERE z.ApplyDetailID='{0}' AND a.Identification='{1}' AND a.ERPUpload='0' AND a.BusinessCode ='{7}'
  6951. 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, '') +
  6952. 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}'
  6953. --退-
  6954. UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6955. FROM ICSWareHouseLotInfoLog a
  6956. INNER JOIN ICSWareHouseLotInfoLog b ON a.LogID=b.ID AND a.WorkPoint=b.WorkPoint
  6957. INNER JOIN ICSOIssue m ON b.TransCode=m.IssueCode AND b.TransSequence=m.Sequence AND b.WorkPoint=m.WorkPoint
  6958. LEFT JOIN ICSOOPick x ON m.PickID=x.PickID AND m.WorkPoint=x.WorkPoint
  6959. LEFT JOIN ICSOutsourcingOrder y ON x.OODetailID=y.OODetailID AND x.WorkPoint=y.WorkPoint
  6960. LEFT JOIN ICSOApply z ON m.ApplyDetailID=z.ApplyDetailID AND m.WorkPoint=z.WorkPoint
  6961. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  6962. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  6963. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  6964. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  6965. WHERE ISNULL(m.ApplyDetailID, m.PickID)='{0}' AND a.Identification='{1}' AND a.ERPUpload='0' AND a.BusinessCode ='{7}'
  6966. 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, '') +
  6967. 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}'
  6968. ";
  6969. }
  6970. //委外入库
  6971. else if (TransType == TransTypeEnum.OutsourcingReceiveDoc.GetDescription())
  6972. {
  6973. ERPupdate = @"SELECT a.id
  6974. INTO #NewTempERP
  6975. FROM ICSWareHouseLotInfoLog a
  6976. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  6977. INNER JOIN ICSOutsourcingOrder c ON b.TransCode=c.OOCode AND b.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  6978. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  6979. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  6980. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  6981. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.ToWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  6982. WHERE c.OODetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  6983. --ISNULL(a.ToWarehouseCode, '') +
  6984. 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, '') +
  6985. 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}'
  6986. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  6987. where ID in (select id from #NewTempERP)
  6988. DROP TABLE #NewTempERP";
  6989. }
  6990. //委外退货
  6991. else if (TransType == TransTypeEnum.OutsourcingReturnBack.GetDescription())
  6992. {
  6993. ERPupdate = @"SELECT a.id
  6994. INTO #NewTempERP
  6995. FROM ICSWareHouseLotInfoLog a
  6996. INNER JOIN ICSODeliveryNotice c ON a.TransCode=c.ODNCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  6997. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  6998. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  6999. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  7000. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  7001. WHERE c.ODNDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'--AND c.ODNType='2'
  7002. 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, '') +
  7003. 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}'
  7004. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  7005. where ID in (select id from #NewTempERP)
  7006. DROP TABLE #NewTempERP
  7007. ";
  7008. }
  7009. //生产发料
  7010. else if (TransType == TransTypeEnum.MOIssueDoc.GetDescription())
  7011. {
  7012. //ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  7013. // FROM ICSWareHouseLotInfoLog a
  7014. // INNER JOIN ICSMO y ON a.TransCode=y.MOCode AND a.WorkPoint=y.WorkPoint
  7015. // INNER JOIN ICSMOPick x ON x.MODetailID=y.MODetailID AND a.TransSequence=y.Sequence+'~'+x.Sequence AND x.WorkPoint=y.WorkPoint
  7016. // INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  7017. // INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  7018. // INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  7019. // LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  7020. // WHERE x.PickID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  7021. // 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, '') +
  7022. // 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}'
  7023. // ";
  7024. ERPupdate = @"SELECT a.id
  7025. INTO #NewTempERP
  7026. FROM ICSWareHouseLotInfoLog a
  7027. INNER JOIN ICSMO y ON a.TransCode=y.MOCode AND a.WorkPoint=y.WorkPoint
  7028. INNER JOIN ICSMOPick x ON x.MODetailID=y.MODetailID AND a.TransSequence=y.Sequence+'~'+x.Sequence AND x.WorkPoint=y.WorkPoint
  7029. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  7030. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  7031. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  7032. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  7033. WHERE x.PickID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  7034. 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, '') +
  7035. 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}'
  7036. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  7037. where ID in (select id from #NewTempERP)
  7038. DROP TABLE #NewTempERP";
  7039. }
  7040. //生产退料
  7041. else if (TransType == TransTypeEnum.MOIssueDocNegative.GetDescription()
  7042. || TransType == TransTypeEnum.MOIssueDocNegativeApply.GetDescription()
  7043. || TransType == TransTypeEnum.MOIssueDocNegativeIssue.GetDescription())
  7044. {
  7045. ERPupdate = @"--根据退料单退料
  7046. UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  7047. FROM ICSWareHouseLotInfoLog a
  7048. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  7049. INNER JOIN ICSMOApplyNegDetail c ON b.TransCode=c.ApplyNegCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  7050. INNER JOIN ICSMOApplyNeg d ON c.ApplyNegCode=d.ApplyNegCode AND c.WorkPoint=d.WorkPoint
  7051. left JOIN ICSMOIssue m ON (CASE WHEN d.Type='3' THEN c.SourceDetailID ELSE 0 END)=m.IssueDetailID AND c.WorkPoint=m.WorkPoint
  7052. WHERE ISNULL(m.ApplyDetailID, ISNULL(m.PickID, c.SourceDetailID))='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  7053. --退-
  7054. UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  7055. FROM ICSWareHouseLotInfoLog a
  7056. INNER JOIN ICSWareHouseLotInfoLog b ON a.LogID=b.ID AND a.WorkPoint=b.WorkPoint
  7057. INNER JOIN ICSMO y ON b.TransCode=y.MOCode AND b.WorkPoint=y.WorkPoint
  7058. INNER JOIN ICSMOPick x ON x.MODetailID=y.MODetailID AND x.WorkPoint=y.WorkPoint AND b.TransSequence = y.Sequence + '~' + x.Sequence
  7059. WHERE x.PickID='{0}' AND a.Identification='{1}' AND a.ERPUpload='0' AND a.BusinessCode ='{7}'
  7060. --退-
  7061. UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  7062. FROM ICSWareHouseLotInfoLog a
  7063. INNER JOIN ICSWareHouseLotInfoLog b ON a.LogID=b.ID AND a.WorkPoint=b.WorkPoint
  7064. INNER JOIN ICSMOApply z ON b.TransCode=z.ApplyCode AND b.TransSequence=z.Sequence AND b.WorkPoint=z.WorkPoint
  7065. WHERE z.ApplyDetailID='{0}' AND a.Identification='{1}' AND a.ERPUpload='0' AND a.BusinessCode ='{7}'
  7066. --退-
  7067. UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  7068. FROM ICSWareHouseLotInfoLog a
  7069. INNER JOIN ICSWareHouseLotInfoLog b ON a.LogID=b.ID AND a.WorkPoint=b.WorkPoint
  7070. INNER JOIN ICSMOIssue m ON b.TransCode=m.IssueCode AND b.TransSequence=m.Sequence AND b.WorkPoint=m.WorkPoint
  7071. LEFT JOIN ICSMOPick x ON m.PickID=x.PickID AND m.WorkPoint=x.WorkPoint
  7072. LEFT JOIN ICSMO y ON x.MODetailID=y.MODetailID AND x.WorkPoint=y.WorkPoint
  7073. LEFT JOIN ICSMOApply z ON m.ApplyDetailID=z.ApplyDetailID AND m.WorkPoint=z.WorkPoint
  7074. WHERE ISNULL(m.ApplyDetailID, m.PickID)='{0}' AND a.Identification='{1}' AND a.ERPUpload='0' AND a.BusinessCode ='{7}'
  7075. ";
  7076. }
  7077. //生产入库
  7078. else if (TransType == TransTypeEnum.ManufactureReceiveDoc.GetDescription())
  7079. {
  7080. //ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  7081. // FROM ICSWareHouseLotInfoLog a
  7082. // INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  7083. // INNER JOIN ICSMO c ON b.TransCode=c.MOCode AND b.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  7084. // INNER JOIN ICSExtension docext ON docext.ID=c.ExtensionID AND docext.WorkPoint=c.WorkPoint
  7085. // INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  7086. // INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  7087. // INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  7088. // LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  7089. // WHERE c.MODetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  7090. // and (ISNULL(a.fromwarehousecode, '')
  7091. // + CASE WHEN ISNULL(docext.ProjectCode,'')!='' Then ISNULL(ext.ProjectCode, '') ELSE '' END
  7092. // + CASE WHEN (invBat.BatchEnable IS NULL AND ISNULL(inv.BatchEnable, '0')='1') OR ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END
  7093. // + CASE WHEN ISNULL(docext.Version,'')!='' Then ISNULL(ext.Version, '') ELSE '' END
  7094. // + CASE WHEN ISNULL(docext.Brand,'')!='' THEN ISNULL(ext.Brand, '') ELSE '' END
  7095. // + CASE WHEN ISNULL(docext.cFree1,'')!='' THEN ISNULL(ext.cFree1, '') ELSE '' END
  7096. // + CASE WHEN ISNULL(docext.cFree2,'')!='' THEN ISNULL(ext.cFree2, '') ELSE '' END
  7097. // + CASE WHEN ISNULL(docext.cFree3,'')!='' THEN ISNULL(ext.cFree3, '') ELSE '' END
  7098. // + CASE WHEN ISNULL(docext.cFree4,'')!='' THEN ISNULL(ext.cFree4, '') ELSE '' END
  7099. // + CASE WHEN ISNULL(docext.cFree5,'')!='' THEN ISNULL(ext.cFree5, '') ELSE '' END
  7100. // + CASE WHEN ISNULL(docext.cFree6,'')!='' THEN ISNULL(ext.cFree6, '') ELSE '' END
  7101. // + CASE WHEN ISNULL(docext.cFree7,'')!='' THEN ISNULL(ext.cFree7, '') ELSE '' END
  7102. // + CASE WHEN ISNULL(docext.cFree8,'')!='' THEN ISNULL(ext.cFree8, '') ELSE '' END
  7103. // + CASE WHEN ISNULL(docext.cFree9,'')!='' THEN ISNULL(ext.cFree9, '') ELSE '' END
  7104. // + CASE WHEN ISNULL(docext.cFree10,'')!='' THEN ISNULL(ext.cFree10, '') ELSE '' END)='{6}'
  7105. //";
  7106. ERPupdate = @"SELECT a.id
  7107. INTO #NewTempERP
  7108. FROM ICSWareHouseLotInfoLog a
  7109. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  7110. INNER JOIN ICSMO c ON b.TransCode=c.MOCode AND b.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  7111. INNER JOIN ICSExtension docext ON docext.ID=c.ExtensionID AND docext.WorkPoint=c.WorkPoint
  7112. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  7113. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  7114. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  7115. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.ToWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  7116. WHERE c.MODetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  7117. and (ISNULL(a.ToWarehouseCode, '')
  7118. + CASE WHEN ISNULL(docext.ProjectCode,'')!='' Then ISNULL(ext.ProjectCode, '') ELSE '' END
  7119. + CASE WHEN (invBat.BatchEnable IS NULL AND ISNULL(inv.BatchEnable, '0')='1') OR ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END
  7120. + CASE WHEN ISNULL(docext.Version,'')!='' Then ISNULL(ext.Version, '') ELSE '' END
  7121. + CASE WHEN ISNULL(docext.Brand,'')!='' THEN ISNULL(ext.Brand, '') ELSE '' END
  7122. + CASE WHEN ISNULL(docext.cFree1,'')!='' THEN ISNULL(ext.cFree1, '') ELSE '' END
  7123. + CASE WHEN ISNULL(docext.cFree2,'')!='' THEN ISNULL(ext.cFree2, '') ELSE '' END
  7124. + CASE WHEN ISNULL(docext.cFree3,'')!='' THEN ISNULL(ext.cFree3, '') ELSE '' END
  7125. + CASE WHEN ISNULL(docext.cFree4,'')!='' THEN ISNULL(ext.cFree4, '') ELSE '' END
  7126. + CASE WHEN ISNULL(docext.cFree5,'')!='' THEN ISNULL(ext.cFree5, '') ELSE '' END
  7127. + CASE WHEN ISNULL(docext.cFree6,'')!='' THEN ISNULL(ext.cFree6, '') ELSE '' END
  7128. + CASE WHEN ISNULL(docext.cFree7,'')!='' THEN ISNULL(ext.cFree7, '') ELSE '' END
  7129. + CASE WHEN ISNULL(docext.cFree8,'')!='' THEN ISNULL(ext.cFree8, '') ELSE '' END
  7130. + CASE WHEN ISNULL(docext.cFree9,'')!='' THEN ISNULL(ext.cFree9, '') ELSE '' END
  7131. + CASE WHEN ISNULL(docext.cFree10,'')!='' THEN ISNULL(ext.cFree10, '') ELSE '' END)='{6}'
  7132. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  7133. where ID in (select id from #NewTempERP)
  7134. DROP TABLE #NewTempERP
  7135. ";
  7136. }
  7137. //开立的生产入库单
  7138. else if (TransType == TransTypeEnum.ManufactureReceive.GetDescription())
  7139. {
  7140. ERPupdate = @"SELECT a.id
  7141. INTO #NewTempERP
  7142. FROM ICSWareHouseLotInfoLog a
  7143. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  7144. INNER JOIN ICSManufactureReceive c ON b.TransCode=c.RCVCode AND b.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  7145. WHERE c.RCVID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND c.Type='1' AND a.BusinessCode ='{7}'
  7146. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  7147. where ID in (select id from #NewTempERP)
  7148. DROP TABLE #NewTempERP
  7149. ";
  7150. }
  7151. //销售出库
  7152. else if (TransType == TransTypeEnum.SalesShipmentDoc.GetDescription())
  7153. {
  7154. ERPupdate = @"SELECT a.id
  7155. INTO #NewTempERP
  7156. FROM ICSWareHouseLotInfoLog a
  7157. INNER JOIN ICSSDN c ON a.TransCode=c.SDNCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  7158. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  7159. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  7160. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  7161. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  7162. WHERE c.SDNDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND c.Type='1' AND a.BusinessCode ='{7}'
  7163. 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, '') +
  7164. 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}'
  7165. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  7166. where ID in (select id from #NewTempERP)
  7167. DROP TABLE #NewTempERP
  7168. ";
  7169. }
  7170. //销售退货
  7171. else if (TransType == TransTypeEnum.SalesShipmentDocNegative.GetDescription())
  7172. {
  7173. ERPupdate = @"SELECT a.id
  7174. INTO #NewTempERP
  7175. FROM ICSWareHouseLotInfoLog a
  7176. INNER JOIN ICSSDN c ON a.TransCode=c.SDNCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  7177. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  7178. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  7179. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  7180. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.ToWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  7181. WHERE c.SDNDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND c.Type='2' AND a.BusinessCode ='{7}'
  7182. 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, '') +
  7183. 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}'
  7184. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  7185. where ID in (select id from #NewTempERP)
  7186. DROP TABLE #NewTempERP";
  7187. }
  7188. //返工工单
  7189. else if (TransType == TransTypeEnum.ReWorkReceiveMo.GetDescription())
  7190. {
  7191. ERPupdate = @"SELECT a.id
  7192. INTO #NewTempERP
  7193. FROM ICSWareHouseLotInfoLog a
  7194. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  7195. INNER JOIN ICSMO c ON b.TransCode=c.MOCode AND b.WorkPoint=c.WorkPoint
  7196. INNER JOIN ICSMOPick d ON d.MODetailID=c.MODetailID AND d.WorkPoint=c.WorkPoint and b.TransSequence=c.Sequence+'-'+d.Sequence
  7197. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  7198. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  7199. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  7200. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  7201. WHERE d.PickID='{3}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  7202. 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, '') +
  7203. 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}'
  7204. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  7205. where ID in (select id from #NewTempERP)
  7206. DROP TABLE #NewTempERP
  7207. ";
  7208. }
  7209. //一步调拨
  7210. else if (TransType == TransTypeEnum.OneStepTransferDocIn.GetDescription())
  7211. {
  7212. ERPupdate = @"SELECT a.id
  7213. INTO #NewTempERP
  7214. FROM ICSWareHouseLotInfoLog a
  7215. INNER JOIN ICSTransfer c ON a.TransCode=c.TransferNO AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  7216. WHERE c.TransferID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND c.Type='1' AND a.BusinessCode ='{7}'
  7217. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  7218. where ID in (select id from #NewTempERP)
  7219. DROP TABLE #NewTempERP
  7220. ";
  7221. }
  7222. //调拨
  7223. else if (TransType == TransTypeEnum.OneStepTransferDocIn.GetDescription())
  7224. {
  7225. ERPupdate = @"SELECT a.id
  7226. INTO #NewTempERP
  7227. FROM ICSWareHouseLotInfoLog a
  7228. INNER JOIN ICSTransfer c ON a.TransCode=c.TransferNO AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  7229. WHERE c.TransferID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND c.Type='1' AND a.BusinessCode ='{7}'
  7230. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  7231. where ID in (select id from #NewTempERP)
  7232. DROP TABLE #NewTempERP
  7233. ";
  7234. }
  7235. //无源头调拨
  7236. else if (TransType == TransTypeEnum.StepNoTransferDocIn.GetDescription())
  7237. {
  7238. ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  7239. FROM ICSWareHouseLotInfoLog a
  7240. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  7241. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  7242. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  7243. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  7244. WHERE a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode='70'
  7245. 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, '') +
  7246. 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}'
  7247. ";
  7248. }
  7249. //两步调出
  7250. else if (TransType == TransTypeEnum.TwoStepTransferDocOut.GetDescription())
  7251. {
  7252. ERPupdate = @"SELECT a.id
  7253. INTO #NewTempERP
  7254. FROM ICSWareHouseLotInfoLog a
  7255. INNER JOIN ICSOtherOut c ON a.TransCode=c.OutCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  7256. INNER JOIN ICSTransfer d ON c.TransferDetailID=d.TransferDetailID AND c.WorkPoint=d.WorkPoint
  7257. WHERE c.OutID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  7258. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  7259. where ID in (select id from #NewTempERP)
  7260. DROP TABLE #NewTempERP
  7261. ";
  7262. }
  7263. //两步调入
  7264. else if (TransType == TransTypeEnum.TwoStepTransferDocIn.GetDescription())
  7265. {
  7266. ERPupdate = @"SELECT a.id
  7267. INTO #NewTempERP
  7268. FROM ICSWareHouseLotInfoLog a
  7269. INNER JOIN ICSOtherIn b ON a.TransCode=b.InCode AND a.TransSequence=b.Sequence AND a.WorkPoint=b.WorkPoint
  7270. INNER JOIN ICSTransfer c ON b.TransferDetailID=c.TransferDetailID AND b.WorkPoint=c.WorkPoint
  7271. WHERE b.InID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  7272. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  7273. where ID in (select id from #NewTempERP)
  7274. DROP TABLE #NewTempERP
  7275. ";
  7276. }
  7277. //销售退货-原条码
  7278. else if (TransType == TransTypeEnum.SalesReturnBack.GetDescription())
  7279. {
  7280. ERPupdate = @"SELECT a.id
  7281. INTO #NewTempERP
  7282. FROM ICSWareHouseLotInfoLog a
  7283. INNER JOIN ICSSDN c ON a.TransCode=c.SDNCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  7284. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  7285. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  7286. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  7287. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.ToWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  7288. WHERE c.SDNDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND c.Type='2' AND a.BusinessCode ='{7}'
  7289. 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, '') +
  7290. 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}'
  7291. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  7292. where ID in (select id from #NewTempERP)
  7293. DROP TABLE #NewTempERP";
  7294. }
  7295. //其他出库
  7296. else if (TransType == TransTypeEnum.OtherOutDoc.GetDescription())
  7297. {
  7298. ERPupdate = @"SELECT a.id
  7299. INTO #NewTempERP
  7300. FROM ICSWareHouseLotInfoLog a
  7301. INNER JOIN ICSOtherOut c ON a.TransCode=c.OutCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  7302. WHERE c.OutID='{0}' AND a.Identification='{1}' AND a.ERPUpload='0' AND a.BusinessCode ='{7}'
  7303. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  7304. where ID in (select id from #NewTempERP)
  7305. DROP TABLE #NewTempERP
  7306. ";
  7307. }
  7308. //其他入库
  7309. else if (TransType == TransTypeEnum.OtherInDoc.GetDescription())
  7310. {
  7311. ERPupdate = @"SELECT a.id
  7312. INTO #NewTempERP
  7313. FROM ICSWareHouseLotInfoLog a
  7314. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  7315. INNER JOIN ICSOtherIn c ON b.TransCode=c.InCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  7316. WHERE c.InID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  7317. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  7318. where ID in (select id from #NewTempERP)
  7319. DROP TABLE #NewTempERP
  7320. ";
  7321. }
  7322. //采购入库-入库单
  7323. else if (TransType == TransTypeEnum.PurchaseReceiveRevDoc.GetDescription())
  7324. {
  7325. ERPupdate = @"SELECT a.id
  7326. INTO #NewTempERP
  7327. FROM ICSWareHouseLotInfoLog a
  7328. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  7329. INNER JOIN ICSPurchaseReceive c ON b.TransCode=c.RcvCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  7330. WHERE c.RcvID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  7331. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  7332. where ID in (select id from #NewTempERP)
  7333. DROP TABLE #NewTempERP
  7334. ";
  7335. }
  7336. //委外入库-入库单
  7337. else if (TransType == TransTypeEnum.OutsourcingReceiveRevDoc.GetDescription())
  7338. {
  7339. ERPupdate = @"SELECT a.id
  7340. INTO #NewTempERP
  7341. FROM ICSWareHouseLotInfoLog a
  7342. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  7343. INNER JOIN ICSOutsourcingReceive c ON b.TransCode=c.RcvCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  7344. WHERE c.RcvID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  7345. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  7346. where ID in (select id from #NewTempERP)
  7347. DROP TABLE #NewTempERP
  7348. ";
  7349. }
  7350. //拆卸单
  7351. else if (TransType == TransTypeEnum.DisassemblyDoc.GetDescription())
  7352. {
  7353. ERPupdate = @"UPDATE d set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  7354. FROM ICSWareHouseLotInfoLog a
  7355. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  7356. INNER JOIN ICSDisassemblyDoc c ON b.TransCode=c.DABDOCCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  7357. INNER JOIN ICSWareHouseLotInfoLog d ON b.TransCode=d.TransCode AND d.TransSequence='1' AND b.WorkPoint=d.WorkPoint
  7358. WHERE c.DABDOCID='{0}' AND a.Identification='{1}' AND d.ERPUpload='0' AND a.BusinessCode ='{7}'
  7359. UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  7360. FROM ICSWareHouseLotInfoLog a
  7361. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  7362. INNER JOIN ICSDisassemblyDoc c ON b.TransCode=c.DABDOCCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  7363. WHERE c.DABDOCID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND c.DABDOCType='2' AND a.BusinessCode ='{7}'
  7364. ";
  7365. }
  7366. //领料申请单
  7367. else if (TransType == TransTypeEnum.MOApply.GetDescription())
  7368. {
  7369. //ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  7370. // FROM ICSWareHouseLotInfoLog a
  7371. // INNER JOIN ICSMOApply c ON a.TransCode=c.ApplyCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  7372. // INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  7373. // INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  7374. // INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  7375. // LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  7376. // WHERE c.ApplyDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  7377. // 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, '') +
  7378. // 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}'
  7379. // ";
  7380. ERPupdate = @"SELECT a.id
  7381. INTO #NewTempERP
  7382. FROM ICSWareHouseLotInfoLog a
  7383. INNER JOIN ICSMOApply c ON a.TransCode=c.ApplyCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  7384. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  7385. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  7386. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  7387. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  7388. WHERE c.ApplyDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  7389. 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, '') +
  7390. 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}'
  7391. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  7392. where ID in (select id from #NewTempERP)
  7393. DROP TABLE #NewTempERP
  7394. ";
  7395. }
  7396. //补料申请单
  7397. else if (TransType == TransTypeEnum.MOReplenishment.GetDescription())
  7398. {
  7399. //ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  7400. // FROM ICSWareHouseLotInfoLog a
  7401. // INNER JOIN ICSMOApply c ON a.TransCode=c.ApplyCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  7402. // INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  7403. // INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  7404. // INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  7405. // LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  7406. // WHERE c.ApplyDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  7407. // 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, '') +
  7408. // 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}'
  7409. // ";
  7410. ERPupdate = @"SELECT a.id
  7411. INTO #NewTempERP
  7412. FROM ICSWareHouseLotInfoLog a
  7413. INNER JOIN ICSMOReplenishment c ON a.TransCode=c.ReplenishmentCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  7414. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  7415. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  7416. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  7417. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  7418. WHERE c.ReplenishmentDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  7419. 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, '') +
  7420. 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}'
  7421. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  7422. where ID in (select id from #NewTempERP)
  7423. DROP TABLE #NewTempERP
  7424. ";
  7425. }
  7426. //委外领料申请单
  7427. else if (TransType == TransTypeEnum.OOApply.GetDescription())
  7428. {
  7429. //ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  7430. // FROM ICSWareHouseLotInfoLog a
  7431. // INNER JOIN ICSOApply c ON a.TransCode=c.ApplyCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  7432. // INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  7433. // INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  7434. // INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  7435. // LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  7436. // WHERE c.ApplyDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  7437. // 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, '') +
  7438. // 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}'
  7439. // ";
  7440. ERPupdate = @"SELECT a.id
  7441. INTO #NewTempERP
  7442. FROM ICSWareHouseLotInfoLog a
  7443. INNER JOIN ICSOApply c ON a.TransCode=c.ApplyCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  7444. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  7445. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  7446. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  7447. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  7448. WHERE c.ApplyDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  7449. 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, '') +
  7450. 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}'
  7451. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  7452. where ID in (select id from #NewTempERP)
  7453. DROP TABLE #NewTempERP
  7454. ";
  7455. }
  7456. //开立材料出库
  7457. else if (TransType == TransTypeEnum.MOIssue.GetDescription())
  7458. {
  7459. ERPupdate = @"SELECT a.id
  7460. INTO #NewTempERP
  7461. FROM ICSWareHouseLotInfoLog a
  7462. INNER JOIN ICSMOIssue c ON a.TransCode=c.IssueCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  7463. WHERE c.IssueID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  7464. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  7465. where ID in (select id from #NewTempERP)
  7466. DROP TABLE #NewTempERP
  7467. ";
  7468. }
  7469. //开立委外材料出库
  7470. else if (TransType == TransTypeEnum.OOIssue.GetDescription())
  7471. {
  7472. ERPupdate = @"SELECT a.id
  7473. INTO #NewTempERP
  7474. FROM ICSWareHouseLotInfoLog a
  7475. INNER JOIN ICSMOIssue c ON a.TransCode=c.IssueCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  7476. WHERE c.IssueID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  7477. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  7478. where ID in (select id from #NewTempERP)
  7479. DROP TABLE #NewTempERP
  7480. ";
  7481. }
  7482. //开立红字入库单
  7483. else if (TransType == TransTypeEnum.PurchaseReceive.GetDescription())
  7484. {
  7485. ERPupdate = @"SELECT a.id
  7486. INTO #NewTempERP
  7487. FROM ICSWareHouseLotInfoLog a
  7488. INNER JOIN ICSPurchaseReceive c ON a.TransCode=c.RCVCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  7489. WHERE c.RCVID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND c.Type='2' AND a.BusinessCode ='{7}'
  7490. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  7491. where ID in (select id from #NewTempERP)
  7492. DROP TABLE #NewTempERP
  7493. ";
  7494. }
  7495. //开立委外红字入库单
  7496. else if (TransType == TransTypeEnum.OutsourcingReceiveDocNegative.GetDescription())
  7497. {
  7498. ERPupdate = @"SELECT a.id
  7499. INTO #NewTempERP
  7500. FROM ICSWareHouseLotInfoLog a
  7501. INNER JOIN ICSOutsourcingReceive c ON a.TransCode=c.RCVCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  7502. WHERE c.RCVID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND c.Type='2' AND a.BusinessCode ='{7}'
  7503. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  7504. where ID in (select id from #NewTempERP)
  7505. DROP TABLE #NewTempERP
  7506. ";
  7507. }
  7508. //借用
  7509. else if (TransType == TransTypeEnum.BrrowDoc.GetDescription())
  7510. {
  7511. ERPupdate = @"SELECT a.id
  7512. INTO #NewTempERP
  7513. FROM ICSWareHouseLotInfoLog a
  7514. INNER JOIN ICSBrrow c ON a.TransCode=c.BrrowCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  7515. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  7516. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  7517. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  7518. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  7519. WHERE c.BrrowDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  7520. 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, '') +
  7521. 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}'
  7522. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  7523. where ID in (select id from #NewTempERP)
  7524. DROP TABLE #NewTempERP";
  7525. }
  7526. //归还
  7527. else if (TransType == TransTypeEnum.ReturnDoc.GetDescription())
  7528. {
  7529. ERPupdate = @"SELECT a.id
  7530. INTO #NewTempERP
  7531. FROM ICSWareHouseLotInfoLog a
  7532. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  7533. INNER JOIN ICSReturn c ON b.TransCode=c.ReturnCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  7534. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  7535. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  7536. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  7537. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.ToWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  7538. WHERE c.ReturnDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  7539. 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, '') +
  7540. 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}'
  7541. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  7542. where ID in (select id from #NewTempERP)
  7543. DROP TABLE #NewTempERP";
  7544. }
  7545. //销售出库-出库单
  7546. else if (TransType == TransTypeEnum.SalesShipmentOutDoc.GetDescription())
  7547. {
  7548. ERPupdate = @"SELECT a.id
  7549. INTO #NewTempERP
  7550. FROM ICSWareHouseLotInfoLog a
  7551. INNER JOIN ICSSSD c ON a.TransCode=c.SSDCOde AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  7552. WHERE c.SSDID='{0}' AND a.Identification='{1}' AND a.ERPUpload='0' AND a.BusinessCode ='{7}'
  7553. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  7554. where ID in (select id from #NewTempERP)
  7555. DROP TABLE #NewTempERP
  7556. ";
  7557. }
  7558. ERPupdate = string.Format(ERPupdate, SourceDetailID, Identification, ID, DetailID, Code, Sequence, col, BusinessCode);
  7559. if (!DBHelper.ExecuteNonQuery(ERPupdate, cmd))
  7560. {
  7561. throw new Exception(TransType + language.GetNameByCode("WMSAPIInfo175"));//"回写日志失败!");
  7562. }
  7563. }
  7564. catch (Exception ex)
  7565. {
  7566. log.Debug(ex.ToString());
  7567. log.Debug(TransType + Environment.NewLine + ERPupdate);
  7568. }
  7569. }
  7570. /// <summary>
  7571. /// 倒冲时子件已领数量回写
  7572. /// </summary>
  7573. public static void DetailQTYUpdate()
  7574. {
  7575. }
  7576. /// <summary>
  7577. /// 生成条码
  7578. /// </summary>
  7579. /// <param name="LotNo"></param>
  7580. /// <param name="Quantity"></param>
  7581. /// <param name="TransCode"></param>
  7582. /// <param name="TransSequence"></param>
  7583. /// <param name="WorkPoint"></param>
  7584. /// <param name="Identification"></param>
  7585. /// <param name="User"></param>
  7586. /// <param name="InvCode"></param>
  7587. /// <param name="BusinessCode"></param>
  7588. /// <param name="ProjectCode"></param>
  7589. /// <param name="BatchCode"></param>
  7590. /// <param name="Version"></param>
  7591. /// <param name="Brand"></param>
  7592. /// <param name="cFree1"></param>
  7593. /// <param name="cFree2"></param>
  7594. /// <param name="cFree3"></param>
  7595. /// <param name="cFree4"></param>
  7596. /// <param name="cFree5"></param>
  7597. /// <param name="cFree6"></param>
  7598. /// <param name="cFree7"></param>
  7599. /// <param name="cFree8"></param>
  7600. /// <param name="cFree9"></param>
  7601. /// <param name="cFree10"></param>
  7602. /// <param name="cmd"></param>
  7603. /// <param name="language"></param>
  7604. public static void CreateLotNo(string LotNo, string Quantity, string TransCode, string TransSequence, string WorkPoint, string Identification, string User, string InvCode, string BusinessCode,
  7605. 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)
  7606. {
  7607. try
  7608. {
  7609. String EffectiveEnable = "";
  7610. String Colspan = "";
  7611. String IDD = "";
  7612. int EffectiveDays = 0;
  7613. String Time = "";
  7614. int EffectiveDayss = 0;
  7615. DateTime dtt;
  7616. DateTime now = DateTime.Now;
  7617. string sql = string.Empty;
  7618. //string sql = @"select EffectiveEnable,EffectiveDays from ICSInventory a
  7619. // Left Join ICSMO b ON a.InvCode=b.InvCode and a.WorkPoint = b.WorkPoint
  7620. // where b.MoCode='{0}' and b.WorkPoint='{1}'";
  7621. //sql = string.Format(sql, TransCode, WorkPoint);
  7622. //DataTable dt = DBHelper.SQlReturnData(sql, cmd);
  7623. //if (dt.Rows.Count == 0)
  7624. //{
  7625. // throw new Exception(language.GetNameByCode("WMSAPIInfo366"));
  7626. //}
  7627. //else
  7628. //{
  7629. // EffectiveEnable = dt.Rows[0]["EffectiveEnable"].ToString();
  7630. //EffectiveDays = Convert.ToInt32(dt.Rows[0]["EffectiveDays"]);
  7631. //}
  7632. //EffectiveDayss = Convert.ToInt32(EffectiveDays);
  7633. //if (!EffectiveEnable.Equals("False"))
  7634. //{
  7635. int year = now.Year;
  7636. int month = now.Month;
  7637. int day = now.Day;
  7638. int n = DateTime.DaysInMonth(year, month);
  7639. int k = day + EffectiveDays;
  7640. if (k > n)
  7641. {
  7642. day = EffectiveDays - (n - day);
  7643. month = month + 1;
  7644. if (month > 12)
  7645. {
  7646. month = 1;
  7647. year = year + 1;
  7648. }
  7649. }
  7650. else
  7651. {
  7652. day = day + EffectiveDays;
  7653. }
  7654. Time = year + "-" + month + "-" + day;
  7655. //}
  7656. //else
  7657. //{
  7658. // Time = "2999-12-31 00:00:00.000";
  7659. //}
  7660. dtt = Convert.ToDateTime(Time);
  7661. //检验自由项
  7662. Colspan = ProjectCode + "~" + BatchCode + "~" + Version
  7663. + "~" + Brand + "~" + cFree1
  7664. + "~" + cFree2 + "~" + cFree3 + "~" + cFree4
  7665. + "~" + cFree5 + "~" + cFree6 + "~" + cFree7
  7666. + "~" + cFree8 + "~" + cFree9 + "~" + cFree10;
  7667. sql = @"select ID,Colspan from ICSExtension a
  7668. where Colspan='{0}' and WorkPoint='{1}'";
  7669. sql = string.Format(sql, Colspan, WorkPoint);
  7670. DataTable dttt = DBHelper.SQlReturnData(sql, cmd);
  7671. if (dttt.Rows.Count == 0)
  7672. {
  7673. IDD = Guid.NewGuid().ToString();
  7674. sql = @"Insert into ICSExtension(ID, Colspan, ProjectCode, BatchCode, Version, Brand, cFree1, cFree2, cFree3, cFree4, cFree5, cFree6, cFree7, cFree8, cFree9, cFree10, MTIME, MUSER, MUSERName, WorkPoint)
  7675. 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}'";
  7676. sql = string.Format(sql, Colspan, ProjectCode, BatchCode, Version, Brand, cFree1, cFree2, cFree3, cFree4, cFree5, cFree6, cFree7, cFree8, cFree9, cFree10, User, WorkPoint, IDD);
  7677. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  7678. {
  7679. throw new Exception(language.GetNameByCode("WMSAPIInfo366"));
  7680. }
  7681. }
  7682. else
  7683. {
  7684. IDD = dttt.Rows[0]["ID"].ToString();
  7685. }
  7686. //存入条码表
  7687. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{4}')
  7688. BEGIN
  7689. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  7690. RETURN
  7691. END
  7692. INSERT INTO ICSInventoryLot(ID,LotNo,InvCode,ProductDate,ExpirationDate,
  7693. Quantity,Amount,ExtensionID,Type,PrintTimes,
  7694. LastPrintUser,LastPrintTime,MUSER,MUSERName,MTIME,
  7695. WorkPoint,EATTRIBUTE1)
  7696. SELECT TOP 1 NEWID(),'{0}','{8}',GETDATE(),'{6}',
  7697. '{1}','0','{7}','16',null,
  7698. null,null,'{2}' ,f.F_RealName ,GETDATE(),
  7699. '{4}' ,''
  7700. FROM Sys_SRM_User f
  7701. where f.F_Account='{2}' and f.F_Location='{4}'
  7702. ";
  7703. sql = string.Format(sql, LotNo, Quantity, User, TransCode, WorkPoint, TransSequence, dtt, IDD,InvCode);
  7704. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  7705. {
  7706. throw new Exception(language.GetNameByCode("WMSAPIInfo366"));
  7707. }
  7708. ///存入条码关联表
  7709. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{3}')
  7710. BEGIN
  7711. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  7712. RETURN
  7713. END
  7714. INSERT INTO ICSInventoryLotDetail(LotNo,TransCode,TransSequence,MUSER,MUSERName,MTIME,
  7715. WorkPoint,EATTRIBUTE1)
  7716. SELECT '{4}','{0}','{1}',f.F_Account ,f.F_RealName,GETDATE(),
  7717. a.WorkPoint,''
  7718. FROM ICSInventoryLot a
  7719. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  7720. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  7721. WHERE a.LotNo='{5}' AND a.WorkPoint='{3}'
  7722. ";
  7723. sql = string.Format(sql, TransCode, TransSequence, User, WorkPoint, LotNo, OLDLotNo);
  7724. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  7725. {
  7726. throw new Exception(language.GetNameByCode("WMSAPIInfo367"));
  7727. }
  7728. //存入库存表
  7729. sql = @"INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  7730. SELECT NEWID(),a.LotNo ,e.WarehouseCode,d.LocationCode,a.InvCode ,'0',SYSDATETIME(),'0',f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint ,''
  7731. FROM ICSInventoryLot a
  7732. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  7733. --INNER JOIN ICSOApplyNegDetail c ON b.TransCode=c.OApplyNegCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  7734. INNER JOIN ICSLocation d ON d.LocationCode='{4}' AND a.WorkPoint=d.WorkPoint
  7735. INNER JOIN ICSWarehouse e ON d.WHID=e.ID AND d.WorkPoint=e.WorkPoint
  7736. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  7737. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  7738. sql = string.Format(sql, LotNo, WorkPoint, User, Quantity, LocationCode);
  7739. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  7740. {
  7741. throw new Exception(language.GetNameByCode("WMSAPIInfo165"));
  7742. }
  7743. }
  7744. catch (Exception)
  7745. {
  7746. throw;
  7747. }
  7748. }
  7749. /// <summary>
  7750. /// 东辉日志表记录交接人EATTRIBUTE3
  7751. /// </summary>
  7752. /// <param name="TransType"></param>
  7753. /// <param name="BusinessCode"></param>
  7754. /// <param name="Heir"></param>
  7755. /// <param name="cmd"></param>
  7756. public static void WareHouseLotInfoLogUpdateHeir(string Identification, string BusinessCode, SqlCommand cmd, Dictionary<string, string> language,string Heir)
  7757. {
  7758. try
  7759. {
  7760. ///更新日志表
  7761. string sql = @"
  7762. UPDATE ICSWareHouseLotInfoLog SET EATTRIBUTE3='{2}' WHERE Identification='{0}' and BusinessCode ='{1}'
  7763. ";
  7764. sql = string.Format(sql, Identification, BusinessCode, Heir);
  7765. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  7766. {
  7767. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));//"库存表更新失败!");
  7768. }
  7769. }
  7770. catch (Exception)
  7771. {
  7772. throw;
  7773. }
  7774. }
  7775. //public void AutoWarehousingCreate()
  7776. //{
  7777. //}
  7778. }
  7779. }