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.

9104 lines
586 KiB

  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 WareHouseLotInfoUpAM(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. #region 正常入库
  2090. ///添加库存(原条码退回,更新库存;新条码直接入库)
  2091. //stirng locationcode = "";
  2092. string sql = string.Empty;
  2093. string locationcode = "";
  2094. string newlocationcode = "";
  2095. string amount = "";
  2096. //string sqql = @"select a.Amount FROM ICSInventoryLot a
  2097. // WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  2098. //sqql = string.Format(sqql, LotNo, WorkPoint);
  2099. //DataTable dtaa = DBHelper.SQlReturnData(sqql, cmd);
  2100. //amount = dtaa.Rows[0]["Amount"].ToString();
  2101. //string cheksql = @"select d.EATTRIBUTE1 FROM ICSInventoryLot a
  2102. // INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  2103. // INNER JOIN ICSInventory d on a.InvCode=d.InvCode and a.WorkPoint=d.WorkPoint
  2104. // WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' and d.AmountEnable='1'";
  2105. //cheksql = string.Format(cheksql, LotNo, WorkPoint);
  2106. //DataTable dta = DBHelper.SQlReturnData(cheksql, cmd);
  2107. //if (dta.Rows.Count > 0)
  2108. //{
  2109. // Quantity = (decimal.Parse(Quantity) * decimal.Parse(dta.Rows[0]["EATTRIBUTE1"].ToString())).ToString();
  2110. //}
  2111. if (BusinessCode != TransTypeEnum.SalesReturnBack.GetDescription<DBValue>())
  2112. {
  2113. if (string.IsNullOrWhiteSpace(LogID))
  2114. {
  2115. sql = @"IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}')
  2116. BEGIN
  2117. RAISERROR('" + language.GetNameByCode("WMSAPIInfo164") + @"',16,1);
  2118. RETURN
  2119. END ";
  2120. }
  2121. else
  2122. {
  2123. sql = @"SELECT LocationCode FROM ICSWareHouseLotInfo a WHERE LotNo='{0}' AND WorkPoint='{1}'";
  2124. sql = string.Format(sql, LotNo, WorkPoint);
  2125. DataTable dt = DBHelper.SQlReturnData(sql, cmd);
  2126. if (dt == null || dt.Rows.Count <= 0)
  2127. {
  2128. throw new Exception(string.Format(language.GetNameByCode("WMSAPIInfo171"), LotNo));
  2129. }
  2130. locationcode = dt.Rows[0]["LocationCode"].ToString();
  2131. }
  2132. }
  2133. if(BusinessCode == TransTypeEnum.MOIssueDocNegative.GetDescription<DBValue>())
  2134. {
  2135. sql = @"SELECT FromLocationCode FROM ICSWareHouseLotInfoLog a WHERE LotNo='{0}' AND WorkPoint='{1}' AND ID='{2}'";
  2136. sql = string.Format(sql, LotNo, WorkPoint,LogID);
  2137. DataTable dt = DBHelper.SQlReturnData(sql, cmd);
  2138. if (dt == null || dt.Rows.Count <= 0)
  2139. {
  2140. throw new Exception(string.Format(language.GetNameByCode("WMSAPIInfo171"), LotNo));
  2141. }
  2142. newlocationcode = dt.Rows[0]["FromLocationCode"].ToString();
  2143. sql += @" IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  2144. BEGIN
  2145. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  2146. RETURN
  2147. END
  2148. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}')
  2149. BEGIN
  2150. IF EXISTS(SELECT a.LotNO FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND a.Quantity=0)
  2151. BEGIN
  2152. UPDATE a SET a.Quantity=ISNULL(a.Quantity,0)+'{3}',WarehouseCode=e.WarehouseCode,LocationCode=d.LocationCode
  2153. From ICSWareHouseLotInfo a
  2154. INNER JOIN ICSLocation d ON d.LocationCode='{4}' AND a.WorkPoint=d.WorkPoint
  2155. INNER JOIN ICSWarehouse e ON d.WHID=e.ID AND d.WorkPoint=e.WorkPoint
  2156. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  2157. END
  2158. ELSE IF EXISTS(SELECT a.LotNO FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND a.LocationCode='{4}')
  2159. BEGIN
  2160. UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)+'{3}'
  2161. WHERE LotNo='{0}' AND WorkPoint='{1}'
  2162. END
  2163. ELSE IF('" + locationcode + @"' != '{4}')
  2164. BEGIN
  2165. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo395"), "{4}", locationcode) + @"', 16, 1);
  2166. RETURN
  2167. END
  2168. END
  2169. ELSE
  2170. BEGIN
  2171. IF EXISTS(SELECT il.InvCode FROM ICSInventoryLocation il
  2172. INNER JOIN ICSInventoryLot a ON a.InvCode=il.InvCode AND a.WorkPoint=il.WorkPoint
  2173. WHERE il.Enable='1' AND a.LotNo='{0}' AND a.WorkPoint='{1}')
  2174. BEGIN
  2175. IF NOT EXISTS(SELECT il.InvCode FROM ICSInventoryLocation il
  2176. INNER JOIN ICSInventoryLot a ON a.InvCode=il.InvCode AND a.WorkPoint=il.WorkPoint
  2177. WHERE il.Enable='1' AND a.LotNo='{0}' AND a.WorkPoint='{1}' AND il.LocationCode='{4}')
  2178. BEGIN
  2179. RAISERROR('" + language.GetNameByCode("WMSAPIInfo180") + @"',16,1);
  2180. RETURN
  2181. END
  2182. END
  2183. INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  2184. SELECT NEWID(),a.LotNo ,e.WarehouseCode,d.LocationCode,a.InvCode ,'{3}',SYSDATETIME(),'0',f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint ,''
  2185. FROM ICSInventoryLot a
  2186. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  2187. --INNER JOIN ICSOApplyNegDetail c ON b.TransCode=c.OApplyNegCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  2188. INNER JOIN ICSLocation d ON d.LocationCode='{4}' AND a.WorkPoint=d.WorkPoint
  2189. INNER JOIN ICSWarehouse e ON d.WHID=e.ID AND d.WorkPoint=e.WorkPoint
  2190. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  2191. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  2192. END";
  2193. sql = string.Format(sql, LotNo, WorkPoint, User, Quantity, newlocationcode);
  2194. }
  2195. else
  2196. {
  2197. sql += @" IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  2198. BEGIN
  2199. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  2200. RETURN
  2201. END
  2202. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}')
  2203. BEGIN
  2204. IF EXISTS(SELECT a.LotNO FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND a.Quantity=0)
  2205. BEGIN
  2206. UPDATE a SET a.Quantity=ISNULL(a.Quantity,0)+'{3}',WarehouseCode=e.WarehouseCode,LocationCode=d.LocationCode
  2207. From ICSWareHouseLotInfo a
  2208. INNER JOIN ICSLocation d ON d.LocationCode='{4}' AND a.WorkPoint=d.WorkPoint
  2209. INNER JOIN ICSWarehouse e ON d.WHID=e.ID AND d.WorkPoint=e.WorkPoint
  2210. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  2211. END
  2212. ELSE IF EXISTS(SELECT a.LotNO FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND a.LocationCode='{4}')
  2213. BEGIN
  2214. UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)+'{3}'
  2215. WHERE LotNo='{0}' AND WorkPoint='{1}'
  2216. END
  2217. ELSE IF('" + locationcode + @"' != '{4}')
  2218. BEGIN
  2219. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo395"), "{4}", locationcode) + @"', 16, 1);
  2220. RETURN
  2221. END
  2222. END
  2223. ELSE
  2224. BEGIN
  2225. IF EXISTS(SELECT il.InvCode FROM ICSInventoryLocation il
  2226. INNER JOIN ICSInventoryLot a ON a.InvCode=il.InvCode AND a.WorkPoint=il.WorkPoint
  2227. WHERE il.Enable='1' AND a.LotNo='{0}' AND a.WorkPoint='{1}')
  2228. BEGIN
  2229. IF NOT EXISTS(SELECT il.InvCode FROM ICSInventoryLocation il
  2230. INNER JOIN ICSInventoryLot a ON a.InvCode=il.InvCode AND a.WorkPoint=il.WorkPoint
  2231. WHERE il.Enable='1' AND a.LotNo='{0}' AND a.WorkPoint='{1}' AND il.LocationCode='{4}')
  2232. BEGIN
  2233. RAISERROR('" + language.GetNameByCode("WMSAPIInfo180") + @"',16,1);
  2234. RETURN
  2235. END
  2236. END
  2237. INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  2238. SELECT NEWID(),a.LotNo ,e.WarehouseCode,d.LocationCode,a.InvCode ,'{3}',SYSDATETIME(),'0',f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint ,''
  2239. FROM ICSInventoryLot a
  2240. --INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  2241. --INNER JOIN ICSOApplyNegDetail c ON b.TransCode=c.OApplyNegCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  2242. INNER JOIN ICSLocation d ON d.LocationCode='{4}' AND a.WorkPoint=d.WorkPoint
  2243. INNER JOIN ICSWarehouse e ON d.WHID=e.ID AND d.WorkPoint=e.WorkPoint
  2244. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  2245. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  2246. END";
  2247. sql = string.Format(sql, LotNo, WorkPoint, User, Quantity, LocationCode);
  2248. }
  2249. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2250. {
  2251. throw new Exception(language.GetNameByCode("WMSAPIInfo165"));
  2252. }
  2253. if (BusinessCode == TransTypeEnum.MOIssueDocNegative.GetDescription<DBValue>())
  2254. {
  2255. ///添加日志
  2256. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  2257. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  2258. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  2259. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  2260. MTIME,WorkPoint,EATTRIBUTE1,LogID)
  2261. SELECT NEWID(),'{3}','{8}','{9}',a.LotNo ,a.InvCode ,
  2262. '','',c.WarehouseCode,c.LocationCode,'{6}',
  2263. '','0','{4}','{5}','0','',
  2264. '','','',f.F_Account ,f.F_RealName ,
  2265. SYSDATETIME() ,a.WorkPoint ,'','{7}'
  2266. FROM ICSInventoryLot a
  2267. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  2268. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  2269. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  2270. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  2271. ";
  2272. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransType, BusinessCode, Quantity, LogID,TransCode,TransSequence);
  2273. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2274. {
  2275. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  2276. }
  2277. }
  2278. else if (BusinessCode == TransTypeEnum.MOStockINByProduct.GetDescription<DBValue>())
  2279. {
  2280. ///添加日志
  2281. sql = @"IF EXISTS(SELECT 1 FROM ICSInventoryLot lot WHERE lot.LotNo='{0}' AND lot.WorkPoint='{1}' AND lot.Type=19)
  2282. BEGIN
  2283. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  2284. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  2285. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  2286. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  2287. MTIME,WorkPoint,EATTRIBUTE1,LogID)
  2288. SELECT NEWID(),'{3}','','',a.LotNo ,a.InvCode ,
  2289. '','',c.WarehouseCode,c.LocationCode,'{6}',
  2290. '','0','{4}','{5}','0','',
  2291. '','','',f.F_Account ,f.F_RealName ,
  2292. SYSDATETIME() ,a.WorkPoint ,'','{7}'
  2293. FROM ICSInventoryLot a
  2294. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  2295. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  2296. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  2297. END
  2298. ELSE
  2299. BEGIN
  2300. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  2301. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  2302. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  2303. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  2304. MTIME,WorkPoint,EATTRIBUTE1,LogID)
  2305. SELECT NEWID(),'{3}',b.TransCode,b.TransSequence,a.LotNo ,a.InvCode ,
  2306. '','',c.WarehouseCode,c.LocationCode,'{6}',
  2307. '','0','{4}','{5}','0','',
  2308. '','','',f.F_Account ,f.F_RealName ,
  2309. SYSDATETIME() ,a.WorkPoint ,'','{7}'
  2310. FROM ICSInventoryLot a
  2311. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  2312. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  2313. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  2314. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  2315. END
  2316. ";
  2317. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransType, BusinessCode, Quantity, LogID);
  2318. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2319. {
  2320. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  2321. }
  2322. }
  2323. else if (BusinessCode == TransTypeEnum.OOStockINByProduct.GetDescription<DBValue>())
  2324. {
  2325. ///添加日志
  2326. sql = @"IF EXISTS(SELECT 1 FROM ICSInventoryLot lot WHERE lot.LotNo='{0}' AND lot.WorkPoint='{1}' AND lot.Type=19)
  2327. BEGIN
  2328. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  2329. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  2330. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  2331. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  2332. MTIME,WorkPoint,EATTRIBUTE1,LogID)
  2333. SELECT NEWID(),'{3}','','',a.LotNo ,a.InvCode ,
  2334. '','',c.WarehouseCode,c.LocationCode,'{6}',
  2335. '','0','{4}','{5}','0','',
  2336. '','','',f.F_Account ,f.F_RealName ,
  2337. SYSDATETIME() ,a.WorkPoint ,'','{7}'
  2338. FROM ICSInventoryLot a
  2339. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  2340. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  2341. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  2342. END
  2343. ELSE
  2344. BEGIN
  2345. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  2346. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  2347. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  2348. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  2349. MTIME,WorkPoint,EATTRIBUTE1,LogID)
  2350. SELECT NEWID(),'{3}',b.TransCode,b.TransSequence,a.LotNo ,a.InvCode ,
  2351. '','',c.WarehouseCode,c.LocationCode,'{6}',
  2352. '','0','{4}','{5}','0','',
  2353. '','','',f.F_Account ,f.F_RealName ,
  2354. SYSDATETIME() ,a.WorkPoint ,'','{7}'
  2355. FROM ICSInventoryLot a
  2356. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  2357. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  2358. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  2359. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  2360. END
  2361. ";
  2362. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransType, BusinessCode, Quantity, LogID);
  2363. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2364. {
  2365. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  2366. }
  2367. }
  2368. else
  2369. {
  2370. ///添加日志
  2371. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  2372. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  2373. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  2374. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  2375. MTIME,WorkPoint,EATTRIBUTE1,LogID)
  2376. SELECT NEWID(),'{3}',b.TransCode,b.TransSequence,a.LotNo ,a.InvCode ,
  2377. '','',c.WarehouseCode,c.LocationCode,'{6}',
  2378. '','0','{4}','{5}','0','',
  2379. '','','',f.F_Account ,f.F_RealName ,
  2380. SYSDATETIME() ,a.WorkPoint ,'','{7}'
  2381. FROM ICSInventoryLot a
  2382. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  2383. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  2384. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  2385. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  2386. ";
  2387. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransType, BusinessCode, Quantity, LogID);
  2388. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2389. {
  2390. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  2391. }
  2392. }
  2393. #endregion
  2394. #region 管控方式是"料品"时
  2395. ControlMode mode = ICSControlModeService.GetControlMode();
  2396. if (mode.itemCode.Equals("ControlMode02"))
  2397. {
  2398. //查询是否存在料品管控的条码
  2399. string sqlStrNew = @"SELECT a.ID,
  2400. con.ContainerCode,
  2401. con.ContainerName,
  2402. a.LotNo,
  2403. a.InvCode,
  2404. inv.InvName,
  2405. inv.InvStd,
  2406. inv.InvUnit,-- {0}
  2407. inv.AmountUnit,
  2408. ext.ID AS ExtensionID,
  2409. ext.ProjectCode,
  2410. ext.Version,
  2411. ext.BatchCode,
  2412. ext.Brand,
  2413. ext.cFree1,
  2414. ext.cFree2,
  2415. ext.cFree3,
  2416. ext.cFree4,
  2417. ext.cFree5,
  2418. ext.cFree6,
  2419. ext.cFree7,
  2420. ext.cFree8,
  2421. ext.cFree9,
  2422. ext.cFree10,
  2423. a.MUSER AS [ USER ],
  2424. a.MTIME AS [ MTime ]
  2425. FROM
  2426. ICSInventoryLot a
  2427. LEFT JOIN ICSContainerLot conlot ON a.LotNo = conlot.LotNo AND a.WorkPoint = conlot.WorkPoint
  2428. LEFT JOIN ICSContainer con ON conlot.ContainerID = con.ID AND conlot.WorkPoint = con.WorkPoint
  2429. INNER JOIN ICSInventory inv ON a.InvCode = inv.InvCode AND a.WorkPoint = inv.WorkPoint
  2430. INNER JOIN ICSExtension ext ON a.ExtensionID = ext.ID AND a.WorkPoint = ext.WorkPoint
  2431. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  2432. sqlStrNew = string.Format(sqlStrNew, jointLotNo, WorkPoint);
  2433. DataTable table = DBHelper.SQlReturnData(sqlStrNew, cmd);
  2434. string json = JsonConvert.SerializeObject(table);
  2435. List<LotNoMode> modelNew = JsonConvert.DeserializeObject<List<LotNoMode>>(json);
  2436. //当不存在料品管控条码时,生成新条码
  2437. if (!(modelNew.Count > 0))
  2438. {
  2439. //获取旧条码的信息
  2440. string jsonStr = ICSControlModeService.QueryLotNo(LotNo, WorkPoint);
  2441. List<LotNoMode> model = JsonConvert.DeserializeObject<List<LotNoMode>>(jsonStr);
  2442. //在条码表中插入一条新数据,在条码表中插入一条新数据,并在库存表中添加新数据
  2443. LotNoMode lotNoMode = model[0];
  2444. CreateLotNo(jointLotNo, Quantity, "", "", WorkPoint, Identification, User, lotNoMode.InvCode, BusinessCode, lotNoMode.ProjectCode, lotNoMode.BatchCode,
  2445. lotNoMode.Version, lotNoMode.Brand, lotNoMode.cFree1, lotNoMode.cFree2, lotNoMode.cFree3, lotNoMode.cFree4, lotNoMode.cFree5, lotNoMode.cFree6, lotNoMode.cFree7,
  2446. lotNoMode.cFree8, lotNoMode.cFree9, lotNoMode.cFree10, cmd, language, LocationCode, LotNo);
  2447. }
  2448. try
  2449. {
  2450. //合并前日志
  2451. WareHouseLotInfoLog(Identification, jointLotNo, User, WorkPoint, "2",
  2452. TransTypeEnum.LOTMergeBefore.GetDescription<DBValue>(), "", cmd, language);
  2453. //更新目标条码库存
  2454. WareHouseLotInfoMerge(Identification, jointLotNo, LotNo, Quantity, User, WorkPoint, "2",
  2455. TransTypeEnum.LOTMergeAfter.GetDescription<DBValue>(), cmd, language);
  2456. //合并后日志
  2457. WareHouseLotInfoLog(Identification, jointLotNo, User, WorkPoint, "2",
  2458. TransTypeEnum.LOTMergeAfter.GetDescription<DBValue>(), "", cmd, language);
  2459. }
  2460. catch (Exception)
  2461. {
  2462. throw;
  2463. }
  2464. }
  2465. #endregion
  2466. #region 成品(生产)入库,倒冲
  2467. if (BusinessCode.Equals(TransTypeEnum.ManufactureReceiveDoc.GetDescription<DBValue>()))
  2468. {
  2469. #region sql
  2470. sql = @"-- 1.创建临时表 初始单据数据 maintemp
  2471. SELECT
  2472. c.MOCode AS TransCode,
  2473. a.MODetailID AS DetailID,
  2474. a.InvCode,
  2475. b.InvName,
  2476. b.InvStd,
  2477. a.ParentQuantity/c.Quantity*{2} AS Quantity,
  2478. a.Amount,
  2479. a.Sequence AS TransSequence,
  2480. a.IssueQuantity,
  2481. c.Sequence,
  2482. inv.InvUnit,
  2483. 0 AS LocationQty,
  2484. inv.AmountUnit,
  2485. a.ExtensionID,
  2486. a.WorkPoint,
  2487. ext.ProjectCode,
  2488. CASE WHEN ISNULL(inv.BatchEnable, '0')='1' THEN ext.BatchCode ELSE '' END AS BatchCode,
  2489. ext.Version,
  2490. ext.Brand,
  2491. ext.cFree1,
  2492. ext.cFree2,
  2493. ext.cFree3,
  2494. ext.cFree4,
  2495. ext.cFree5,
  2496. ext.cFree6,
  2497. ext.cFree7,
  2498. ext.cFree8,
  2499. ext.cFree9,
  2500. ext.cFree10
  2501. INTO #maintemp
  2502. FROM
  2503. ICSMOPick a
  2504. inner join ICSMO c on a.MODetailID=c.MODetailID and a.WorkPoint=c.WorkPoint
  2505. LEFT JOIN ICSINVENTORY b ON a.InvCode = b.InvCode AND a.WorkPoint=b.WorkPoint
  2506. INNER JOIN ICSExtension ext ON a.ExtensionID=ext.ID AND a.WorkPoint=ext.WorkPoint
  2507. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  2508. INNER JOIN (
  2509. SELECT a.MOCode,a.Sequence,a.WorkPoint
  2510. FROM ICSMO a
  2511. INNER JOIN ICSInventoryLotDetail b ON b.TransCode=a.MOCode AND b.TransSequence=a.Sequence AND b.WorkPoint=a.WorkPoint
  2512. INNER JOIN ICSInventoryLot c ON c.LotNo=b.LotNo AND c.WorkPoint=b.WorkPoint
  2513. WHERE c.LotNo='{0}' AND c.WorkPoint='{1}'
  2514. ) temp ON c.MOCode=temp.MOCode AND a.WorkPoint=temp.WorkPoint AND c.Sequence=temp.Sequence
  2515. WHERE a.SupplyType='1'
  2516. 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,
  2517. 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;
  2518. select * into #resulttemp from #maintemp
  2519. ALTER TABLE #resulttemp ADD LotNo VARCHAR(50)
  2520. delete from #resulttemp
  2521. -- 2.maintemp barcodetemp
  2522. select a.lotno,a.invcode,(a.quantity-a.lockQuantity) as quantity ,a.mtime into #barcodetemp from ICSWareHouseLotInfo a LEFT JOIN
  2523. (select #maintemp.invcode from #maintemp group by #maintemp.InvCode) b on a.invcode = b.invcode where a.Quantity-a.lockQuantity>0 ORDER BY a.MTIME ASC
  2524. -- 3.maintemp ID barcodetemp
  2525. BEGIN
  2526. DECLARE @transSequence int;--
  2527. DECLARE @qty int;--
  2528. DECLARE @needqty int;--
  2529. DECLARE @lotno VARCHAR(50);--
  2530. DECLARE @DetailID VARCHAR(50);--ID
  2531. DECLARE tempCursor CURSOR FOR (select transSequence,DetailID from #maintemp); --tempCursor
  2532. OPEN tempCursor; --
  2533. FETCH NEXT FROM tempCursor INTO @transSequence,@DetailID; --
  2534. WHILE @@fetch_status=0
  2535. BEGIN
  2536. select @needqty=Quantity from #maintemp where transSequence = @transSequence AND DetailID = @DetailID
  2537. PRINT @transSequence
  2538. WHILE @needqty>0
  2539. BEGIN
  2540. select top 1 @qty = isnull(quantity,0),@lotno = isnull(lotno,'') from #barcodetemp a
  2541. RIGHT JOIN (select invcode from #maintemp where transSequence = @transSequence AND DetailID = @DetailID) b on a.invcode=b.invcode ORDER BY mtime
  2542. BEGIN
  2543. IF(@needqty-@qty>=0 and ISNULL(@lotno, '')<>'')
  2544. BEGIN
  2545. insert INTO #resulttemp (lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity,Quantity,
  2546. Amount,InvCode,InvName,InvStd,InvUnit,LocationQty,AmountUnit,
  2547. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint)
  2548. SELECT @lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity, Quantity,
  2549. ISNULL(Amount, 0), InvCode,InvName,ISNULL(InvStd, ''),InvUnit,@qty,ISNULL(AmountUnit, ''),
  2550. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint from #maintemp
  2551. where #maintemp.transSequence = @transSequence AND DetailID = @DetailID
  2552. delete from #barcodetemp where lotno = @lotno
  2553. SET @needqty=@needqty-@qty
  2554. END
  2555. ELSE IF(@needqty-@qty<0 and ISNULL(@lotno, '')<>'')
  2556. BEGIN
  2557. insert INTO #resulttemp (lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity,Quantity,
  2558. Amount,InvCode,InvName,InvStd,InvUnit,LocationQty,AmountUnit,
  2559. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint)
  2560. SELECT @lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity, Quantity,
  2561. ISNULL(Amount, 0),InvCode,InvName,ISNULL(InvStd, ''),InvUnit,@needqty,ISNULL(AmountUnit, ''),
  2562. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint from #maintemp
  2563. where #maintemp.transSequence = @transSequence AND DetailID = @DetailID
  2564. update #barcodetemp set quantity = @qty-@needqty where lotno = @lotno
  2565. SET @needqty=@needqty-@qty
  2566. END
  2567. ELSE
  2568. BEGIN
  2569. insert INTO #resulttemp (lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity,Quantity,
  2570. Amount,InvCode,InvName,InvStd,InvUnit,LocationQty,AmountUnit,
  2571. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint)
  2572. SELECT @lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity, Quantity,
  2573. ISNULL(Amount, 0),InvCode,InvName,ISNULL(InvStd, ''),InvUnit,0,ISNULL(AmountUnit, ''),
  2574. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint from #maintemp
  2575. where #maintemp.transSequence = @transSequence AND DetailID = @DetailID
  2576. SET @needqty=0
  2577. END
  2578. END
  2579. END
  2580. FETCH NEXT FROM tempCursor INTO @transSequence,@DetailID;
  2581. END
  2582. CLOSE tempCursor
  2583. DEALLOCATE tempCursor
  2584. END
  2585. select TransCode,LotNo,LocationQty AS Quantity,InvCode,DetailID,Sequence,TransSequence from #resulttemp
  2586. --select * from #resulttemp
  2587. DROP table #maintemp
  2588. DROP table #resulttemp
  2589. DROP table #barcodetemp";
  2590. #endregion
  2591. sql = String.Format(sql, LotNo, WorkPoint, Quantity);
  2592. DataTable table = DBHelper.SQlReturnData(sql, cmd);
  2593. string json = JsonConvert.SerializeObject(table);
  2594. List<DownItemModel> downItemModels = JsonConvert.DeserializeObject<List<DownItemModel>>(json);
  2595. foreach (DownItemModel model in downItemModels)
  2596. {
  2597. if (model != null && model.LotNo == null || "" == model.LotNo)
  2598. {
  2599. throw new Exception(language.GetNameByCode("WMSAPIInfo201"));
  2600. }
  2601. WareHouseLotInfoDown(Identification, model.TransCode, model.Sequence + "~" + model.TransSequence, model.LotNo, model.Quantity, User, WorkPoint, "12", BusinessCode, cmd, language, "", "","");
  2602. //回写已领数量
  2603. sql = @"UPDATE ICSMOPick SET IssueQuantity=(ISNULL(IssueQuantity,0)+" + model.Quantity + ") WHERE MODetailID='{0}' AND Sequence='{1}' AND WorkPoint='{2}'";
  2604. sql = String.Format(sql, model.DetailID, model.TransSequence, WorkPoint);
  2605. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2606. {
  2607. throw new Exception(language.GetNameByCode("WMSAPIInfo199"));
  2608. }
  2609. }
  2610. }
  2611. #endregion
  2612. #region 委外入库,倒冲
  2613. if (BusinessCode.Equals(TransTypeEnum.OutsourcingReceiveDoc.GetDescription<DBValue>()))
  2614. {
  2615. #region sql
  2616. sql = @"-- 1.创建临时表 初始单据数据 maintemp
  2617. SELECT
  2618. c.OOCode AS TransCode,
  2619. a.OODetailID AS DetailID,
  2620. a.InvCode,
  2621. b.InvName,
  2622. b.InvStd,
  2623. a.ParentQuantity/c.Quantity*{2} AS Quantity,
  2624. a.Amount,
  2625. a.Sequence AS TransSequence,
  2626. a.IssueQuantity,
  2627. c.Sequence,
  2628. inv.InvUnit,
  2629. 0 AS LocationQty,
  2630. inv.AmountUnit,
  2631. a.ExtensionID,
  2632. a.WorkPoint,
  2633. ext.ProjectCode,
  2634. CASE WHEN ISNULL(inv.BatchEnable, '0')='1' THEN ext.BatchCode ELSE '' END AS BatchCode,
  2635. ext.Version,
  2636. ext.Brand,
  2637. ext.cFree1,
  2638. ext.cFree2,
  2639. ext.cFree3,
  2640. ext.cFree4,
  2641. ext.cFree5,
  2642. ext.cFree6,
  2643. ext.cFree7,
  2644. ext.cFree8,
  2645. ext.cFree9,
  2646. ext.cFree10
  2647. INTO #maintemp
  2648. FROM
  2649. ICSOOPick a
  2650. inner join ICSOutsourcingOrder c on a.OODetailID=c.OODetailID and a.WorkPoint=c.WorkPoint
  2651. LEFT JOIN ICSINVENTORY b ON a.InvCode = b.InvCode AND a.WorkPoint=b.WorkPoint
  2652. INNER JOIN ICSExtension ext ON a.ExtensionID=ext.ID AND a.WorkPoint=ext.WorkPoint
  2653. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  2654. INNER JOIN (
  2655. SELECT a.OOCode,a.Sequence,a.WorkPoint
  2656. FROM ICSOutsourcingOrder a
  2657. INNER JOIN ICSInventoryLotDetail b ON b.TransCode=a.OOCode AND b.TransSequence=a.Sequence AND b.WorkPoint=a.WorkPoint
  2658. INNER JOIN ICSInventoryLot c ON c.LotNo=b.LotNo AND c.WorkPoint=b.WorkPoint
  2659. WHERE c.LotNo='{0}' AND c.WorkPoint='{1}'
  2660. ) temp ON c.OOCode=temp.OOCode AND a.WorkPoint=temp.WorkPoint AND c.Sequence=temp.Sequence
  2661. WHERE a.SupplyType='1'
  2662. 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,
  2663. 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;
  2664. select * into #resulttemp from #maintemp
  2665. ALTER TABLE #resulttemp ADD LotNo VARCHAR(50)
  2666. delete from #resulttemp
  2667. -- 2.maintemp barcodetemp
  2668. select a.lotno,a.invcode,(a.quantity-a.lockQuantity) as quantity ,a.mtime into #barcodetemp from ICSWareHouseLotInfo a LEFT JOIN
  2669. (select #maintemp.invcode from #maintemp group by #maintemp.InvCode) b on a.invcode = b.invcode where a.Quantity-a.lockQuantity>0 ORDER BY a.MTIME ASC
  2670. -- 3.maintemp ID barcodetemp
  2671. BEGIN
  2672. DECLARE @transSequence int;--
  2673. DECLARE @qty int;--
  2674. DECLARE @needqty int;--
  2675. DECLARE @lotno VARCHAR(50);--
  2676. DECLARE @DetailID VARCHAR(50);--ID
  2677. DECLARE tempCursor CURSOR FOR (select transSequence,DetailID from #maintemp); --tempCursor
  2678. OPEN tempCursor; --
  2679. FETCH NEXT FROM tempCursor INTO @transSequence,@DetailID; --
  2680. WHILE @@fetch_status=0
  2681. BEGIN
  2682. select @needqty=Quantity from #maintemp where transSequence = @transSequence AND DetailID = @DetailID
  2683. PRINT @transSequence
  2684. WHILE @needqty>0
  2685. BEGIN
  2686. select top 1 @qty = isnull(quantity,0),@lotno = isnull(lotno,'') from #barcodetemp a
  2687. RIGHT JOIN (select invcode from #maintemp where transSequence = @transSequence AND DetailID = @DetailID) b on a.invcode=b.invcode ORDER BY mtime
  2688. BEGIN
  2689. IF(@needqty-@qty>=0 and ISNULL(@lotno, '')<>'')
  2690. BEGIN
  2691. insert INTO #resulttemp (lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity,Quantity,
  2692. Amount,InvCode,InvName,InvStd,InvUnit,LocationQty,AmountUnit,
  2693. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint)
  2694. SELECT @lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity, Quantity,
  2695. ISNULL(Amount, 0), InvCode,InvName,ISNULL(InvStd, ''),InvUnit,@qty,ISNULL(AmountUnit, ''),
  2696. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint from #maintemp
  2697. where #maintemp.transSequence = @transSequence AND DetailID = @DetailID
  2698. delete from #barcodetemp where lotno = @lotno
  2699. SET @needqty=@needqty-@qty
  2700. END
  2701. ELSE IF(@needqty-@qty<0 and ISNULL(@lotno, '')<>'')
  2702. BEGIN
  2703. insert INTO #resulttemp (lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity,Quantity,
  2704. Amount,InvCode,InvName,InvStd,InvUnit,LocationQty,AmountUnit,
  2705. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint)
  2706. SELECT @lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity, Quantity,
  2707. ISNULL(Amount, 0),InvCode,InvName,ISNULL(InvStd, ''),InvUnit,@needqty,ISNULL(AmountUnit, ''),
  2708. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint from #maintemp
  2709. where #maintemp.transSequence = @transSequence AND DetailID = @DetailID
  2710. update #barcodetemp set quantity = @qty-@needqty where lotno = @lotno
  2711. SET @needqty=@needqty-@qty
  2712. END
  2713. ELSE
  2714. BEGIN
  2715. insert INTO #resulttemp (lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity,Quantity,
  2716. Amount,InvCode,InvName,InvStd,InvUnit,LocationQty,AmountUnit,
  2717. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint)
  2718. SELECT @lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity, Quantity,
  2719. ISNULL(Amount, 0),InvCode,InvName,ISNULL(InvStd, ''),InvUnit,0,ISNULL(AmountUnit, ''),
  2720. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint from #maintemp
  2721. where #maintemp.transSequence = @transSequence AND DetailID = @DetailID
  2722. SET @needqty=0
  2723. END
  2724. END
  2725. END
  2726. FETCH NEXT FROM tempCursor INTO @transSequence,@DetailID;
  2727. END
  2728. CLOSE tempCursor
  2729. DEALLOCATE tempCursor
  2730. END
  2731. select TransCode,LotNo,LocationQty AS Quantity,InvCode,DetailID,Sequence,TransSequence from #resulttemp
  2732. --select * from #resulttemp
  2733. DROP table #maintemp
  2734. DROP table #resulttemp
  2735. DROP table #barcodetemp";
  2736. #endregion
  2737. sql = String.Format(sql, LotNo, WorkPoint, Quantity);
  2738. DataTable table = DBHelper.SQlReturnData(sql, cmd);
  2739. string json = JsonConvert.SerializeObject(table);
  2740. List<DownItemModel> downItemModels = JsonConvert.DeserializeObject<List<DownItemModel>>(json);
  2741. foreach (DownItemModel model in downItemModels)
  2742. {
  2743. if (model != null && model.LotNo == null || "" == model.LotNo)
  2744. {
  2745. throw new Exception(language.GetNameByCode("WMSAPIInfo201"));
  2746. }
  2747. WareHouseLotInfoDown(Identification, model.TransCode, model.Sequence + "~" + model.TransSequence, model.LotNo, model.Quantity, User, WorkPoint, "13", BusinessCode, cmd, language, "", "", "");
  2748. //回写已领数量
  2749. sql = @"UPDATE ICSOOPick SET IssueQuantity=(ISNULL(IssueQuantity,0)+" + model.Quantity + ") WHERE OODetailID='{0}' AND Sequence='{1}' AND WorkPoint='{2}'";
  2750. sql = String.Format(sql, model.DetailID, model.TransSequence, WorkPoint);
  2751. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2752. {
  2753. throw new Exception(language.GetNameByCode("WMSAPIInfo199"));
  2754. }
  2755. }
  2756. }
  2757. #endregion
  2758. }
  2759. catch (Exception)
  2760. {
  2761. throw;
  2762. }
  2763. }
  2764. /// <summary>
  2765. /// 减少库存
  2766. /// </summary>
  2767. /// <param name="Identification"></param>
  2768. /// <param name="TransCode"></param>
  2769. /// <param name="TransSequence"></param>
  2770. /// <param name="LotNo"></param>
  2771. /// <param name="Quantity"></param>
  2772. /// <param name="User"></param>
  2773. /// <param name="WorkPoint"></param>
  2774. /// <param name="TransType"></param>
  2775. /// <param name="BusinessCode"></param>
  2776. /// <param name="cmd"></param>
  2777. public static DataTable WareHouseLotInfoDown(string Identification, string TransCode, string TransSequence, string LotNo, string Quantity, string User,
  2778. string WorkPoint, string TransType, string BusinessCode, SqlCommand cmd, Dictionary<string, string> language, string LogID, string TransID,string MergeID = "")
  2779. {
  2780. decimal LotQTYYY = 0;
  2781. decimal LotQTY = 0;
  2782. decimal SUMQTY = 0;
  2783. string INVCODE = "";
  2784. string Inspect = "";
  2785. string LotEnable = "";
  2786. string LotDocEnable = "";
  2787. string InvOQc = "";
  2788. string chekEnable = "";
  2789. string DisPrintEnable = "";
  2790. string PrintEnable = "";
  2791. string sql = "";
  2792. string lotstr = "";
  2793. int result = 0;
  2794. bool isDis = false;
  2795. List<string> NewBarCodeList = new List<string>();
  2796. DataTable dtLotno = new DataTable();
  2797. DataTable lstDt = new DataTable();
  2798. DataTable ZLtable = new DataTable();
  2799. try
  2800. {
  2801. //检验是否分批
  2802. sql = @"SELECT b.LotEnable,b.PrintEnable,b.InvOQC,b.LotDocEnable FROM ICSInventoryLot a
  2803. LEFT JOIN ICSInventory b ON a.InvCode=b.InvCode AND a.WorkPoint=b.WorkPoint
  2804. where a.LotNo='{0}' and a.WorkPoint='{1}'
  2805. ";
  2806. sql = string.Format(sql, LotNo, WorkPoint);
  2807. DataTable dt = DBHelper.SQlReturnData(sql, cmd);
  2808. if (dt.Rows.Count == 0)
  2809. {
  2810. throw new Exception(language.GetNameByCode("WMSAPIInfo369"));
  2811. }
  2812. else
  2813. {
  2814. LotEnable = dt.Rows[0]["LotEnable"].ToString();
  2815. LotDocEnable = dt.Rows[0]["LotDocEnable"].ToString();
  2816. PrintEnable = dt.Rows[0]["PrintEnable"].ToString();
  2817. InvOQc = dt.Rows[0]["InvOQC"].ToString();
  2818. }
  2819. log.Debug("INVOQC:"+InvOQc);
  2820. 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
  2821. from Sys_SRM_Items a
  2822. left join Sys_SRM_ItemsDetail b on a.F_Id=b.F_ItemId
  2823. where a.F_EnCode='TransBatch' and b.F_ItemCode='{0}' )
  2824. BEGIN
  2825. RAISERROR('" + language.GetNameByCode("WMSAPIInfo470") + @"',16,1);
  2826. RETURN
  2827. END
  2828. select b.F_ItemCode as Code ,b.F_ItemName as Name,b.F_EnabledMark AS Enable ,b.F_IsDefault AS DisPrintEnable
  2829. from Sys_SRM_Items a
  2830. left join Sys_SRM_ItemsDetail b on a.F_Id=b.F_ItemId
  2831. where a.F_EnCode='TransBatch' and b.F_ItemCode='{0}'
  2832. ";
  2833. cheksql = string.Format(cheksql, BusinessCode);
  2834. DataTable chekdt = DBHelper.SQlReturnData(cheksql, cmd);
  2835. if (chekdt.Rows.Count == 0)
  2836. {
  2837. throw new Exception(language.GetNameByCode("WMSAPIInfo369"));
  2838. }
  2839. else
  2840. {
  2841. chekEnable = chekdt.Rows[0]["Enable"].ToString();
  2842. DisPrintEnable = chekdt.Rows[0]["DisPrintEnable"].ToString();
  2843. }
  2844. sql = @"select Quantity,invcode,Inspect from ICSWareHouseLotInfo
  2845. where LotNO='{0}' AND WorkPoint='{1}'";
  2846. sql = string.Format(sql, LotNo, WorkPoint);
  2847. DataTable dtt = DBHelper.SQlReturnData(sql, cmd);
  2848. LotQTYYY = Convert.ToDecimal(dtt.Rows[0]["Quantity"]);
  2849. LotQTY = Convert.ToDecimal(Quantity);
  2850. INVCODE = dtt.Rows[0]["invcode"].ToString();
  2851. Inspect = dtt.Rows[0]["Inspect"].ToString();
  2852. sql = @"SELECT isNULL(SUM(a.quantity)-'{3}',0) AS SumQTY FROM ICSWareHouseLotInfo a
  2853. INNER JOIN ICSReserve b ON a.invcode=b.invcode and a.workpoint=b.workpoint and a.warehousecode=b.whcode
  2854. where a.invcode='{2}' and a.workpoint='{1}' ";
  2855. sql = string.Format(sql, LotNo, WorkPoint,INVCODE, Quantity);
  2856. DataTable Sumdtt = DBHelper.SQlReturnData(sql, cmd);
  2857. log.Debug(Sumdtt.Rows[0]["SumQTY"]);
  2858. SUMQTY = Convert.ToDecimal(Sumdtt.Rows[0]["SumQTY"]);
  2859. //Convert.ToDecimal(Sumdtt.Rows[0]["SumQTY"]);
  2860. if (LotDocEnable.Equals("True"))
  2861. {
  2862. if (LotEnable.Equals("True") && chekEnable.Equals("True") && LotQTYYY - LotQTY > 0)
  2863. {
  2864. ZLtable = ICSControlModeService.GetZL();
  2865. if (ZLtable == null)
  2866. {
  2867. throw new Exception(language.GetNameByCode("WMSAPIInfo471"));
  2868. }
  2869. for (int i = 0; i < ZLtable.Rows.Count; i++)
  2870. {
  2871. string zlName = ZLtable.Rows[i]["Name"].ToString();
  2872. string zlTransCode = ZLtable.Rows[i]["BusinessCode"].ToString();
  2873. string Enable = ZLtable.Rows[i]["Enable"].ToString();
  2874. if (zlTransCode.Equals(BusinessCode))
  2875. {
  2876. if (Enable.Equals("True"))
  2877. {
  2878. ///更新日志
  2879. sql = @"
  2880. 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}')
  2881. BEGIN
  2882. RAISERROR('" + language.GetNameByCode("WMSAPIInfo472") + @"',16,1);
  2883. RETURN
  2884. END
  2885. UPDATE ICSWareHouseLotInfoLog SET EATTRIBUTE2='1' WHERE LotNo='{0}' AND WorkPoint='{1}' and transtype='15' and TransCode='{3}' and TransSequence='{4}'
  2886. ";
  2887. sql = string.Format(sql, LotNo, WorkPoint, LogID,TransCode,TransSequence);
  2888. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2889. {
  2890. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"占料标识更新失败!");
  2891. }
  2892. ///更新库存
  2893. sql = @"DECLARE @ReservedQuantity VARCHAR(10);
  2894. SELECT @ReservedQuantity = CAST(b.Quantity AS VARCHAR(10))
  2895. FROM ICSReserve b
  2896. INNER JOIN ICSWareHouseLotInfo a
  2897. ON a.invcode = b.invcode
  2898. AND a.workpoint = b.workpoint
  2899. AND a.warehousecode = b.whcode
  2900. WHERE '{4}' < b.Quantity
  2901. AND b.invcode = '{3}'
  2902. AND GETDATE() > b.BeginTime
  2903. AND GETDATE() < b.EndTime;
  2904. IF EXISTS(SELECT * FROM ICSWareHouseLotInfo a
  2905. INNER JOIN ICSReserve b ON a.invcode=b.invcode
  2906. AND a.workpoint=b.workpoint
  2907. AND a.warehousecode=b.whcode
  2908. WHERE a.invcode='{3}'
  2909. AND a.workpoint='{1}'
  2910. AND SYSDATETIME() > b.BeginTime
  2911. AND SYSDATETIME() < b.EndTime
  2912. AND b.enable='1')
  2913. BEGIN
  2914. IF @ReservedQuantity IS NOT NULL
  2915. BEGIN
  2916. RAISERROR('''{3}'',''{4}'''' + @ReservedQuantity + ''!', 16, 1);
  2917. RETURN
  2918. END
  2919. END
  2920. UPDATE ICSWareHouseLotInfo
  2921. SET Quantity = ISNULL(Quantity, 0) - '{2}',
  2922. LockQuantity = ISNULL(LockQuantity, 0) - '{2}'
  2923. WHERE LotNo = '{0}'
  2924. AND WorkPoint = '{1}';
  2925. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a
  2926. WHERE a.LotNo = '{0}'
  2927. AND a.WorkPoint = '{1}'
  2928. AND Quantity - LockQuantity < 0)
  2929. BEGIN
  2930. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"', 16, 1);
  2931. RETURN
  2932. END
  2933. ";
  2934. sql = string.Format(sql, LotNo, WorkPoint, Quantity, INVCODE, SUMQTY);
  2935. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2936. {
  2937. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  2938. }
  2939. }
  2940. else
  2941. {
  2942. if (InvOQc.Equals("True"))
  2943. {
  2944. sql = @"select a.id from ICSWareHouseLotInfo a
  2945. inner JOIN ICSInspectDetail b ON a.WorkPoint=b.WorkPoint and a.LotNo=b.LotNo
  2946. where a.LotNo='{0}' and a.WorkPoint='{1}' ";//and a.Inspect = '0'
  2947. sql = string.Format(sql, LotNo, WorkPoint);
  2948. DataTable Inspectdtt = DBHelper.SQlReturnData(sql, cmd);
  2949. if (Inspectdtt.Rows.Count > 0 && Inspectdtt != null)
  2950. {
  2951. sql = @"select a.id from ICSWareHouseLotInfo a
  2952. inner JOIN ICSInspectDetail b ON a.WorkPoint=b.WorkPoint and a.LotNo=b.LotNo
  2953. where a.LotNo='{0}' and a.WorkPoint='{1}' and a.Inspect = '0'";
  2954. sql = string.Format(sql, LotNo, WorkPoint);
  2955. DataTable InspectNewdtt = DBHelper.SQlReturnData(sql, cmd);
  2956. if (InspectNewdtt.Rows.Count == 0 || InspectNewdtt == null)
  2957. {
  2958. throw new Exception("条码在库检验,未检验完成,请确认!");
  2959. }
  2960. }
  2961. }
  2962. ///更新库存
  2963. sql = @"DECLARE @ReservedQuantity VARCHAR(10);
  2964. SELECT @ReservedQuantity = CAST(b.Quantity AS VARCHAR(10))
  2965. FROM ICSReserve b
  2966. INNER JOIN ICSWareHouseLotInfo a
  2967. ON a.invcode = b.invcode
  2968. AND a.workpoint = b.workpoint
  2969. AND a.warehousecode = b.whcode
  2970. WHERE '{4}' < b.Quantity
  2971. AND b.invcode = '{3}'
  2972. AND GETDATE() > b.BeginTime
  2973. AND GETDATE() < b.EndTime;
  2974. IF EXISTS(SELECT * FROM ICSWareHouseLotInfo a
  2975. INNER JOIN ICSReserve b ON a.invcode=b.invcode
  2976. AND a.workpoint=b.workpoint
  2977. AND a.warehousecode=b.whcode
  2978. WHERE a.invcode='{3}'
  2979. AND a.workpoint='{1}'
  2980. AND SYSDATETIME() > b.BeginTime
  2981. AND SYSDATETIME() < b.EndTime
  2982. AND b.enable='1')
  2983. BEGIN
  2984. IF @ReservedQuantity IS NOT NULL
  2985. BEGIN
  2986. RAISERROR('''{3}'',''{4}'''' + @ReservedQuantity + ''!', 16, 1);
  2987. RETURN
  2988. END
  2989. END
  2990. UPDATE ICSWareHouseLotInfo
  2991. SET Quantity = ISNULL(Quantity, 0) - '{2}'
  2992. WHERE LotNo = '{0}'
  2993. AND WorkPoint = '{1}';
  2994. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a
  2995. WHERE a.LotNo = '{0}'
  2996. AND a.WorkPoint = '{1}'
  2997. AND Quantity - LockQuantity < 0)
  2998. BEGIN
  2999. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"', 16, 1);
  3000. RETURN
  3001. END
  3002. ";
  3003. sql = string.Format(sql, LotNo, WorkPoint, Quantity, INVCODE, SUMQTY);
  3004. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3005. {
  3006. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  3007. }
  3008. }
  3009. }
  3010. }
  3011. ///分批前添加日志
  3012. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  3013. BEGIN
  3014. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  3015. RETURN
  3016. END
  3017. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransID,TransCode,TransSequence,LotNo,InvCode,
  3018. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  3019. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  3020. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  3021. MTIME,WorkPoint,EATTRIBUTE1)
  3022. SELECT NEWID(),'{3}','{9}','{7}','{8}',a.LotNo ,a.InvCode ,
  3023. c.WarehouseCode,c.LocationCode,'','',c.Quantity+{6},
  3024. '','0','{4}','31','0','',
  3025. '','','',f.F_Account ,f.F_RealName ,
  3026. SYSDATETIME() ,a.WorkPoint ,''
  3027. FROM ICSInventoryLot a
  3028. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  3029. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  3030. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  3031. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  3032. ";
  3033. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransType, BusinessCode, Quantity, TransCode, TransSequence, TransID);
  3034. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3035. {
  3036. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  3037. }
  3038. #region 获取分批后的条码(lotstr)
  3039. sql = @"SELECT TOP 1 LotNO FROM ICSInventoryLot WHERE EATTRIBUTE1='{0}' AND WorkPoint='{1}'
  3040. ORDER BY CAST(SUBSTRING(LotNO, (LEN(LotNO)-CHARINDEX('-',REVERSE(LotNO))+1)+1,CHARINDEX('-',REVERSE(LotNO))-1) AS INT) DESC";
  3041. sql = string.Format(sql, LotNo, WorkPoint);
  3042. dt = DBHelper.SQlReturnData(sql, cmd);
  3043. if (dt.Rows.Count == 0)
  3044. {
  3045. lotstr = LotNo + "-" + 1;
  3046. }
  3047. else
  3048. {
  3049. lotstr = LotNo + "-" + (Convert.ToInt32(dt.Rows[0]["LotNO"].ToString().Split('-')[dt.Rows[0]["LotNO"].ToString().Split('-').Length - 1]) + 1).ToString();
  3050. }
  3051. NewBarCodeList.Add(lotstr);//将分批后新条码添加到新集合
  3052. #endregion
  3053. #region 将分批后的条码记录插入条码表,库存表及日志表并将原条码库存数量清零
  3054. sql = @"INSERT INTO ICSInventoryLot(ID,LotNo,InvCode,ProductDate,ExpirationDate,
  3055. Quantity,Amount,ExtensionID,Type,PrintTimes,
  3056. LastPrintUser,LastPrintTime,MUSER,MUSERName,MTIME,
  3057. WorkPoint,EATTRIBUTE1,EATTRIBUTE2,EATTRIBUTE3,EATTRIBUTE4,EATTRIBUTE5,EATTRIBUTE6,EATTRIBUTE7,EATTRIBUTE8,
  3058. EATTRIBUTE9,EATTRIBUTE10,EATTRIBUTE11,EATTRIBUTE12,EATTRIBUTE13,EATTRIBUTE14,EATTRIBUTE15,EATTRIBUTE16,EATTRIBUTE17,EATTRIBUTE18,EATTRIBUTE19,EATTRIBUTE20,
  3059. EATTRIBUTE21,EATTRIBUTE22,EATTRIBUTE23,EATTRIBUTE24,EATTRIBUTE25,EATTRIBUTE26,EATTRIBUTE27,EATTRIBUTE28,EATTRIBUTE29,EATTRIBUTE30)
  3060. SELECT TOP 1 NEWID(),'{0}',a.InvCode,a.ProductDate,a.ExpirationDate,
  3061. '{2}',a.Amount/a.Quantity*Quantity,a.ExtensionID,a.Type,a.PrintTimes,
  3062. a.LastPrintUser,a.LastPrintTime,a.MUSER ,a.MUSERName ,GETDATE(),
  3063. a.WorkPoint ,'{1}',a.EATTRIBUTE2,a.EATTRIBUTE3,a.EATTRIBUTE4,a.EATTRIBUTE5,a.EATTRIBUTE6,a.EATTRIBUTE7,a.EATTRIBUTE8,
  3064. a.EATTRIBUTE9,a.EATTRIBUTE10,a.EATTRIBUTE11,a.EATTRIBUTE12,a.EATTRIBUTE13,a.EATTRIBUTE14,a.EATTRIBUTE15,a.EATTRIBUTE16,a.EATTRIBUTE17,a.EATTRIBUTE18,a.EATTRIBUTE19,a.EATTRIBUTE20,
  3065. a.EATTRIBUTE21,a.EATTRIBUTE22,a.EATTRIBUTE23,a.EATTRIBUTE24,a.EATTRIBUTE25,a.EATTRIBUTE26,a.EATTRIBUTE27,a.EATTRIBUTE28,a.EATTRIBUTE29,a.EATTRIBUTE30
  3066. From ICSInventoryLot a
  3067. where a.LotNo='{1}' and a.WorkPoint='{3}'";
  3068. sql = string.Format(sql, lotstr, LotNo, Quantity, WorkPoint);
  3069. cmd.CommandText = sql;
  3070. result = cmd.ExecuteNonQuery();
  3071. if (result <= 0)
  3072. {
  3073. throw new Exception(language.GetNameByCode("WMSAPIInfo195"));//条码分批后条码表存入失败!
  3074. }
  3075. sql = @"INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  3076. select NEWID(),'{0}',WarehouseCode,LocationCode,InvCode,'0',InDate,LockQuantity
  3077. ,MUSER,MUSERName,GETDATE(),'{3}',''
  3078. from ICSWareHouseLotInfo
  3079. where LotNO='{1}' AND WorkPoint='{3}'";
  3080. sql = string.Format(sql, lotstr, LotNo, Quantity, WorkPoint);
  3081. cmd.CommandText = sql;
  3082. result = cmd.ExecuteNonQuery();
  3083. if (result <= 0)
  3084. {
  3085. throw new Exception(language.GetNameByCode("WMSAPIInfo196"));//条码分批后库存表存入失败!
  3086. }
  3087. //插入条码单据表
  3088. sql = @"INSERT INTO ICSInventoryLotDetail(LotNo,TransID,TransCode,TransSequence,MUSER,MUSERName,MTIME,WorkPoint)
  3089. SELECT '{3}','{4}',b.TransCode,b.TransSequence,f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint
  3090. FROM ICSInventoryLot a
  3091. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  3092. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  3093. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  3094. sql = string.Format(sql, LotNo, WorkPoint, User, lotstr, TransID);
  3095. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3096. {
  3097. throw new Exception(language.GetNameByCode("WMSAPIInfo174"));//"条码单据表写入失败!");
  3098. }
  3099. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransID,TransCode,TransSequence,LotNo,InvCode,
  3100. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  3101. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  3102. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  3103. MTIME,WorkPoint,EATTRIBUTE1,LogID)
  3104. SELECT NEWID(),'{3}','{11}','{4}','{5}','{10}' ,a.InvCode ,
  3105. c.WarehouseCode,c.LocationCode,'','','{6}',
  3106. '','0','{7}','{8}','0','',
  3107. '','','',f.F_Account ,f.F_RealName ,
  3108. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  3109. FROM ICSInventoryLot a
  3110. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  3111. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  3112. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  3113. ";
  3114. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID, lotstr, TransID);
  3115. cmd.CommandText = sql;
  3116. result = cmd.ExecuteNonQuery();
  3117. if (result <= 0)
  3118. {
  3119. throw new Exception(language.GetNameByCode("WMSAPIInfo197"));//条码分批后库存日志表存入失败!
  3120. }
  3121. ///添加日志
  3122. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  3123. BEGIN
  3124. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  3125. RETURN
  3126. END
  3127. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransID,TransCode,TransSequence,LotNo,InvCode,
  3128. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  3129. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  3130. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  3131. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  3132. SELECT NEWID(),'{3}','{10}','{4}','{5}',a.LotNo ,a.InvCode ,
  3133. c.WarehouseCode,c.LocationCode,'','',c.Quantity,
  3134. '','0','{7}','32','0','',
  3135. '','','',f.F_Account ,f.F_RealName ,
  3136. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  3137. FROM ICSInventoryLot a
  3138. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  3139. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  3140. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  3141. ";
  3142. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID, TransID);
  3143. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3144. {
  3145. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  3146. }
  3147. if (PrintEnable.Equals("True") && DisPrintEnable.Equals("True"))
  3148. {
  3149. string PrintData = DBHelper.ReadPrintStream();
  3150. sql = @""+PrintData+"";
  3151. //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
  3152. // from ICSWareHouseLotInfolog A
  3153. // left join ICSInventoryLot B on A.LotNO=B.LotNO and a.WorkPoint=b.WorkPoint
  3154. // left join ICSWareHouseLotInfo C ON A.LotNO=C.LotNO and a.WorkPoint=c.WorkPoint
  3155. // left join ICSInventory D on b.INVCODE=d.INVCODE and b.WorkPoint=d.WorkPoint
  3156. // where A.lotno ='{0}' and a.workpoint='{1}' and a.BusinessCode='{2}'
  3157. // ";
  3158. sql = string.Format(sql, LotNo, WorkPoint, BusinessCode, Identification);
  3159. log.Debug("打印数据源:" + sql);
  3160. dtLotno = DBHelper.SQlReturnData(sql, cmd);
  3161. lstDt = dtLotno;
  3162. }
  3163. #endregion
  3164. }
  3165. else
  3166. {
  3167. NewBarCodeList.Add(LotNo);
  3168. ///添加日志
  3169. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  3170. BEGIN
  3171. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  3172. RETURN
  3173. END
  3174. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransID,TransCode,TransSequence,LotNo,InvCode,
  3175. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  3176. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  3177. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  3178. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  3179. SELECT NEWID(),'{3}','{10}','{4}','{5}',a.LotNo ,a.InvCode ,
  3180. c.WarehouseCode,c.LocationCode,'','','{6}',
  3181. '','0','{7}','{8}','0','',
  3182. '','','',f.F_Account ,f.F_RealName ,
  3183. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  3184. FROM ICSInventoryLot a
  3185. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  3186. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  3187. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  3188. ";
  3189. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID, TransID);
  3190. log.Debug("出库日志" + sql);
  3191. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3192. {
  3193. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  3194. }
  3195. ZLtable = ICSControlModeService.GetZL();
  3196. if (ZLtable == null)
  3197. {
  3198. throw new Exception(language.GetNameByCode("WMSAPIInfo471"));
  3199. }
  3200. for (int i = 0; i < ZLtable.Rows.Count; i++)
  3201. {
  3202. string zlTransCode = ZLtable.Rows[i]["BusinessCode"].ToString();
  3203. string Enable = ZLtable.Rows[i]["Enable"].ToString();
  3204. if (zlTransCode.Equals(BusinessCode))
  3205. {
  3206. isDis = true;
  3207. if (Enable.Equals("True"))
  3208. {
  3209. ///更新日志
  3210. sql = @"
  3211. 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}')
  3212. BEGIN
  3213. RAISERROR('" + language.GetNameByCode("WMSAPIInfo472") + @"',16,1);
  3214. RETURN
  3215. END
  3216. UPDATE ICSWareHouseLotInfoLog SET EATTRIBUTE2='1' WHERE LotNo='{0}' AND WorkPoint='{1}' and transtype='15' and TransCode='{3}' and TransSequence='{4}'
  3217. ";
  3218. sql = string.Format(sql, LotNo, WorkPoint, LogID, TransCode, TransSequence);
  3219. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3220. {
  3221. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"占料标识更新失败!");
  3222. }
  3223. ///更新库存
  3224. sql = @"DECLARE @ReservedQuantity VARCHAR(10);
  3225. SELECT @ReservedQuantity = CAST(b.Quantity AS VARCHAR(10))
  3226. FROM ICSReserve b
  3227. INNER JOIN ICSWareHouseLotInfo a
  3228. ON a.invcode = b.invcode
  3229. AND a.workpoint = b.workpoint
  3230. AND a.warehousecode = b.whcode
  3231. WHERE '{4}' < b.Quantity
  3232. AND b.invcode = '{3}'
  3233. AND GETDATE() > b.BeginTime
  3234. AND GETDATE() < b.EndTime;
  3235. IF EXISTS(SELECT * FROM ICSWareHouseLotInfo a
  3236. INNER JOIN ICSReserve b ON a.invcode=b.invcode
  3237. AND a.workpoint=b.workpoint
  3238. AND a.warehousecode=b.whcode
  3239. WHERE a.invcode='{3}'
  3240. AND a.workpoint='{1}'
  3241. AND SYSDATETIME() > b.BeginTime
  3242. AND SYSDATETIME() < b.EndTime
  3243. AND b.enable='1')
  3244. BEGIN
  3245. IF @ReservedQuantity IS NOT NULL
  3246. BEGIN
  3247. RAISERROR('''{3}'',''{4}'''' + @ReservedQuantity + ''!', 16, 1);
  3248. RETURN
  3249. END
  3250. END
  3251. UPDATE ICSWareHouseLotInfo
  3252. SET Quantity = ISNULL(Quantity, 0) - '{2}',
  3253. LockQuantity = ISNULL(LockQuantity, 0) - '{2}'
  3254. WHERE LotNo = '{0}'
  3255. AND WorkPoint = '{1}';
  3256. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a
  3257. WHERE a.LotNo = '{0}'
  3258. AND a.WorkPoint = '{1}'
  3259. AND Quantity - LockQuantity < 0)
  3260. BEGIN
  3261. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"', 16, 1);
  3262. RETURN
  3263. END
  3264. ";
  3265. sql = string.Format(sql, LotNo, WorkPoint, Quantity, INVCODE, SUMQTY);
  3266. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3267. {
  3268. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  3269. }
  3270. }
  3271. else
  3272. {
  3273. if (InvOQc.Equals("True"))
  3274. {
  3275. sql = @"select a.id from ICSWareHouseLotInfo a
  3276. inner JOIN ICSInspectDetail b ON a.WorkPoint=b.WorkPoint and a.LotNo=b.LotNo
  3277. where a.LotNo='{0}' and a.WorkPoint='{1}' ";//and a.Inspect = '0'
  3278. sql = string.Format(sql, LotNo, WorkPoint);
  3279. DataTable Inspectdtt = DBHelper.SQlReturnData(sql, cmd);
  3280. if (Inspectdtt.Rows.Count > 0 && Inspectdtt != null)
  3281. {
  3282. sql = @"select a.id from ICSWareHouseLotInfo a
  3283. inner JOIN ICSInspectDetail b ON a.WorkPoint=b.WorkPoint and a.LotNo=b.LotNo
  3284. where a.LotNo='{0}' and a.WorkPoint='{1}' and a.Inspect = '0'";
  3285. sql = string.Format(sql, LotNo, WorkPoint);
  3286. DataTable InspectNewdtt = DBHelper.SQlReturnData(sql, cmd);
  3287. if (InspectNewdtt.Rows.Count == 0 || InspectNewdtt == null)
  3288. {
  3289. throw new Exception("条码在库检验,未检验完成,请确认!");
  3290. }
  3291. }
  3292. }
  3293. ///更新库存
  3294. sql = @"DECLARE @ReservedQuantity VARCHAR(10);
  3295. SELECT @ReservedQuantity = CAST(b.Quantity AS VARCHAR(10))
  3296. FROM ICSReserve b
  3297. INNER JOIN ICSWareHouseLotInfo a
  3298. ON a.invcode = b.invcode
  3299. AND a.workpoint = b.workpoint
  3300. AND a.warehousecode = b.whcode
  3301. WHERE '{4}' < b.Quantity
  3302. AND b.invcode = '{3}'
  3303. AND GETDATE() > b.BeginTime
  3304. AND GETDATE() < b.EndTime;
  3305. IF EXISTS(SELECT * FROM ICSWareHouseLotInfo a
  3306. INNER JOIN ICSReserve b ON a.invcode=b.invcode
  3307. AND a.workpoint=b.workpoint
  3308. AND a.warehousecode=b.whcode
  3309. WHERE a.invcode='{3}'
  3310. AND a.workpoint='{1}'
  3311. AND SYSDATETIME() > b.BeginTime
  3312. AND SYSDATETIME() < b.EndTime
  3313. AND b.enable='1')
  3314. BEGIN
  3315. IF @ReservedQuantity IS NOT NULL
  3316. BEGIN
  3317. RAISERROR('''{3}'',''{4}'''' + @ReservedQuantity + ''!', 16, 1);
  3318. RETURN
  3319. END
  3320. END
  3321. UPDATE ICSWareHouseLotInfo
  3322. SET Quantity = ISNULL(Quantity, 0) - '{2}'
  3323. WHERE LotNo = '{0}'
  3324. AND WorkPoint = '{1}';
  3325. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a
  3326. WHERE a.LotNo = '{0}'
  3327. AND a.WorkPoint = '{1}'
  3328. AND Quantity - LockQuantity < 0)
  3329. BEGIN
  3330. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"', 16, 1);
  3331. RETURN
  3332. END
  3333. ";
  3334. sql = string.Format(sql, LotNo, WorkPoint, Quantity, INVCODE, SUMQTY);
  3335. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3336. {
  3337. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  3338. }
  3339. }
  3340. }
  3341. // else { throw new Exception("单据类型未配置!"); }
  3342. }
  3343. //if (isDis == false)
  3344. //{
  3345. // throw new Exception("单据类型未配置!");
  3346. //}
  3347. /////更新库存
  3348. //sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  3349. // IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity<0)
  3350. // BEGIN
  3351. // RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  3352. // RETURN
  3353. // END";
  3354. //sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  3355. //if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3356. //{
  3357. // throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  3358. //}
  3359. }
  3360. }
  3361. else
  3362. {
  3363. if (LotEnable.Equals("True") && LotQTYYY - LotQTY > 0)
  3364. {
  3365. ZLtable = ICSControlModeService.GetZL();
  3366. if (ZLtable == null)
  3367. {
  3368. throw new Exception(language.GetNameByCode("WMSAPIInfo471"));
  3369. }
  3370. for (int i = 0; i < ZLtable.Rows.Count; i++)
  3371. {
  3372. string zlName = ZLtable.Rows[i]["Name"].ToString();
  3373. string zlTransCode = ZLtable.Rows[i]["BusinessCode"].ToString();
  3374. string Enable = ZLtable.Rows[i]["Enable"].ToString();
  3375. if (zlTransCode.Equals(BusinessCode))
  3376. {
  3377. if (Enable.Equals("True"))
  3378. {
  3379. ///更新日志
  3380. sql = @"
  3381. 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}')
  3382. BEGIN
  3383. RAISERROR('" + language.GetNameByCode("WMSAPIInfo472") + @"',16,1);
  3384. RETURN
  3385. END
  3386. UPDATE ICSWareHouseLotInfoLog SET EATTRIBUTE2='1' WHERE LotNo='{0}' AND WorkPoint='{1}' and transtype='15' and TransCode='{3}' and TransSequence='{4}'
  3387. ";
  3388. sql = string.Format(sql, LotNo, WorkPoint, LogID, TransCode, TransSequence);
  3389. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3390. {
  3391. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"占料标识更新失败!");
  3392. }
  3393. ///更新库存
  3394. sql = @"DECLARE @ReservedQuantity VARCHAR(10);
  3395. SELECT @ReservedQuantity = CAST(b.Quantity AS VARCHAR(10))
  3396. FROM ICSReserve b
  3397. INNER JOIN ICSWareHouseLotInfo a
  3398. ON a.invcode = b.invcode
  3399. AND a.workpoint = b.workpoint
  3400. AND a.warehousecode = b.whcode
  3401. WHERE '{4}' < b.Quantity
  3402. AND b.invcode = '{3}'
  3403. AND GETDATE() > b.BeginTime
  3404. AND GETDATE() < b.EndTime;
  3405. IF EXISTS(SELECT * FROM ICSWareHouseLotInfo a
  3406. INNER JOIN ICSReserve b ON a.invcode=b.invcode
  3407. AND a.workpoint=b.workpoint
  3408. AND a.warehousecode=b.whcode
  3409. WHERE a.invcode='{3}'
  3410. AND a.workpoint='{1}'
  3411. AND SYSDATETIME() > b.BeginTime
  3412. AND SYSDATETIME() < b.EndTime
  3413. AND b.enable='1')
  3414. BEGIN
  3415. IF @ReservedQuantity IS NOT NULL
  3416. BEGIN
  3417. RAISERROR('''{3}'',''{4}'''' + @ReservedQuantity + ''!', 16, 1);
  3418. RETURN
  3419. END
  3420. END
  3421. UPDATE ICSWareHouseLotInfo
  3422. SET Quantity = ISNULL(Quantity, 0) - '{2}',
  3423. LockQuantity = ISNULL(LockQuantity, 0) - '{2}'
  3424. WHERE LotNo = '{0}'
  3425. AND WorkPoint = '{1}';
  3426. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a
  3427. WHERE a.LotNo = '{0}'
  3428. AND a.WorkPoint = '{1}'
  3429. AND Quantity - LockQuantity < 0)
  3430. BEGIN
  3431. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"', 16, 1);
  3432. RETURN
  3433. END
  3434. ";
  3435. sql = string.Format(sql, LotNo, WorkPoint, Quantity, INVCODE, SUMQTY, TransCode, TransSequence);
  3436. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3437. {
  3438. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  3439. }
  3440. }
  3441. else
  3442. {
  3443. if (InvOQc.Equals("True"))
  3444. {
  3445. sql = @"select a.id from ICSWareHouseLotInfo a
  3446. inner JOIN ICSInspectDetail b ON a.WorkPoint=b.WorkPoint and a.LotNo=b.LotNo
  3447. where a.LotNo='{0}' and a.WorkPoint='{1}' ";//and a.Inspect = '0'
  3448. sql = string.Format(sql, LotNo, WorkPoint);
  3449. DataTable Inspectdtt = DBHelper.SQlReturnData(sql, cmd);
  3450. if (Inspectdtt.Rows.Count > 0 && Inspectdtt != null)
  3451. {
  3452. sql = @"select a.id from ICSWareHouseLotInfo a
  3453. inner JOIN ICSInspectDetail b ON a.WorkPoint=b.WorkPoint and a.LotNo=b.LotNo
  3454. where a.LotNo='{0}' and a.WorkPoint='{1}' and a.Inspect = '0'";
  3455. sql = string.Format(sql, LotNo, WorkPoint);
  3456. DataTable InspectNewdtt = DBHelper.SQlReturnData(sql, cmd);
  3457. if (InspectNewdtt.Rows.Count == 0 || InspectNewdtt == null)
  3458. {
  3459. throw new Exception("条码在库检验,未检验完成,请确认!");
  3460. }
  3461. }
  3462. }
  3463. ///更新库存
  3464. sql = @"DECLARE @ReservedQuantity VARCHAR(10);
  3465. SELECT @ReservedQuantity = CAST(b.Quantity AS VARCHAR(10))
  3466. FROM ICSReserve b
  3467. INNER JOIN ICSWareHouseLotInfo a
  3468. ON a.invcode = b.invcode
  3469. AND a.workpoint = b.workpoint
  3470. AND a.warehousecode = b.whcode
  3471. WHERE '{4}' < b.Quantity
  3472. AND b.invcode = '{3}'
  3473. AND GETDATE() > b.BeginTime
  3474. AND GETDATE() < b.EndTime;
  3475. IF EXISTS(SELECT * FROM ICSWareHouseLotInfo a
  3476. INNER JOIN ICSReserve b ON a.invcode=b.invcode
  3477. AND a.workpoint=b.workpoint
  3478. AND a.warehousecode=b.whcode
  3479. WHERE a.invcode='{3}'
  3480. AND a.workpoint='{1}'
  3481. AND SYSDATETIME() > b.BeginTime
  3482. AND SYSDATETIME() < b.EndTime
  3483. AND b.enable='1')
  3484. BEGIN
  3485. IF @ReservedQuantity IS NOT NULL
  3486. BEGIN
  3487. RAISERROR('''{3}'',''{4}'''' + @ReservedQuantity + ''!', 16, 1);
  3488. RETURN
  3489. END
  3490. END
  3491. UPDATE ICSWareHouseLotInfo
  3492. SET Quantity = ISNULL(Quantity, 0) - '{2}'
  3493. WHERE LotNo = '{0}'
  3494. AND WorkPoint = '{1}';
  3495. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a
  3496. WHERE a.LotNo = '{0}'
  3497. AND a.WorkPoint = '{1}'
  3498. AND Quantity - LockQuantity < 0)
  3499. BEGIN
  3500. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"', 16, 1);
  3501. RETURN
  3502. END
  3503. ";
  3504. sql = string.Format(sql, LotNo, WorkPoint, Quantity, INVCODE, SUMQTY);
  3505. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3506. {
  3507. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  3508. }
  3509. }
  3510. }
  3511. }
  3512. ///分批前添加日志
  3513. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  3514. BEGIN
  3515. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  3516. RETURN
  3517. END
  3518. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransID,TransCode,TransSequence,LotNo,InvCode,
  3519. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  3520. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  3521. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  3522. MTIME,WorkPoint,EATTRIBUTE1)
  3523. SELECT NEWID(),'{3}','{9}','{7}','{8}',a.LotNo ,a.InvCode ,
  3524. c.WarehouseCode,c.LocationCode,'','',c.Quantity+{6},
  3525. '','0','{4}','31','0','',
  3526. '','','',f.F_Account ,f.F_RealName ,
  3527. SYSDATETIME() ,a.WorkPoint ,''
  3528. FROM ICSInventoryLot a
  3529. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  3530. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  3531. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  3532. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  3533. ";
  3534. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransType, BusinessCode, Quantity, TransCode, TransSequence, TransID);
  3535. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3536. {
  3537. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  3538. }
  3539. #region 获取分批后的条码(lotstr)
  3540. sql = @"SELECT TOP 1 LotNO FROM ICSInventoryLot WHERE EATTRIBUTE1='{0}' AND WorkPoint='{1}'
  3541. ORDER BY CAST(SUBSTRING(LotNO, (LEN(LotNO)-CHARINDEX('-',REVERSE(LotNO))+1)+1,CHARINDEX('-',REVERSE(LotNO))-1) AS INT) DESC";
  3542. sql = string.Format(sql, LotNo, WorkPoint);
  3543. dt = DBHelper.SQlReturnData(sql, cmd);
  3544. if (dt.Rows.Count == 0)
  3545. {
  3546. lotstr = LotNo + "-" + 1;
  3547. }
  3548. else
  3549. {
  3550. lotstr = LotNo + "-" + (Convert.ToInt32(dt.Rows[0]["LotNO"].ToString().Split('-')[dt.Rows[0]["LotNO"].ToString().Split('-').Length - 1]) + 1).ToString();
  3551. }
  3552. NewBarCodeList.Add(lotstr);//将分批后新条码添加到新集合
  3553. #endregion
  3554. #region 将分批后的条码记录插入条码表,库存表及日志表并将原条码库存数量清零
  3555. sql = @"INSERT INTO ICSInventoryLot(ID,LotNo,InvCode,ProductDate,ExpirationDate,
  3556. Quantity,Amount,ExtensionID,Type,PrintTimes,
  3557. LastPrintUser,LastPrintTime,MUSER,MUSERName,MTIME,
  3558. WorkPoint,EATTRIBUTE1,EATTRIBUTE2,EATTRIBUTE3,EATTRIBUTE4,EATTRIBUTE5,EATTRIBUTE6,EATTRIBUTE7,EATTRIBUTE8,
  3559. EATTRIBUTE9,EATTRIBUTE10,EATTRIBUTE11,EATTRIBUTE12,EATTRIBUTE13,EATTRIBUTE14,EATTRIBUTE15,EATTRIBUTE16,EATTRIBUTE17,EATTRIBUTE18,EATTRIBUTE19,EATTRIBUTE20,
  3560. EATTRIBUTE21,EATTRIBUTE22,EATTRIBUTE23,EATTRIBUTE24,EATTRIBUTE25,EATTRIBUTE26,EATTRIBUTE27,EATTRIBUTE28,EATTRIBUTE29,EATTRIBUTE30)
  3561. SELECT TOP 1 NEWID(),'{0}',a.InvCode,a.ProductDate,a.ExpirationDate,
  3562. '{2}',a.Amount/a.Quantity*Quantity,a.ExtensionID,a.Type,a.PrintTimes,
  3563. a.LastPrintUser,a.LastPrintTime,a.MUSER ,a.MUSERName ,GETDATE(),
  3564. a.WorkPoint ,'{1}',a.EATTRIBUTE2,a.EATTRIBUTE3,a.EATTRIBUTE4,a.EATTRIBUTE5,a.EATTRIBUTE6,a.EATTRIBUTE7,a.EATTRIBUTE8,
  3565. a.EATTRIBUTE9,a.EATTRIBUTE10,a.EATTRIBUTE11,a.EATTRIBUTE12,a.EATTRIBUTE13,a.EATTRIBUTE14,a.EATTRIBUTE15,a.EATTRIBUTE16,a.EATTRIBUTE17,a.EATTRIBUTE18,a.EATTRIBUTE19,a.EATTRIBUTE20,
  3566. a.EATTRIBUTE21,a.EATTRIBUTE22,a.EATTRIBUTE23,a.EATTRIBUTE24,a.EATTRIBUTE25,a.EATTRIBUTE26,a.EATTRIBUTE27,a.EATTRIBUTE28,a.EATTRIBUTE29,a.EATTRIBUTE30
  3567. From ICSInventoryLot a
  3568. where a.LotNo='{1}' and a.WorkPoint='{3}'";
  3569. sql = string.Format(sql, lotstr, LotNo, Quantity, WorkPoint);
  3570. cmd.CommandText = sql;
  3571. result = cmd.ExecuteNonQuery();
  3572. if (result <= 0)
  3573. {
  3574. throw new Exception(language.GetNameByCode("WMSAPIInfo195"));//条码分批后条码表存入失败!
  3575. }
  3576. sql = @"INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  3577. select NEWID(),'{0}',WarehouseCode,LocationCode,InvCode,'0',InDate,LockQuantity
  3578. ,MUSER,MUSERName,GETDATE(),'{3}',''
  3579. from ICSWareHouseLotInfo
  3580. where LotNO='{1}' AND WorkPoint='{3}'";
  3581. sql = string.Format(sql, lotstr, LotNo, Quantity, WorkPoint);
  3582. cmd.CommandText = sql;
  3583. result = cmd.ExecuteNonQuery();
  3584. if (result <= 0)
  3585. {
  3586. throw new Exception(language.GetNameByCode("WMSAPIInfo196"));//条码分批后库存表存入失败!
  3587. }
  3588. //插入条码单据表
  3589. sql = @"INSERT INTO ICSInventoryLotDetail(LotNo,TransID,TransCode,TransSequence,MUSER,MUSERName,MTIME,WorkPoint)
  3590. SELECT '{3}','{4}',b.TransCode,b.TransSequence,f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint
  3591. FROM ICSInventoryLot a
  3592. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  3593. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  3594. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  3595. sql = string.Format(sql, LotNo, WorkPoint, User, lotstr, TransID);
  3596. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3597. {
  3598. throw new Exception(language.GetNameByCode("WMSAPIInfo174"));//"条码单据表写入失败!");
  3599. }
  3600. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransID,TransCode,TransSequence,LotNo,InvCode,
  3601. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  3602. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  3603. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  3604. MTIME,WorkPoint,EATTRIBUTE1,LogID)
  3605. SELECT NEWID(),'{3}','{11}','{4}','{5}','{10}' ,a.InvCode ,
  3606. c.WarehouseCode,c.LocationCode,'','','{6}',
  3607. '','0','{7}','{8}','0','',
  3608. '','','',f.F_Account ,f.F_RealName ,
  3609. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  3610. FROM ICSInventoryLot a
  3611. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  3612. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  3613. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  3614. ";
  3615. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID, lotstr, TransID);
  3616. cmd.CommandText = sql;
  3617. result = cmd.ExecuteNonQuery();
  3618. if (result <= 0)
  3619. {
  3620. throw new Exception(language.GetNameByCode("WMSAPIInfo197"));//条码分批后库存日志表存入失败!
  3621. }
  3622. ///添加日志
  3623. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  3624. BEGIN
  3625. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  3626. RETURN
  3627. END
  3628. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransID,TransCode,TransSequence,LotNo,InvCode,
  3629. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  3630. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  3631. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  3632. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  3633. SELECT NEWID(),'{3}','{10}','{4}','{5}',a.LotNo ,a.InvCode ,
  3634. c.WarehouseCode,c.LocationCode,'','',c.Quantity,
  3635. '','0','{7}','32','0','',
  3636. '','','',f.F_Account ,f.F_RealName ,
  3637. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  3638. FROM ICSInventoryLot a
  3639. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  3640. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  3641. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  3642. ";
  3643. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID, TransID);
  3644. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3645. {
  3646. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  3647. }
  3648. if (PrintEnable.Equals("True") && DisPrintEnable.Equals("True"))
  3649. {
  3650. string PrintData = DBHelper.ReadPrintStream();
  3651. sql = @"" + PrintData + "";
  3652. //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
  3653. // from ICSWareHouseLotInfolog A
  3654. // left join ICSInventoryLot B on A.LotNO=B.LotNO and a.WorkPoint=b.WorkPoint
  3655. // left join ICSWareHouseLotInfo C ON A.LotNO=C.LotNO and a.WorkPoint=c.WorkPoint
  3656. // left join ICSInventory D on b.INVCODE=d.INVCODE and b.WorkPoint=d.WorkPoint
  3657. // where A.lotno ='{0}' and a.workpoint='{1}' and a.BusinessCode='{2}'
  3658. // ";
  3659. sql = string.Format(sql, LotNo, WorkPoint, BusinessCode, Identification);
  3660. log.Debug("打印数据源:" + sql);
  3661. dtLotno = DBHelper.SQlReturnData(sql, cmd);
  3662. lstDt = dtLotno;
  3663. }
  3664. #endregion
  3665. }
  3666. else
  3667. {
  3668. NewBarCodeList.Add(LotNo);
  3669. ///添加日志
  3670. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  3671. BEGIN
  3672. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  3673. RETURN
  3674. END
  3675. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransID,TransCode,TransSequence,LotNo,InvCode,
  3676. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  3677. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  3678. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  3679. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  3680. SELECT NEWID(),'{3}','{10}','{4}','{5}',a.LotNo ,a.InvCode ,
  3681. c.WarehouseCode,c.LocationCode,'','','{6}',
  3682. '','0','{7}','{8}','0','',
  3683. '','','',f.F_Account ,f.F_RealName ,
  3684. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  3685. FROM ICSInventoryLot a
  3686. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  3687. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  3688. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  3689. ";
  3690. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID, TransID);
  3691. log.Debug("出库日志" + sql);
  3692. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3693. {
  3694. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  3695. }
  3696. ZLtable = ICSControlModeService.GetZL();
  3697. if (ZLtable == null)
  3698. {
  3699. throw new Exception(language.GetNameByCode("WMSAPIInfo471"));
  3700. }
  3701. for (int i = 0; i < ZLtable.Rows.Count; i++)
  3702. {
  3703. string zlTransCode = ZLtable.Rows[i]["BusinessCode"].ToString();
  3704. string Enable = ZLtable.Rows[i]["Enable"].ToString();
  3705. if (zlTransCode.Equals(BusinessCode))
  3706. {
  3707. isDis = true;
  3708. if (Enable.Equals("True"))
  3709. {
  3710. ///更新日志
  3711. sql = @"
  3712. 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}')
  3713. BEGIN
  3714. RAISERROR('" + language.GetNameByCode("WMSAPIInfo472") + @"',16,1);
  3715. RETURN
  3716. END
  3717. UPDATE ICSWareHouseLotInfoLog SET EATTRIBUTE2='1' WHERE LotNo='{0}' AND WorkPoint='{1}' and transtype='15' and TransCode='{3}' and TransSequence='{4}'
  3718. ";
  3719. sql = string.Format(sql, LotNo, WorkPoint, LogID, TransCode, TransSequence);
  3720. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3721. {
  3722. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"占料标识更新失败!");
  3723. }
  3724. ///更新库存
  3725. sql = @"DECLARE @ReservedQuantity VARCHAR(10);
  3726. SELECT @ReservedQuantity = CAST(b.Quantity AS VARCHAR(10))
  3727. FROM ICSReserve b
  3728. INNER JOIN ICSWareHouseLotInfo a
  3729. ON a.invcode = b.invcode
  3730. AND a.workpoint = b.workpoint
  3731. AND a.warehousecode = b.whcode
  3732. WHERE '{4}' < b.Quantity
  3733. AND b.invcode = '{3}'
  3734. AND GETDATE() > b.BeginTime
  3735. AND GETDATE() < b.EndTime;
  3736. IF EXISTS(SELECT * FROM ICSWareHouseLotInfo a
  3737. INNER JOIN ICSReserve b ON a.invcode=b.invcode
  3738. AND a.workpoint=b.workpoint
  3739. AND a.warehousecode=b.whcode
  3740. WHERE a.invcode='{3}'
  3741. AND a.workpoint='{1}'
  3742. AND SYSDATETIME() > b.BeginTime
  3743. AND SYSDATETIME() < b.EndTime
  3744. AND b.enable='1')
  3745. BEGIN
  3746. IF @ReservedQuantity IS NOT NULL
  3747. BEGIN
  3748. RAISERROR('''{3}'',''{4}'''' + @ReservedQuantity + ''!', 16, 1);
  3749. RETURN
  3750. END
  3751. END
  3752. UPDATE ICSWareHouseLotInfo
  3753. SET Quantity = ISNULL(Quantity, 0) - '{2}',
  3754. LockQuantity = ISNULL(LockQuantity, 0) - '{2}'
  3755. WHERE LotNo = '{0}'
  3756. AND WorkPoint = '{1}';
  3757. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a
  3758. WHERE a.LotNo = '{0}'
  3759. AND a.WorkPoint = '{1}'
  3760. AND Quantity - LockQuantity < 0)
  3761. BEGIN
  3762. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"', 16, 1);
  3763. RETURN
  3764. END
  3765. ";
  3766. sql = string.Format(sql, LotNo, WorkPoint, Quantity, INVCODE, SUMQTY);
  3767. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3768. {
  3769. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  3770. }
  3771. }
  3772. else
  3773. {
  3774. if (InvOQc.Equals("True"))
  3775. {
  3776. sql = @"select a.id from ICSWareHouseLotInfo a
  3777. inner JOIN ICSInspectDetail b ON a.WorkPoint=b.WorkPoint and a.LotNo=b.LotNo
  3778. where a.LotNo='{0}' and a.WorkPoint='{1}' ";//and a.Inspect = '0'
  3779. sql = string.Format(sql, LotNo, WorkPoint);
  3780. DataTable Inspectdtt = DBHelper.SQlReturnData(sql, cmd);
  3781. if (Inspectdtt.Rows.Count > 0 && Inspectdtt != null)
  3782. {
  3783. sql = @"select a.id from ICSWareHouseLotInfo a
  3784. inner JOIN ICSInspectDetail b ON a.WorkPoint=b.WorkPoint and a.LotNo=b.LotNo
  3785. where a.LotNo='{0}' and a.WorkPoint='{1}' and a.Inspect = '0'";
  3786. sql = string.Format(sql, LotNo, WorkPoint);
  3787. DataTable InspectNewdtt = DBHelper.SQlReturnData(sql, cmd);
  3788. if (InspectNewdtt.Rows.Count == 0 || InspectNewdtt == null)
  3789. {
  3790. throw new Exception("条码在库检验,未检验完成,请确认!");
  3791. }
  3792. }
  3793. }
  3794. ///更新库存
  3795. sql = @"DECLARE @ReservedQuantity VARCHAR(10);
  3796. SELECT @ReservedQuantity = CAST(b.Quantity AS VARCHAR(10))
  3797. FROM ICSReserve b
  3798. INNER JOIN ICSWareHouseLotInfo a
  3799. ON a.invcode = b.invcode
  3800. AND a.workpoint = b.workpoint
  3801. AND a.warehousecode = b.whcode
  3802. WHERE '{4}' < b.Quantity
  3803. AND b.invcode = '{3}'
  3804. AND GETDATE() > b.BeginTime
  3805. AND GETDATE() < b.EndTime;
  3806. IF EXISTS(SELECT * FROM ICSWareHouseLotInfo a
  3807. INNER JOIN ICSReserve b ON a.invcode=b.invcode
  3808. AND a.workpoint=b.workpoint
  3809. AND a.warehousecode=b.whcode
  3810. WHERE a.invcode='{3}'
  3811. AND a.workpoint='{1}'
  3812. AND SYSDATETIME() > b.BeginTime
  3813. AND SYSDATETIME() < b.EndTime
  3814. AND b.enable='1')
  3815. BEGIN
  3816. IF @ReservedQuantity IS NOT NULL
  3817. BEGIN
  3818. RAISERROR('''{3}'',''{4}'''' + @ReservedQuantity + ''!', 16, 1);
  3819. RETURN
  3820. END
  3821. END
  3822. UPDATE ICSWareHouseLotInfo
  3823. SET Quantity = ISNULL(Quantity, 0) - '{2}'
  3824. WHERE LotNo = '{0}'
  3825. AND WorkPoint = '{1}';
  3826. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a
  3827. WHERE a.LotNo = '{0}'
  3828. AND a.WorkPoint = '{1}'
  3829. AND Quantity - LockQuantity < 0)
  3830. BEGIN
  3831. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"', 16, 1);
  3832. RETURN
  3833. END
  3834. ";
  3835. sql = string.Format(sql, LotNo, WorkPoint, Quantity, INVCODE, SUMQTY);
  3836. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3837. {
  3838. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  3839. }
  3840. }
  3841. }
  3842. // else { throw new Exception("单据类型未配置!"); }
  3843. }
  3844. //if (isDis == false)
  3845. //{
  3846. // throw new Exception("单据类型未配置!");
  3847. //}
  3848. /////更新库存
  3849. //sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  3850. // IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity<0)
  3851. // BEGIN
  3852. // RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  3853. // RETURN
  3854. // END";
  3855. //sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  3856. //if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3857. //{
  3858. // throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  3859. //}
  3860. }
  3861. }
  3862. }
  3863. catch (Exception)
  3864. {
  3865. throw;
  3866. }
  3867. return lstDt;
  3868. }
  3869. /// <summary>
  3870. /// 减少库存(库存表四舍五入)
  3871. /// </summary>
  3872. /// <param name="Identification"></param>
  3873. /// <param name="TransCode"></param>
  3874. /// <param name="TransSequence"></param>
  3875. /// <param name="LotNo"></param>
  3876. /// <param name="Quantity"></param>
  3877. /// <param name="User"></param>
  3878. /// <param name="WorkPoint"></param>
  3879. /// <param name="TransType"></param>
  3880. /// <param name="BusinessCode"></param>
  3881. /// <param name="cmd"></param>
  3882. /// <param name="language"></param>
  3883. /// <param name="LogID"></param>
  3884. /// <param name="TransID"></param>
  3885. /// <param name="MergeID"></param>
  3886. /// <returns></returns>
  3887. public static DataTable WareHouseLotInfoDownRound(string Identification, string TransCode, string TransSequence, string LotNo, string Quantity, string User,
  3888. string WorkPoint, string TransType, string BusinessCode, SqlCommand cmd, Dictionary<string, string> language, string LogID, string TransID, string MergeID = "")
  3889. {
  3890. decimal LotQTYYY = 0;
  3891. decimal LotQTY = 0;
  3892. decimal SUMQTY = 0;
  3893. string INVCODE = "";
  3894. string Inspect = "";
  3895. string LotEnable = "";
  3896. string LotDocEnable = "";
  3897. string InvOQc = "";
  3898. string chekEnable = "";
  3899. string DisPrintEnable = "";
  3900. string PrintEnable = "";
  3901. string sql = "";
  3902. string lotstr = "";
  3903. string RoundedQuantity = Quantity;//记录四舍五入后的数量
  3904. int result = 0;
  3905. bool isDis = false;
  3906. List<string> NewBarCodeList = new List<string>();
  3907. DataTable dtLotno = new DataTable();
  3908. DataTable lstDt = new DataTable();
  3909. DataTable ZLtable = new DataTable();
  3910. try
  3911. {
  3912. //获取小数位数
  3913. sql = @"SELECT Figure FROM ICSConfiguration WHERE Code='Figure001' AND WorkPoint='{0}'";
  3914. sql = string.Format(sql, WorkPoint);
  3915. int figureNum = (int)(DBHelper.ExecuteScalar(sql, cmd));
  3916. //进行四舍五入操作
  3917. if(decimal.TryParse(Quantity,out decimal numericQuantity))
  3918. {
  3919. RoundedQuantity = Math.Round(numericQuantity,figureNum).ToString();
  3920. }
  3921. //检验是否分批
  3922. sql = @"SELECT b.LotEnable,b.PrintEnable,b.InvOQC,b.LotDocEnable FROM ICSInventoryLot a
  3923. LEFT JOIN ICSInventory b ON a.InvCode=b.InvCode AND a.WorkPoint=b.WorkPoint
  3924. where a.LotNo='{0}' and a.WorkPoint='{1}'
  3925. ";
  3926. sql = string.Format(sql, LotNo, WorkPoint);
  3927. DataTable dt = DBHelper.SQlReturnData(sql, cmd);
  3928. if (dt.Rows.Count == 0)
  3929. {
  3930. throw new Exception(language.GetNameByCode("WMSAPIInfo369"));
  3931. }
  3932. else
  3933. {
  3934. LotEnable = dt.Rows[0]["LotEnable"].ToString();
  3935. LotDocEnable = dt.Rows[0]["LotDocEnable"].ToString();
  3936. PrintEnable = dt.Rows[0]["PrintEnable"].ToString();
  3937. InvOQc = dt.Rows[0]["InvOQC"].ToString();
  3938. }
  3939. log.Debug("INVOQC:" + InvOQc);
  3940. 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
  3941. from Sys_SRM_Items a
  3942. left join Sys_SRM_ItemsDetail b on a.F_Id=b.F_ItemId
  3943. where a.F_EnCode='TransBatch' and b.F_ItemCode='{0}' )
  3944. BEGIN
  3945. RAISERROR('" + language.GetNameByCode("WMSAPIInfo470") + @"',16,1);
  3946. RETURN
  3947. END
  3948. select b.F_ItemCode as Code ,b.F_ItemName as Name,b.F_EnabledMark AS Enable ,b.F_IsDefault AS DisPrintEnable
  3949. from Sys_SRM_Items a
  3950. left join Sys_SRM_ItemsDetail b on a.F_Id=b.F_ItemId
  3951. where a.F_EnCode='TransBatch' and b.F_ItemCode='{0}'
  3952. ";
  3953. cheksql = string.Format(cheksql, BusinessCode);
  3954. DataTable chekdt = DBHelper.SQlReturnData(cheksql, cmd);
  3955. if (chekdt.Rows.Count == 0)
  3956. {
  3957. throw new Exception(language.GetNameByCode("WMSAPIInfo369"));
  3958. }
  3959. else
  3960. {
  3961. chekEnable = chekdt.Rows[0]["Enable"].ToString();
  3962. DisPrintEnable = chekdt.Rows[0]["DisPrintEnable"].ToString();
  3963. }
  3964. sql = @"select Quantity,invcode,Inspect from ICSWareHouseLotInfo
  3965. where LotNO='{0}' AND WorkPoint='{1}'";
  3966. sql = string.Format(sql, LotNo, WorkPoint);
  3967. DataTable dtt = DBHelper.SQlReturnData(sql, cmd);
  3968. LotQTYYY = Convert.ToDecimal(dtt.Rows[0]["Quantity"]);
  3969. LotQTY = Convert.ToDecimal(RoundedQuantity);
  3970. INVCODE = dtt.Rows[0]["invcode"].ToString();
  3971. Inspect = dtt.Rows[0]["Inspect"].ToString();
  3972. sql = @"SELECT SUM(a.quantity)-'{3}' AS SumQTY FROM ICSWareHouseLotInfo a
  3973. INNER JOIN ICSReserve b ON a.invcode=b.invcode and a.workpoint=b.workpoint
  3974. where a.invcode='{2}' and a.workpoint='{1}' and GETDATE()>b.BeginTime and GETDATE()<b.EndTime";
  3975. sql = string.Format(sql, LotNo, WorkPoint, INVCODE, RoundedQuantity);
  3976. DataTable Sumdtt = DBHelper.SQlReturnData(sql, cmd);
  3977. log.Debug(Sumdtt.Rows[0]["SumQTY"]);
  3978. SUMQTY = 0;
  3979. //Convert.ToDecimal(Sumdtt.Rows[0]["SumQTY"]);
  3980. if (LotDocEnable.Equals("True"))
  3981. {
  3982. if (LotEnable.Equals("True") && chekEnable.Equals("True") && LotQTYYY - LotQTY > 0)
  3983. {
  3984. ZLtable = ICSControlModeService.GetZL();
  3985. if (ZLtable == null)
  3986. {
  3987. throw new Exception(language.GetNameByCode("WMSAPIInfo471"));
  3988. }
  3989. for (int i = 0; i < ZLtable.Rows.Count; i++)
  3990. {
  3991. string zlName = ZLtable.Rows[i]["Name"].ToString();
  3992. string zlTransCode = ZLtable.Rows[i]["BusinessCode"].ToString();
  3993. string Enable = ZLtable.Rows[i]["Enable"].ToString();
  3994. if (zlTransCode.Equals(BusinessCode))
  3995. {
  3996. if (Enable.Equals("True"))
  3997. {
  3998. ///更新日志
  3999. sql = @"
  4000. 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}')
  4001. BEGIN
  4002. RAISERROR('" + language.GetNameByCode("WMSAPIInfo472") + @"',16,1);
  4003. RETURN
  4004. END
  4005. UPDATE ICSWareHouseLotInfoLog SET EATTRIBUTE2='1' WHERE LotNo='{0}' AND WorkPoint='{1}' and transtype='15' and TransCode='{3}' and TransSequence='{4}'
  4006. ";
  4007. sql = string.Format(sql, LotNo, WorkPoint, LogID, TransCode, TransSequence);
  4008. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4009. {
  4010. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"占料标识更新失败!");
  4011. }
  4012. ///更新库存
  4013. sql = @"DECLARE @ReservedQuantity VARCHAR(10);
  4014. SELECT @ReservedQuantity = CAST(b.Quantity AS VARCHAR(10))
  4015. FROM ICSReserve b
  4016. INNER JOIN ICSWareHouseLotInfo a
  4017. ON a.invcode = b.invcode
  4018. AND a.workpoint = b.workpoint
  4019. AND a.warehousecode = b.whcode
  4020. WHERE '{4}' < b.Quantity
  4021. AND b.invcode = '{3}'
  4022. AND GETDATE() > b.BeginTime
  4023. AND GETDATE() < b.EndTime;
  4024. IF EXISTS(SELECT * FROM ICSWareHouseLotInfo a
  4025. INNER JOIN ICSReserve b ON a.invcode=b.invcode
  4026. AND a.workpoint=b.workpoint
  4027. AND a.warehousecode=b.whcode
  4028. WHERE a.invcode='{3}'
  4029. AND a.workpoint='{1}'
  4030. AND SYSDATETIME() > b.BeginTime
  4031. AND SYSDATETIME() < b.EndTime
  4032. AND b.enable='1')
  4033. BEGIN
  4034. IF @ReservedQuantity IS NOT NULL
  4035. BEGIN
  4036. RAISERROR('''{3}'',''{4}'''' + @ReservedQuantity + ''!', 16, 1);
  4037. RETURN
  4038. END
  4039. END
  4040. UPDATE ICSWareHouseLotInfo
  4041. SET Quantity = ISNULL(Quantity, 0) - '{2}',
  4042. LockQuantity = ISNULL(LockQuantity, 0) - '{2}'
  4043. WHERE LotNo = '{0}'
  4044. AND WorkPoint = '{1}';
  4045. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a
  4046. WHERE a.LotNo = '{0}'
  4047. AND a.WorkPoint = '{1}'
  4048. AND Quantity - LockQuantity < 0)
  4049. BEGIN
  4050. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"', 16, 1);
  4051. RETURN
  4052. END
  4053. ";
  4054. sql = string.Format(sql, LotNo, WorkPoint, RoundedQuantity, INVCODE, SUMQTY);
  4055. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4056. {
  4057. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  4058. }
  4059. }
  4060. else
  4061. {
  4062. if (InvOQc.Equals("True"))
  4063. {
  4064. sql = @"select a.id from ICSWareHouseLotInfo a
  4065. inner JOIN ICSInspectDetail b ON a.WorkPoint=b.WorkPoint and a.LotNo=b.LotNo
  4066. where a.LotNo='{0}' and a.WorkPoint='{1}' ";//and a.Inspect = '0'
  4067. sql = string.Format(sql, LotNo, WorkPoint);
  4068. DataTable Inspectdtt = DBHelper.SQlReturnData(sql, cmd);
  4069. if (Inspectdtt.Rows.Count > 0 && Inspectdtt != null)
  4070. {
  4071. sql = @"select a.id from ICSWareHouseLotInfo a
  4072. inner JOIN ICSInspectDetail b ON a.WorkPoint=b.WorkPoint and a.LotNo=b.LotNo
  4073. where a.LotNo='{0}' and a.WorkPoint='{1}' and a.Inspect = '0'";
  4074. sql = string.Format(sql, LotNo, WorkPoint);
  4075. DataTable InspectNewdtt = DBHelper.SQlReturnData(sql, cmd);
  4076. if (InspectNewdtt.Rows.Count == 0 || InspectNewdtt == null)
  4077. {
  4078. throw new Exception("条码在库检验,未检验完成,请确认!");
  4079. }
  4080. }
  4081. }
  4082. ///更新库存
  4083. sql = @"DECLARE @ReservedQuantity VARCHAR(10);
  4084. SELECT @ReservedQuantity = CAST(b.Quantity AS VARCHAR(10))
  4085. FROM ICSReserve b
  4086. INNER JOIN ICSWareHouseLotInfo a
  4087. ON a.invcode = b.invcode
  4088. AND a.workpoint = b.workpoint
  4089. AND a.warehousecode = b.whcode
  4090. WHERE '{4}' < b.Quantity
  4091. AND b.invcode = '{3}'
  4092. AND GETDATE() > b.BeginTime
  4093. AND GETDATE() < b.EndTime;
  4094. IF EXISTS(SELECT * FROM ICSWareHouseLotInfo a
  4095. INNER JOIN ICSReserve b ON a.invcode=b.invcode
  4096. AND a.workpoint=b.workpoint
  4097. AND a.warehousecode=b.whcode
  4098. WHERE a.invcode='{3}'
  4099. AND a.workpoint='{1}'
  4100. AND SYSDATETIME() > b.BeginTime
  4101. AND SYSDATETIME() < b.EndTime
  4102. AND b.enable='1')
  4103. BEGIN
  4104. IF @ReservedQuantity IS NOT NULL
  4105. BEGIN
  4106. RAISERROR('''{3}'',''{4}'''' + @ReservedQuantity + ''!', 16, 1);
  4107. RETURN
  4108. END
  4109. END
  4110. UPDATE ICSWareHouseLotInfo
  4111. SET Quantity = ISNULL(Quantity, 0) - '{2}'
  4112. WHERE LotNo = '{0}'
  4113. AND WorkPoint = '{1}';
  4114. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a
  4115. WHERE a.LotNo = '{0}'
  4116. AND a.WorkPoint = '{1}'
  4117. AND Quantity - LockQuantity < 0)
  4118. BEGIN
  4119. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"', 16, 1);
  4120. RETURN
  4121. END
  4122. ";
  4123. sql = string.Format(sql, LotNo, WorkPoint, RoundedQuantity, INVCODE, SUMQTY);
  4124. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4125. {
  4126. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  4127. }
  4128. }
  4129. }
  4130. }
  4131. ///分批前添加日志
  4132. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  4133. BEGIN
  4134. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  4135. RETURN
  4136. END
  4137. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransID,TransCode,TransSequence,LotNo,InvCode,
  4138. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  4139. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  4140. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  4141. MTIME,WorkPoint,EATTRIBUTE1)
  4142. SELECT NEWID(),'{3}','{9}','{7}','{8}',a.LotNo ,a.InvCode ,
  4143. c.WarehouseCode,c.LocationCode,'','',c.Quantity+{6},
  4144. '','0','{4}','31','0','',
  4145. '','','',f.F_Account ,f.F_RealName ,
  4146. SYSDATETIME() ,a.WorkPoint ,''
  4147. FROM ICSInventoryLot a
  4148. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  4149. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  4150. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  4151. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  4152. ";
  4153. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransType, BusinessCode, Quantity, TransCode, TransSequence, TransID);
  4154. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4155. {
  4156. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  4157. }
  4158. #region 获取分批后的条码(lotstr)
  4159. sql = @"SELECT TOP 1 LotNO FROM ICSInventoryLot WHERE EATTRIBUTE1='{0}' AND WorkPoint='{1}'
  4160. ORDER BY CAST(SUBSTRING(LotNO, (LEN(LotNO)-CHARINDEX('-',REVERSE(LotNO))+1)+1,CHARINDEX('-',REVERSE(LotNO))-1) AS INT) DESC";
  4161. sql = string.Format(sql, LotNo, WorkPoint);
  4162. dt = DBHelper.SQlReturnData(sql, cmd);
  4163. if (dt.Rows.Count == 0)
  4164. {
  4165. lotstr = LotNo + "-" + 1;
  4166. }
  4167. else
  4168. {
  4169. lotstr = LotNo + "-" + (Convert.ToInt32(dt.Rows[0]["LotNO"].ToString().Split('-')[dt.Rows[0]["LotNO"].ToString().Split('-').Length - 1]) + 1).ToString();
  4170. }
  4171. NewBarCodeList.Add(lotstr);//将分批后新条码添加到新集合
  4172. #endregion
  4173. #region 将分批后的条码记录插入条码表,库存表及日志表并将原条码库存数量清零
  4174. sql = @"INSERT INTO ICSInventoryLot(ID,LotNo,InvCode,ProductDate,ExpirationDate,
  4175. Quantity,Amount,ExtensionID,Type,PrintTimes,
  4176. LastPrintUser,LastPrintTime,MUSER,MUSERName,MTIME,
  4177. WorkPoint,EATTRIBUTE1,EATTRIBUTE2,EATTRIBUTE3,EATTRIBUTE4,EATTRIBUTE5,EATTRIBUTE6,EATTRIBUTE7,EATTRIBUTE8,
  4178. EATTRIBUTE9,EATTRIBUTE10,EATTRIBUTE11,EATTRIBUTE12,EATTRIBUTE13,EATTRIBUTE14,EATTRIBUTE15,EATTRIBUTE16,EATTRIBUTE17,EATTRIBUTE18,EATTRIBUTE19,EATTRIBUTE20,
  4179. EATTRIBUTE21,EATTRIBUTE22,EATTRIBUTE23,EATTRIBUTE24,EATTRIBUTE25,EATTRIBUTE26,EATTRIBUTE27,EATTRIBUTE28,EATTRIBUTE29,EATTRIBUTE30)
  4180. SELECT TOP 1 NEWID(),'{0}',a.InvCode,a.ProductDate,a.ExpirationDate,
  4181. '{2}',a.Amount/a.Quantity*Quantity,a.ExtensionID,a.Type,a.PrintTimes,
  4182. a.LastPrintUser,a.LastPrintTime,a.MUSER ,a.MUSERName ,GETDATE(),
  4183. a.WorkPoint ,'{1}',a.EATTRIBUTE2,a.EATTRIBUTE3,a.EATTRIBUTE4,a.EATTRIBUTE5,a.EATTRIBUTE6,a.EATTRIBUTE7,a.EATTRIBUTE8,
  4184. a.EATTRIBUTE9,a.EATTRIBUTE10,a.EATTRIBUTE11,a.EATTRIBUTE12,a.EATTRIBUTE13,a.EATTRIBUTE14,a.EATTRIBUTE15,a.EATTRIBUTE16,a.EATTRIBUTE17,a.EATTRIBUTE18,a.EATTRIBUTE19,a.EATTRIBUTE20,
  4185. a.EATTRIBUTE21,a.EATTRIBUTE22,a.EATTRIBUTE23,a.EATTRIBUTE24,a.EATTRIBUTE25,a.EATTRIBUTE26,a.EATTRIBUTE27,a.EATTRIBUTE28,a.EATTRIBUTE29,a.EATTRIBUTE30
  4186. From ICSInventoryLot a
  4187. where a.LotNo='{1}' and a.WorkPoint='{3}'";
  4188. sql = string.Format(sql, lotstr, LotNo, RoundedQuantity, WorkPoint);
  4189. cmd.CommandText = sql;
  4190. result = cmd.ExecuteNonQuery();
  4191. if (result <= 0)
  4192. {
  4193. throw new Exception(language.GetNameByCode("WMSAPIInfo195"));//条码分批后条码表存入失败!
  4194. }
  4195. sql = @"INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  4196. select NEWID(),'{0}',WarehouseCode,LocationCode,InvCode,'0',InDate,LockQuantity
  4197. ,MUSER,MUSERName,GETDATE(),'{3}',''
  4198. from ICSWareHouseLotInfo
  4199. where LotNO='{1}' AND WorkPoint='{3}'";
  4200. sql = string.Format(sql, lotstr, LotNo, RoundedQuantity, WorkPoint);
  4201. cmd.CommandText = sql;
  4202. result = cmd.ExecuteNonQuery();
  4203. if (result <= 0)
  4204. {
  4205. throw new Exception(language.GetNameByCode("WMSAPIInfo196"));//条码分批后库存表存入失败!
  4206. }
  4207. //插入条码单据表
  4208. sql = @"INSERT INTO ICSInventoryLotDetail(LotNo,TransID,TransCode,TransSequence,MUSER,MUSERName,MTIME,WorkPoint)
  4209. SELECT '{3}','{4}',b.TransCode,b.TransSequence,f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint
  4210. FROM ICSInventoryLot a
  4211. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  4212. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  4213. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  4214. sql = string.Format(sql, LotNo, WorkPoint, User, lotstr, TransID);
  4215. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4216. {
  4217. throw new Exception(language.GetNameByCode("WMSAPIInfo174"));//"条码单据表写入失败!");
  4218. }
  4219. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransID,TransCode,TransSequence,LotNo,InvCode,
  4220. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  4221. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  4222. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  4223. MTIME,WorkPoint,EATTRIBUTE1,LogID)
  4224. SELECT NEWID(),'{3}','{11}','{4}','{5}','{10}' ,a.InvCode ,
  4225. c.WarehouseCode,c.LocationCode,'','','{6}',
  4226. '','0','{7}','{8}','0','',
  4227. '','','',f.F_Account ,f.F_RealName ,
  4228. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  4229. FROM ICSInventoryLot a
  4230. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  4231. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  4232. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  4233. ";
  4234. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID, lotstr, TransID);
  4235. cmd.CommandText = sql;
  4236. result = cmd.ExecuteNonQuery();
  4237. if (result <= 0)
  4238. {
  4239. throw new Exception(language.GetNameByCode("WMSAPIInfo197"));//条码分批后库存日志表存入失败!
  4240. }
  4241. ///添加日志
  4242. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  4243. BEGIN
  4244. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  4245. RETURN
  4246. END
  4247. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransID,TransCode,TransSequence,LotNo,InvCode,
  4248. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  4249. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  4250. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  4251. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  4252. SELECT NEWID(),'{3}','{10}','{4}','{5}',a.LotNo ,a.InvCode ,
  4253. c.WarehouseCode,c.LocationCode,'','',c.Quantity,
  4254. '','0','{7}','32','0','',
  4255. '','','',f.F_Account ,f.F_RealName ,
  4256. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  4257. FROM ICSInventoryLot a
  4258. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  4259. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  4260. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  4261. ";
  4262. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID, TransID);
  4263. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4264. {
  4265. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  4266. }
  4267. if (PrintEnable.Equals("True") && DisPrintEnable.Equals("True"))
  4268. {
  4269. string PrintData = DBHelper.ReadPrintStream();
  4270. sql = @"" + PrintData + "";
  4271. //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
  4272. // from ICSWareHouseLotInfolog A
  4273. // left join ICSInventoryLot B on A.LotNO=B.LotNO and a.WorkPoint=b.WorkPoint
  4274. // left join ICSWareHouseLotInfo C ON A.LotNO=C.LotNO and a.WorkPoint=c.WorkPoint
  4275. // left join ICSInventory D on b.INVCODE=d.INVCODE and b.WorkPoint=d.WorkPoint
  4276. // where A.lotno ='{0}' and a.workpoint='{1}' and a.BusinessCode='{2}'
  4277. // ";
  4278. sql = string.Format(sql, LotNo, WorkPoint, BusinessCode, Identification);
  4279. dtLotno = DBHelper.SQlReturnData(sql, cmd);
  4280. lstDt = dtLotno;
  4281. }
  4282. #endregion
  4283. }
  4284. else
  4285. {
  4286. NewBarCodeList.Add(LotNo);
  4287. ///添加日志
  4288. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  4289. BEGIN
  4290. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  4291. RETURN
  4292. END
  4293. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransID,TransCode,TransSequence,LotNo,InvCode,
  4294. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  4295. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  4296. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  4297. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  4298. SELECT NEWID(),'{3}','{10}','{4}','{5}',a.LotNo ,a.InvCode ,
  4299. c.WarehouseCode,c.LocationCode,'','','{6}',
  4300. '','0','{7}','{8}','0','',
  4301. '','','',f.F_Account ,f.F_RealName ,
  4302. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  4303. FROM ICSInventoryLot a
  4304. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  4305. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  4306. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  4307. ";
  4308. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID, TransID);
  4309. log.Debug("出库日志" + sql);
  4310. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4311. {
  4312. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  4313. }
  4314. ZLtable = ICSControlModeService.GetZL();
  4315. if (ZLtable == null)
  4316. {
  4317. throw new Exception(language.GetNameByCode("WMSAPIInfo471"));
  4318. }
  4319. for (int i = 0; i < ZLtable.Rows.Count; i++)
  4320. {
  4321. string zlTransCode = ZLtable.Rows[i]["BusinessCode"].ToString();
  4322. string Enable = ZLtable.Rows[i]["Enable"].ToString();
  4323. if (zlTransCode.Equals(BusinessCode))
  4324. {
  4325. isDis = true;
  4326. if (Enable.Equals("True"))
  4327. {
  4328. ///更新日志
  4329. sql = @"
  4330. 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}')
  4331. BEGIN
  4332. RAISERROR('" + language.GetNameByCode("WMSAPIInfo472") + @"',16,1);
  4333. RETURN
  4334. END
  4335. UPDATE ICSWareHouseLotInfoLog SET EATTRIBUTE2='1' WHERE LotNo='{0}' AND WorkPoint='{1}' and transtype='15' and TransCode='{3}' and TransSequence='{4}'
  4336. ";
  4337. sql = string.Format(sql, LotNo, WorkPoint, LogID, TransCode, TransSequence);
  4338. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4339. {
  4340. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"占料标识更新失败!");
  4341. }
  4342. ///更新库存
  4343. sql = @"DECLARE @ReservedQuantity VARCHAR(10);
  4344. SELECT @ReservedQuantity = CAST(b.Quantity AS VARCHAR(10))
  4345. FROM ICSReserve b
  4346. INNER JOIN ICSWareHouseLotInfo a
  4347. ON a.invcode = b.invcode
  4348. AND a.workpoint = b.workpoint
  4349. AND a.warehousecode = b.whcode
  4350. WHERE '{4}' < b.Quantity
  4351. AND b.invcode = '{3}'
  4352. AND GETDATE() > b.BeginTime
  4353. AND GETDATE() < b.EndTime;
  4354. IF EXISTS(SELECT * FROM ICSWareHouseLotInfo a
  4355. INNER JOIN ICSReserve b ON a.invcode=b.invcode
  4356. AND a.workpoint=b.workpoint
  4357. AND a.warehousecode=b.whcode
  4358. WHERE a.invcode='{3}'
  4359. AND a.workpoint='{1}'
  4360. AND SYSDATETIME() > b.BeginTime
  4361. AND SYSDATETIME() < b.EndTime
  4362. AND b.enable='1')
  4363. BEGIN
  4364. IF @ReservedQuantity IS NOT NULL
  4365. BEGIN
  4366. RAISERROR('''{3}'',''{4}'''' + @ReservedQuantity + ''!', 16, 1);
  4367. RETURN
  4368. END
  4369. END
  4370. UPDATE ICSWareHouseLotInfo
  4371. SET Quantity = ISNULL(Quantity, 0) - '{2}',
  4372. LockQuantity = ISNULL(LockQuantity, 0) - '{2}'
  4373. WHERE LotNo = '{0}'
  4374. AND WorkPoint = '{1}';
  4375. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a
  4376. WHERE a.LotNo = '{0}'
  4377. AND a.WorkPoint = '{1}'
  4378. AND Quantity - LockQuantity < 0)
  4379. BEGIN
  4380. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"', 16, 1);
  4381. RETURN
  4382. END
  4383. ";
  4384. sql = string.Format(sql, LotNo, WorkPoint, RoundedQuantity, INVCODE, SUMQTY);
  4385. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4386. {
  4387. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  4388. }
  4389. }
  4390. else
  4391. {
  4392. if (InvOQc.Equals("True"))
  4393. {
  4394. sql = @"select a.id from ICSWareHouseLotInfo a
  4395. inner JOIN ICSInspectDetail b ON a.WorkPoint=b.WorkPoint and a.LotNo=b.LotNo
  4396. where a.LotNo='{0}' and a.WorkPoint='{1}' ";//and a.Inspect = '0'
  4397. sql = string.Format(sql, LotNo, WorkPoint);
  4398. DataTable Inspectdtt = DBHelper.SQlReturnData(sql, cmd);
  4399. if (Inspectdtt.Rows.Count > 0 && Inspectdtt != null)
  4400. {
  4401. sql = @"select a.id from ICSWareHouseLotInfo a
  4402. inner JOIN ICSInspectDetail b ON a.WorkPoint=b.WorkPoint and a.LotNo=b.LotNo
  4403. where a.LotNo='{0}' and a.WorkPoint='{1}' and a.Inspect = '0'";
  4404. sql = string.Format(sql, LotNo, WorkPoint);
  4405. DataTable InspectNewdtt = DBHelper.SQlReturnData(sql, cmd);
  4406. if (InspectNewdtt.Rows.Count == 0 || InspectNewdtt == null)
  4407. {
  4408. throw new Exception("条码在库检验,未检验完成,请确认!");
  4409. }
  4410. }
  4411. }
  4412. ///更新库存
  4413. sql = @"DECLARE @ReservedQuantity VARCHAR(10);
  4414. SELECT @ReservedQuantity = CAST(b.Quantity AS VARCHAR(10))
  4415. FROM ICSReserve b
  4416. INNER JOIN ICSWareHouseLotInfo a
  4417. ON a.invcode = b.invcode
  4418. AND a.workpoint = b.workpoint
  4419. AND a.warehousecode = b.whcode
  4420. WHERE '{4}' < b.Quantity
  4421. AND b.invcode = '{3}'
  4422. AND GETDATE() > b.BeginTime
  4423. AND GETDATE() < b.EndTime;
  4424. IF EXISTS(SELECT * FROM ICSWareHouseLotInfo a
  4425. INNER JOIN ICSReserve b ON a.invcode=b.invcode
  4426. AND a.workpoint=b.workpoint
  4427. AND a.warehousecode=b.whcode
  4428. WHERE a.invcode='{3}'
  4429. AND a.workpoint='{1}'
  4430. AND SYSDATETIME() > b.BeginTime
  4431. AND SYSDATETIME() < b.EndTime
  4432. AND b.enable='1')
  4433. BEGIN
  4434. IF @ReservedQuantity IS NOT NULL
  4435. BEGIN
  4436. RAISERROR('''{3}'',''{4}'''' + @ReservedQuantity + ''!', 16, 1);
  4437. RETURN
  4438. END
  4439. END
  4440. UPDATE ICSWareHouseLotInfo
  4441. SET Quantity = ISNULL(Quantity, 0) - '{2}'
  4442. WHERE LotNo = '{0}'
  4443. AND WorkPoint = '{1}';
  4444. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a
  4445. WHERE a.LotNo = '{0}'
  4446. AND a.WorkPoint = '{1}'
  4447. AND Quantity - LockQuantity < 0)
  4448. BEGIN
  4449. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"', 16, 1);
  4450. RETURN
  4451. END
  4452. ";
  4453. sql = string.Format(sql, LotNo, WorkPoint, RoundedQuantity, INVCODE, SUMQTY);
  4454. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4455. {
  4456. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  4457. }
  4458. }
  4459. }
  4460. // else { throw new Exception("单据类型未配置!"); }
  4461. }
  4462. //if (isDis == false)
  4463. //{
  4464. // throw new Exception("单据类型未配置!");
  4465. //}
  4466. /////更新库存
  4467. //sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  4468. // IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity<0)
  4469. // BEGIN
  4470. // RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  4471. // RETURN
  4472. // END";
  4473. //sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  4474. //if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4475. //{
  4476. // throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  4477. //}
  4478. }
  4479. }
  4480. else
  4481. {
  4482. if (LotEnable.Equals("True") && LotQTYYY - LotQTY > 0)
  4483. {
  4484. ZLtable = ICSControlModeService.GetZL();
  4485. if (ZLtable == null)
  4486. {
  4487. throw new Exception(language.GetNameByCode("WMSAPIInfo471"));
  4488. }
  4489. for (int i = 0; i < ZLtable.Rows.Count; i++)
  4490. {
  4491. string zlName = ZLtable.Rows[i]["Name"].ToString();
  4492. string zlTransCode = ZLtable.Rows[i]["BusinessCode"].ToString();
  4493. string Enable = ZLtable.Rows[i]["Enable"].ToString();
  4494. if (zlTransCode.Equals(BusinessCode))
  4495. {
  4496. if (Enable.Equals("True"))
  4497. {
  4498. ///更新日志
  4499. sql = @"
  4500. 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}')
  4501. BEGIN
  4502. RAISERROR('" + language.GetNameByCode("WMSAPIInfo472") + @"',16,1);
  4503. RETURN
  4504. END
  4505. UPDATE ICSWareHouseLotInfoLog SET EATTRIBUTE2='1' WHERE LotNo='{0}' AND WorkPoint='{1}' and transtype='15' and TransCode='{3}' and TransSequence='{4}'
  4506. ";
  4507. sql = string.Format(sql, LotNo, WorkPoint, LogID, TransCode, TransSequence);
  4508. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4509. {
  4510. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"占料标识更新失败!");
  4511. }
  4512. ///更新库存
  4513. sql = @"DECLARE @ReservedQuantity VARCHAR(10);
  4514. SELECT @ReservedQuantity = CAST(b.Quantity AS VARCHAR(10))
  4515. FROM ICSReserve b
  4516. INNER JOIN ICSWareHouseLotInfo a
  4517. ON a.invcode = b.invcode
  4518. AND a.workpoint = b.workpoint
  4519. AND a.warehousecode = b.whcode
  4520. WHERE '{4}' < b.Quantity
  4521. AND b.invcode = '{3}'
  4522. AND GETDATE() > b.BeginTime
  4523. AND GETDATE() < b.EndTime;
  4524. IF EXISTS(SELECT * FROM ICSWareHouseLotInfo a
  4525. INNER JOIN ICSReserve b ON a.invcode=b.invcode
  4526. AND a.workpoint=b.workpoint
  4527. AND a.warehousecode=b.whcode
  4528. WHERE a.invcode='{3}'
  4529. AND a.workpoint='{1}'
  4530. AND SYSDATETIME() > b.BeginTime
  4531. AND SYSDATETIME() < b.EndTime
  4532. AND b.enable='1')
  4533. BEGIN
  4534. IF @ReservedQuantity IS NOT NULL
  4535. BEGIN
  4536. RAISERROR('''{3}'',''{4}'''' + @ReservedQuantity + ''!', 16, 1);
  4537. RETURN
  4538. END
  4539. END
  4540. UPDATE ICSWareHouseLotInfo
  4541. SET Quantity = ISNULL(Quantity, 0) - '{2}',
  4542. LockQuantity = ISNULL(LockQuantity, 0) - '{2}'
  4543. WHERE LotNo = '{0}'
  4544. AND WorkPoint = '{1}';
  4545. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a
  4546. WHERE a.LotNo = '{0}'
  4547. AND a.WorkPoint = '{1}'
  4548. AND Quantity - LockQuantity < 0)
  4549. BEGIN
  4550. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"', 16, 1);
  4551. RETURN
  4552. END
  4553. ";
  4554. sql = string.Format(sql, LotNo, WorkPoint, RoundedQuantity, INVCODE, SUMQTY, TransCode, TransSequence);
  4555. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4556. {
  4557. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  4558. }
  4559. }
  4560. else
  4561. {
  4562. if (InvOQc.Equals("True"))
  4563. {
  4564. sql = @"select a.id from ICSWareHouseLotInfo a
  4565. inner JOIN ICSInspectDetail b ON a.WorkPoint=b.WorkPoint and a.LotNo=b.LotNo
  4566. where a.LotNo='{0}' and a.WorkPoint='{1}' ";//and a.Inspect = '0'
  4567. sql = string.Format(sql, LotNo, WorkPoint);
  4568. DataTable Inspectdtt = DBHelper.SQlReturnData(sql, cmd);
  4569. if (Inspectdtt.Rows.Count > 0 && Inspectdtt != null)
  4570. {
  4571. sql = @"select a.id from ICSWareHouseLotInfo a
  4572. inner JOIN ICSInspectDetail b ON a.WorkPoint=b.WorkPoint and a.LotNo=b.LotNo
  4573. where a.LotNo='{0}' and a.WorkPoint='{1}' and a.Inspect = '0'";
  4574. sql = string.Format(sql, LotNo, WorkPoint);
  4575. DataTable InspectNewdtt = DBHelper.SQlReturnData(sql, cmd);
  4576. if (InspectNewdtt.Rows.Count == 0 || InspectNewdtt == null)
  4577. {
  4578. throw new Exception("条码在库检验,未检验完成,请确认!");
  4579. }
  4580. }
  4581. }
  4582. ///更新库存
  4583. sql = @"DECLARE @ReservedQuantity VARCHAR(10);
  4584. SELECT @ReservedQuantity = CAST(b.Quantity AS VARCHAR(10))
  4585. FROM ICSReserve b
  4586. INNER JOIN ICSWareHouseLotInfo a
  4587. ON a.invcode = b.invcode
  4588. AND a.workpoint = b.workpoint
  4589. AND a.warehousecode = b.whcode
  4590. WHERE '{4}' < b.Quantity
  4591. AND b.invcode = '{3}'
  4592. AND GETDATE() > b.BeginTime
  4593. AND GETDATE() < b.EndTime;
  4594. IF EXISTS(SELECT * FROM ICSWareHouseLotInfo a
  4595. INNER JOIN ICSReserve b ON a.invcode=b.invcode
  4596. AND a.workpoint=b.workpoint
  4597. AND a.warehousecode=b.whcode
  4598. WHERE a.invcode='{3}'
  4599. AND a.workpoint='{1}'
  4600. AND SYSDATETIME() > b.BeginTime
  4601. AND SYSDATETIME() < b.EndTime
  4602. AND b.enable='1')
  4603. BEGIN
  4604. IF @ReservedQuantity IS NOT NULL
  4605. BEGIN
  4606. RAISERROR('''{3}'',''{4}'''' + @ReservedQuantity + ''!', 16, 1);
  4607. RETURN
  4608. END
  4609. END
  4610. UPDATE ICSWareHouseLotInfo
  4611. SET Quantity = ISNULL(Quantity, 0) - '{2}'
  4612. WHERE LotNo = '{0}'
  4613. AND WorkPoint = '{1}';
  4614. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a
  4615. WHERE a.LotNo = '{0}'
  4616. AND a.WorkPoint = '{1}'
  4617. AND Quantity - LockQuantity < 0)
  4618. BEGIN
  4619. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"', 16, 1);
  4620. RETURN
  4621. END
  4622. ";
  4623. sql = string.Format(sql, LotNo, WorkPoint, RoundedQuantity, INVCODE, SUMQTY);
  4624. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4625. {
  4626. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  4627. }
  4628. }
  4629. }
  4630. }
  4631. ///分批前添加日志
  4632. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  4633. BEGIN
  4634. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  4635. RETURN
  4636. END
  4637. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransID,TransCode,TransSequence,LotNo,InvCode,
  4638. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  4639. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  4640. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  4641. MTIME,WorkPoint,EATTRIBUTE1)
  4642. SELECT NEWID(),'{3}','{9}','{7}','{8}',a.LotNo ,a.InvCode ,
  4643. c.WarehouseCode,c.LocationCode,'','',c.Quantity+{6},
  4644. '','0','{4}','31','0','',
  4645. '','','',f.F_Account ,f.F_RealName ,
  4646. SYSDATETIME() ,a.WorkPoint ,''
  4647. FROM ICSInventoryLot a
  4648. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  4649. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  4650. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  4651. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  4652. ";
  4653. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransType, BusinessCode, Quantity, TransCode, TransSequence, TransID);
  4654. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4655. {
  4656. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  4657. }
  4658. #region 获取分批后的条码(lotstr)
  4659. sql = @"SELECT TOP 1 LotNO FROM ICSInventoryLot WHERE EATTRIBUTE1='{0}' AND WorkPoint='{1}'
  4660. ORDER BY CAST(SUBSTRING(LotNO, (LEN(LotNO)-CHARINDEX('-',REVERSE(LotNO))+1)+1,CHARINDEX('-',REVERSE(LotNO))-1) AS INT) DESC";
  4661. sql = string.Format(sql, LotNo, WorkPoint);
  4662. dt = DBHelper.SQlReturnData(sql, cmd);
  4663. if (dt.Rows.Count == 0)
  4664. {
  4665. lotstr = LotNo + "-" + 1;
  4666. }
  4667. else
  4668. {
  4669. lotstr = LotNo + "-" + (Convert.ToInt32(dt.Rows[0]["LotNO"].ToString().Split('-')[dt.Rows[0]["LotNO"].ToString().Split('-').Length - 1]) + 1).ToString();
  4670. }
  4671. NewBarCodeList.Add(lotstr);//将分批后新条码添加到新集合
  4672. #endregion
  4673. #region 将分批后的条码记录插入条码表,库存表及日志表并将原条码库存数量清零
  4674. sql = @"INSERT INTO ICSInventoryLot(ID,LotNo,InvCode,ProductDate,ExpirationDate,
  4675. Quantity,Amount,ExtensionID,Type,PrintTimes,
  4676. LastPrintUser,LastPrintTime,MUSER,MUSERName,MTIME,
  4677. WorkPoint,EATTRIBUTE1,EATTRIBUTE2,EATTRIBUTE3,EATTRIBUTE4,EATTRIBUTE5,EATTRIBUTE6,EATTRIBUTE7,EATTRIBUTE8,
  4678. EATTRIBUTE9,EATTRIBUTE10,EATTRIBUTE11,EATTRIBUTE12,EATTRIBUTE13,EATTRIBUTE14,EATTRIBUTE15,EATTRIBUTE16,EATTRIBUTE17,EATTRIBUTE18,EATTRIBUTE19,EATTRIBUTE20,
  4679. EATTRIBUTE21,EATTRIBUTE22,EATTRIBUTE23,EATTRIBUTE24,EATTRIBUTE25,EATTRIBUTE26,EATTRIBUTE27,EATTRIBUTE28,EATTRIBUTE29,EATTRIBUTE30)
  4680. SELECT TOP 1 NEWID(),'{0}',a.InvCode,a.ProductDate,a.ExpirationDate,
  4681. '{2}',a.Amount/a.Quantity*Quantity,a.ExtensionID,a.Type,a.PrintTimes,
  4682. a.LastPrintUser,a.LastPrintTime,a.MUSER ,a.MUSERName ,GETDATE(),
  4683. a.WorkPoint ,'{1}',a.EATTRIBUTE2,a.EATTRIBUTE3,a.EATTRIBUTE4,a.EATTRIBUTE5,a.EATTRIBUTE6,a.EATTRIBUTE7,a.EATTRIBUTE8,
  4684. a.EATTRIBUTE9,a.EATTRIBUTE10,a.EATTRIBUTE11,a.EATTRIBUTE12,a.EATTRIBUTE13,a.EATTRIBUTE14,a.EATTRIBUTE15,a.EATTRIBUTE16,a.EATTRIBUTE17,a.EATTRIBUTE18,a.EATTRIBUTE19,a.EATTRIBUTE20,
  4685. a.EATTRIBUTE21,a.EATTRIBUTE22,a.EATTRIBUTE23,a.EATTRIBUTE24,a.EATTRIBUTE25,a.EATTRIBUTE26,a.EATTRIBUTE27,a.EATTRIBUTE28,a.EATTRIBUTE29,a.EATTRIBUTE30
  4686. From ICSInventoryLot a
  4687. where a.LotNo='{1}' and a.WorkPoint='{3}'";
  4688. sql = string.Format(sql, lotstr, LotNo, RoundedQuantity, WorkPoint);
  4689. cmd.CommandText = sql;
  4690. result = cmd.ExecuteNonQuery();
  4691. if (result <= 0)
  4692. {
  4693. throw new Exception(language.GetNameByCode("WMSAPIInfo195"));//条码分批后条码表存入失败!
  4694. }
  4695. sql = @"INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  4696. select NEWID(),'{0}',WarehouseCode,LocationCode,InvCode,'0',InDate,LockQuantity
  4697. ,MUSER,MUSERName,GETDATE(),'{3}',''
  4698. from ICSWareHouseLotInfo
  4699. where LotNO='{1}' AND WorkPoint='{3}'";
  4700. sql = string.Format(sql, lotstr, LotNo, RoundedQuantity, WorkPoint);
  4701. cmd.CommandText = sql;
  4702. result = cmd.ExecuteNonQuery();
  4703. if (result <= 0)
  4704. {
  4705. throw new Exception(language.GetNameByCode("WMSAPIInfo196"));//条码分批后库存表存入失败!
  4706. }
  4707. //插入条码单据表
  4708. sql = @"INSERT INTO ICSInventoryLotDetail(LotNo,TransID,TransCode,TransSequence,MUSER,MUSERName,MTIME,WorkPoint)
  4709. SELECT '{3}','{4}',b.TransCode,b.TransSequence,f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint
  4710. FROM ICSInventoryLot a
  4711. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  4712. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  4713. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  4714. sql = string.Format(sql, LotNo, WorkPoint, User, lotstr, TransID);
  4715. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4716. {
  4717. throw new Exception(language.GetNameByCode("WMSAPIInfo174"));//"条码单据表写入失败!");
  4718. }
  4719. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransID,TransCode,TransSequence,LotNo,InvCode,
  4720. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  4721. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  4722. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  4723. MTIME,WorkPoint,EATTRIBUTE1,LogID)
  4724. SELECT NEWID(),'{3}','{11}','{4}','{5}','{10}' ,a.InvCode ,
  4725. c.WarehouseCode,c.LocationCode,'','','{6}',
  4726. '','0','{7}','{8}','0','',
  4727. '','','',f.F_Account ,f.F_RealName ,
  4728. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  4729. FROM ICSInventoryLot a
  4730. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  4731. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  4732. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  4733. ";
  4734. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID, lotstr, TransID);
  4735. cmd.CommandText = sql;
  4736. result = cmd.ExecuteNonQuery();
  4737. if (result <= 0)
  4738. {
  4739. throw new Exception(language.GetNameByCode("WMSAPIInfo197"));//条码分批后库存日志表存入失败!
  4740. }
  4741. ///添加日志
  4742. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  4743. BEGIN
  4744. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  4745. RETURN
  4746. END
  4747. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransID,TransCode,TransSequence,LotNo,InvCode,
  4748. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  4749. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  4750. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  4751. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  4752. SELECT NEWID(),'{3}','{10}','{4}','{5}',a.LotNo ,a.InvCode ,
  4753. c.WarehouseCode,c.LocationCode,'','',c.Quantity,
  4754. '','0','{7}','32','0','',
  4755. '','','',f.F_Account ,f.F_RealName ,
  4756. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  4757. FROM ICSInventoryLot a
  4758. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  4759. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  4760. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  4761. ";
  4762. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID, TransID);
  4763. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4764. {
  4765. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  4766. }
  4767. if (PrintEnable.Equals("True") && DisPrintEnable.Equals("True"))
  4768. {
  4769. string PrintData = DBHelper.ReadPrintStream();
  4770. sql = @"" + PrintData + "";
  4771. //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
  4772. // from ICSWareHouseLotInfolog A
  4773. // left join ICSInventoryLot B on A.LotNO=B.LotNO and a.WorkPoint=b.WorkPoint
  4774. // left join ICSWareHouseLotInfo C ON A.LotNO=C.LotNO and a.WorkPoint=c.WorkPoint
  4775. // left join ICSInventory D on b.INVCODE=d.INVCODE and b.WorkPoint=d.WorkPoint
  4776. // where A.lotno ='{0}' and a.workpoint='{1}' and a.BusinessCode='{2}'
  4777. // ";
  4778. sql = string.Format(sql, LotNo, WorkPoint, BusinessCode, Identification);
  4779. dtLotno = DBHelper.SQlReturnData(sql, cmd);
  4780. lstDt = dtLotno;
  4781. }
  4782. #endregion
  4783. }
  4784. else
  4785. {
  4786. NewBarCodeList.Add(LotNo);
  4787. ///添加日志
  4788. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  4789. BEGIN
  4790. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  4791. RETURN
  4792. END
  4793. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransID,TransCode,TransSequence,LotNo,InvCode,
  4794. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  4795. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  4796. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  4797. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  4798. SELECT NEWID(),'{3}','{10}','{4}','{5}',a.LotNo ,a.InvCode ,
  4799. c.WarehouseCode,c.LocationCode,'','','{6}',
  4800. '','0','{7}','{8}','0','',
  4801. '','','',f.F_Account ,f.F_RealName ,
  4802. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  4803. FROM ICSInventoryLot a
  4804. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  4805. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  4806. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  4807. ";
  4808. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID, TransID);
  4809. log.Debug("出库日志" + sql);
  4810. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4811. {
  4812. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  4813. }
  4814. ZLtable = ICSControlModeService.GetZL();
  4815. if (ZLtable == null)
  4816. {
  4817. throw new Exception(language.GetNameByCode("WMSAPIInfo471"));
  4818. }
  4819. for (int i = 0; i < ZLtable.Rows.Count; i++)
  4820. {
  4821. string zlTransCode = ZLtable.Rows[i]["BusinessCode"].ToString();
  4822. string Enable = ZLtable.Rows[i]["Enable"].ToString();
  4823. if (zlTransCode.Equals(BusinessCode))
  4824. {
  4825. isDis = true;
  4826. if (Enable.Equals("True"))
  4827. {
  4828. ///更新日志
  4829. sql = @"
  4830. 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}')
  4831. BEGIN
  4832. RAISERROR('" + language.GetNameByCode("WMSAPIInfo472") + @"',16,1);
  4833. RETURN
  4834. END
  4835. UPDATE ICSWareHouseLotInfoLog SET EATTRIBUTE2='1' WHERE LotNo='{0}' AND WorkPoint='{1}' and transtype='15' and TransCode='{3}' and TransSequence='{4}'
  4836. ";
  4837. sql = string.Format(sql, LotNo, WorkPoint, LogID, TransCode, TransSequence);
  4838. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4839. {
  4840. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"占料标识更新失败!");
  4841. }
  4842. ///更新库存
  4843. sql = @"DECLARE @ReservedQuantity VARCHAR(10);
  4844. SELECT @ReservedQuantity = CAST(b.Quantity AS VARCHAR(10))
  4845. FROM ICSReserve b
  4846. INNER JOIN ICSWareHouseLotInfo a
  4847. ON a.invcode = b.invcode
  4848. AND a.workpoint = b.workpoint
  4849. AND a.warehousecode = b.whcode
  4850. WHERE '{4}' < b.Quantity
  4851. AND b.invcode = '{3}'
  4852. AND GETDATE() > b.BeginTime
  4853. AND GETDATE() < b.EndTime;
  4854. IF EXISTS(SELECT * FROM ICSWareHouseLotInfo a
  4855. INNER JOIN ICSReserve b ON a.invcode=b.invcode
  4856. AND a.workpoint=b.workpoint
  4857. AND a.warehousecode=b.whcode
  4858. WHERE a.invcode='{3}'
  4859. AND a.workpoint='{1}'
  4860. AND SYSDATETIME() > b.BeginTime
  4861. AND SYSDATETIME() < b.EndTime
  4862. AND b.enable='1')
  4863. BEGIN
  4864. IF @ReservedQuantity IS NOT NULL
  4865. BEGIN
  4866. RAISERROR('''{3}'',''{4}'''' + @ReservedQuantity + ''!', 16, 1);
  4867. RETURN
  4868. END
  4869. END
  4870. UPDATE ICSWareHouseLotInfo
  4871. SET Quantity = ISNULL(Quantity, 0) - '{2}',
  4872. LockQuantity = ISNULL(LockQuantity, 0) - '{2}'
  4873. WHERE LotNo = '{0}'
  4874. AND WorkPoint = '{1}';
  4875. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a
  4876. WHERE a.LotNo = '{0}'
  4877. AND a.WorkPoint = '{1}'
  4878. AND Quantity - LockQuantity < 0)
  4879. BEGIN
  4880. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"', 16, 1);
  4881. RETURN
  4882. END
  4883. ";
  4884. sql = string.Format(sql, LotNo, WorkPoint, RoundedQuantity, INVCODE, SUMQTY);
  4885. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4886. {
  4887. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  4888. }
  4889. }
  4890. else
  4891. {
  4892. if (InvOQc.Equals("True"))
  4893. {
  4894. sql = @"select a.id from ICSWareHouseLotInfo a
  4895. inner JOIN ICSInspectDetail b ON a.WorkPoint=b.WorkPoint and a.LotNo=b.LotNo
  4896. where a.LotNo='{0}' and a.WorkPoint='{1}' ";//and a.Inspect = '0'
  4897. sql = string.Format(sql, LotNo, WorkPoint);
  4898. DataTable Inspectdtt = DBHelper.SQlReturnData(sql, cmd);
  4899. if (Inspectdtt.Rows.Count > 0 && Inspectdtt != null)
  4900. {
  4901. sql = @"select a.id from ICSWareHouseLotInfo a
  4902. inner JOIN ICSInspectDetail b ON a.WorkPoint=b.WorkPoint and a.LotNo=b.LotNo
  4903. where a.LotNo='{0}' and a.WorkPoint='{1}' and a.Inspect = '0'";
  4904. sql = string.Format(sql, LotNo, WorkPoint);
  4905. DataTable InspectNewdtt = DBHelper.SQlReturnData(sql, cmd);
  4906. if (InspectNewdtt.Rows.Count == 0 || InspectNewdtt == null)
  4907. {
  4908. throw new Exception("条码在库检验,未检验完成,请确认!");
  4909. }
  4910. }
  4911. }
  4912. ///更新库存
  4913. sql = @"DECLARE @ReservedQuantity VARCHAR(10);
  4914. SELECT @ReservedQuantity = CAST(b.Quantity AS VARCHAR(10))
  4915. FROM ICSReserve b
  4916. INNER JOIN ICSWareHouseLotInfo a
  4917. ON a.invcode = b.invcode
  4918. AND a.workpoint = b.workpoint
  4919. AND a.warehousecode = b.whcode
  4920. WHERE '{4}' < b.Quantity
  4921. AND b.invcode = '{3}'
  4922. AND GETDATE() > b.BeginTime
  4923. AND GETDATE() < b.EndTime;
  4924. IF EXISTS(SELECT * FROM ICSWareHouseLotInfo a
  4925. INNER JOIN ICSReserve b ON a.invcode=b.invcode
  4926. AND a.workpoint=b.workpoint
  4927. AND a.warehousecode=b.whcode
  4928. WHERE a.invcode='{3}'
  4929. AND a.workpoint='{1}'
  4930. AND SYSDATETIME() > b.BeginTime
  4931. AND SYSDATETIME() < b.EndTime
  4932. AND b.enable='1')
  4933. BEGIN
  4934. IF @ReservedQuantity IS NOT NULL
  4935. BEGIN
  4936. RAISERROR('''{3}'',''{4}'''' + @ReservedQuantity + ''!', 16, 1);
  4937. RETURN
  4938. END
  4939. END
  4940. UPDATE ICSWareHouseLotInfo
  4941. SET Quantity = ISNULL(Quantity, 0) - '{2}'
  4942. WHERE LotNo = '{0}'
  4943. AND WorkPoint = '{1}';
  4944. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a
  4945. WHERE a.LotNo = '{0}'
  4946. AND a.WorkPoint = '{1}'
  4947. AND Quantity - LockQuantity < 0)
  4948. BEGIN
  4949. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"', 16, 1);
  4950. RETURN
  4951. END
  4952. ";
  4953. sql = string.Format(sql, LotNo, WorkPoint, RoundedQuantity, INVCODE, SUMQTY);
  4954. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4955. {
  4956. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  4957. }
  4958. }
  4959. }
  4960. // else { throw new Exception("单据类型未配置!"); }
  4961. }
  4962. //if (isDis == false)
  4963. //{
  4964. // throw new Exception("单据类型未配置!");
  4965. //}
  4966. /////更新库存
  4967. //sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  4968. // IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity<0)
  4969. // BEGIN
  4970. // RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  4971. // RETURN
  4972. // END";
  4973. //sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  4974. //if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4975. //{
  4976. // throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  4977. //}
  4978. }
  4979. }
  4980. }
  4981. catch (Exception)
  4982. {
  4983. throw;
  4984. }
  4985. return lstDt;
  4986. }
  4987. /// <summary>
  4988. /// 减少库存(奥美专用)
  4989. /// </summary>
  4990. /// <param name="Identification"></param>
  4991. /// <param name="TransCode"></param>
  4992. /// <param name="TransSequence"></param>
  4993. /// <param name="LotNo"></param>
  4994. /// <param name="Quantity"></param>
  4995. /// <param name="User"></param>
  4996. /// <param name="WorkPoint"></param>
  4997. /// <param name="TransType"></param>
  4998. /// <param name="BusinessCode"></param>
  4999. /// <param name="cmd"></param>
  5000. public static DataTable AMWareHouseLotInfoDown(string Identification, string TransCode, string TransSequence, string LotNo, string Quantity, string User,
  5001. string WorkPoint, string TransType, string BusinessCode, SqlCommand cmd, Dictionary<string, string> language, string LogID, string TransID, string MergeID = "")
  5002. {
  5003. decimal LotQTYYY = 0;
  5004. decimal LotQTY = 0;
  5005. string LotEnable = "";
  5006. string chekEnable = "";
  5007. string DisPrintEnable = "";
  5008. string PrintEnable = "";
  5009. string sql = "";
  5010. string lotstr = "";
  5011. int result = 0;
  5012. List<string> NewBarCodeList = new List<string>();
  5013. DataTable dtLotno = new DataTable();
  5014. DataTable lstDt = new DataTable();
  5015. DataTable ZLtable = new DataTable();
  5016. try
  5017. {
  5018. string amount = "";
  5019. //string sqql = @"select a.Amount FROM ICSInventoryLot a
  5020. // WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  5021. //sqql = string.Format(sqql, LotNo, WorkPoint);
  5022. //DataTable dtaa = DBHelper.SQlReturnData(sqql, cmd);
  5023. //amount = dtaa.Rows[0]["Amount"].ToString();
  5024. string chekksql = @"select c.EATTRIBUTE1 FROM ICSMOPick a
  5025. INNER JOIN ICSMO b ON a.MODetailID=b.MODetailID AND a.WorkPoint=b.WorkPoint
  5026. INNER JOIN ICSInventory c on a.InvCode=c.InvCode and a.WorkPoint=c.WorkPoint
  5027. WHERE b.MOCode='{0}' AND b.Sequence+'~'+a.Sequence='{3}' AND a.WorkPoint='{1}' and c.AmountEnable='1'";
  5028. chekksql = string.Format(chekksql, TransCode, WorkPoint, Quantity, TransSequence);
  5029. DataTable dta = DBHelper.SQlReturnData(chekksql, cmd);
  5030. if (dta.Rows.Count > 0)
  5031. {
  5032. Quantity = (decimal.Parse(Quantity) * decimal.Parse(dta.Rows[0]["EATTRIBUTE1"].ToString())).ToString();
  5033. }
  5034. //检验是否分批
  5035. sql = @"SELECT b.LotEnable,b.PrintEnable FROM ICSInventoryLot a
  5036. LEFT JOIN ICSInventory b ON a.InvCode=b.InvCode AND a.WorkPoint=b.WorkPoint
  5037. where a.LotNo='{0}' and a.WorkPoint='{1}'
  5038. ";
  5039. sql = string.Format(sql, LotNo, WorkPoint);
  5040. DataTable dt = DBHelper.SQlReturnData(sql, cmd);
  5041. if (dt.Rows.Count == 0)
  5042. {
  5043. throw new Exception(language.GetNameByCode("WMSAPIInfo369"));
  5044. }
  5045. else
  5046. {
  5047. LotEnable = dt.Rows[0]["LotEnable"].ToString();
  5048. PrintEnable = dt.Rows[0]["PrintEnable"].ToString();
  5049. }
  5050. 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
  5051. from Sys_SRM_Items a
  5052. left join Sys_SRM_ItemsDetail b on a.F_Id=b.F_ItemId
  5053. where a.F_EnCode='TransBatch' and b.F_ItemCode='{0}' )
  5054. BEGIN
  5055. RAISERROR('" + language.GetNameByCode("WMSAPIInfo470") + @"',16,1);
  5056. RETURN
  5057. END
  5058. select b.F_ItemCode as Code ,b.F_ItemName as Name,b.F_EnabledMark AS Enable ,b.F_IsDefault AS DisPrintEnable
  5059. from Sys_SRM_Items a
  5060. left join Sys_SRM_ItemsDetail b on a.F_Id=b.F_ItemId
  5061. where a.F_EnCode='TransBatch' and b.F_ItemCode='{0}'
  5062. ";
  5063. cheksql = string.Format(cheksql, BusinessCode);
  5064. DataTable chekdt = DBHelper.SQlReturnData(cheksql, cmd);
  5065. if (chekdt.Rows.Count == 0)
  5066. {
  5067. throw new Exception(language.GetNameByCode("WMSAPIInfo369"));
  5068. }
  5069. else
  5070. {
  5071. chekEnable = chekdt.Rows[0]["Enable"].ToString();
  5072. DisPrintEnable = chekdt.Rows[0]["DisPrintEnable"].ToString();
  5073. }
  5074. sql = @"select Quantity from ICSWareHouseLotInfo
  5075. where LotNO='{0}' AND WorkPoint='{1}'";
  5076. sql = string.Format(sql, LotNo, WorkPoint);
  5077. DataTable dtt = DBHelper.SQlReturnData(sql, cmd);
  5078. LotQTYYY = Convert.ToDecimal(dtt.Rows[0]["Quantity"]);
  5079. LotQTY = Convert.ToDecimal(Quantity);
  5080. if (!LotEnable.Equals("False") && !chekEnable.Equals("False") && LotQTYYY - LotQTY > 0)
  5081. {
  5082. ZLtable = ICSControlModeService.GetZL();
  5083. if (ZLtable == null)
  5084. {
  5085. throw new Exception(language.GetNameByCode("WMSAPIInfo471"));
  5086. }
  5087. for (int i = 0; i < ZLtable.Rows.Count; i++)
  5088. {
  5089. string zlName = ZLtable.Rows[i]["Name"].ToString();
  5090. string zlTransCode = ZLtable.Rows[i]["BusinessCode"].ToString();
  5091. string Enable = ZLtable.Rows[i]["Enable"].ToString();
  5092. if (zlTransCode.Equals(BusinessCode))
  5093. {
  5094. if (Enable.Equals("True"))
  5095. {
  5096. ///更新日志
  5097. sql = @"
  5098. IF NOT EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfoLog a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' and transtype='15')
  5099. BEGIN
  5100. RAISERROR('" + language.GetNameByCode("WMSAPIInfo472") + @"',16,1);
  5101. RETURN
  5102. END
  5103. UPDATE ICSWareHouseLotInfoLog SET EATTRIBUTE2='1' WHERE LotNo='{0}' AND WorkPoint='{1}' and transtype='15'
  5104. ";
  5105. sql = string.Format(sql, LotNo, WorkPoint, LogID);
  5106. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5107. {
  5108. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"占料标识更新失败!");
  5109. }
  5110. ///更新库存
  5111. sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}',LockQuantity=ISNULL(LockQuantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  5112. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity-LockQuantity<0)
  5113. BEGIN
  5114. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  5115. RETURN
  5116. END";
  5117. sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  5118. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5119. {
  5120. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  5121. }
  5122. }
  5123. else
  5124. {
  5125. ///更新库存
  5126. sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-ISNULL(LockQuantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  5127. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity-LockQuantity<0)
  5128. BEGIN
  5129. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  5130. RETURN
  5131. END";
  5132. sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  5133. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5134. {
  5135. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  5136. }
  5137. }
  5138. }
  5139. }
  5140. ///分批前添加日志
  5141. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  5142. BEGIN
  5143. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  5144. RETURN
  5145. END
  5146. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  5147. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  5148. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  5149. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  5150. MTIME,WorkPoint,EATTRIBUTE1)
  5151. SELECT NEWID(),'{3}','{7}','{8}',a.LotNo ,a.InvCode ,
  5152. c.WarehouseCode,c.LocationCode,'','',c.Quantity+{6},
  5153. '','0','{4}','31','0','',
  5154. '','','',f.F_Account ,f.F_RealName ,
  5155. SYSDATETIME() ,a.WorkPoint ,''
  5156. FROM ICSInventoryLot a
  5157. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  5158. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  5159. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  5160. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  5161. ";
  5162. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransType, BusinessCode, Quantity, TransCode, TransSequence);
  5163. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5164. {
  5165. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  5166. }
  5167. #region 获取分批后的条码(lotstr)
  5168. sql = @"SELECT TOP 1 LotNO FROM ICSInventoryLot WHERE EATTRIBUTE1='{0}' AND WorkPoint='{1}'
  5169. ORDER BY CAST(SUBSTRING(LotNO, (LEN(LotNO)-CHARINDEX('-',REVERSE(LotNO))+1)+1,CHARINDEX('-',REVERSE(LotNO))-1) AS INT) DESC";
  5170. sql = string.Format(sql, LotNo, WorkPoint);
  5171. dt = DBHelper.SQlReturnData(sql, cmd);
  5172. if (dt.Rows.Count == 0)
  5173. {
  5174. lotstr = LotNo + "-" + 1;
  5175. }
  5176. else
  5177. {
  5178. lotstr = LotNo + "-" + (Convert.ToInt32(dt.Rows[0]["LotNO"].ToString().Split('-')[dt.Rows[0]["LotNO"].ToString().Split('-').Length - 1]) + 1).ToString();
  5179. }
  5180. NewBarCodeList.Add(lotstr);//将分批后新条码添加到新集合
  5181. #endregion
  5182. #region 将分批后的条码记录插入条码表,库存表及日志表并将原条码库存数量清零
  5183. sql = @"INSERT INTO ICSInventoryLot(ID,LotNo,InvCode,ProductDate,ExpirationDate,
  5184. Quantity,Amount,ExtensionID,Type,PrintTimes,
  5185. LastPrintUser,LastPrintTime,MUSER,MUSERName,MTIME,
  5186. WorkPoint,EATTRIBUTE1)
  5187. SELECT TOP 1 NEWID(),'{0}',a.InvCode,a.ProductDate,a.ExpirationDate,
  5188. '{2}',a.Amount/a.Quantity*Quantity,a.ExtensionID,a.Type,a.PrintTimes,
  5189. a.LastPrintUser,a.LastPrintTime,a.MUSER ,a.MUSERName ,GETDATE(),
  5190. a.WorkPoint ,'{1}'
  5191. From ICSInventoryLot a
  5192. where a.LotNo='{1}' and a.WorkPoint='{3}'";
  5193. sql = string.Format(sql, lotstr, LotNo, Quantity, WorkPoint);
  5194. cmd.CommandText = sql;
  5195. result = cmd.ExecuteNonQuery();
  5196. if (result <= 0)
  5197. {
  5198. throw new Exception(language.GetNameByCode("WMSAPIInfo195"));//条码分批后条码表存入失败!
  5199. }
  5200. sql = @"INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  5201. select NEWID(),'{0}',WarehouseCode,LocationCode,InvCode,'0',InDate,LockQuantity
  5202. ,MUSER,MUSERName,GETDATE(),'{3}',''
  5203. from ICSWareHouseLotInfo
  5204. where LotNO='{1}' AND WorkPoint='{3}'";
  5205. sql = string.Format(sql, lotstr, LotNo, Quantity, WorkPoint);
  5206. cmd.CommandText = sql;
  5207. result = cmd.ExecuteNonQuery();
  5208. if (result <= 0)
  5209. {
  5210. throw new Exception(language.GetNameByCode("WMSAPIInfo196"));//条码分批后库存表存入失败!
  5211. }
  5212. //插入条码单据表
  5213. sql = @"INSERT INTO ICSInventoryLotDetail(LotNo,TransCode,TransSequence,MUSER,MUSERName,MTIME,WorkPoint)
  5214. SELECT '{3}',b.TransCode,b.TransSequence,f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint
  5215. FROM ICSInventoryLot a
  5216. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  5217. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  5218. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  5219. sql = string.Format(sql, LotNo, WorkPoint, User, lotstr);
  5220. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5221. {
  5222. throw new Exception(language.GetNameByCode("WMSAPIInfo174"));//"条码单据表写入失败!");
  5223. }
  5224. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  5225. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  5226. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  5227. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  5228. MTIME,WorkPoint,EATTRIBUTE1,LogID)
  5229. SELECT NEWID(),'{3}','{4}','{5}','{10}' ,a.InvCode ,
  5230. c.WarehouseCode,c.LocationCode,'','','{6}',
  5231. '','0','{7}','{8}','0','',
  5232. '','','',f.F_Account ,f.F_RealName ,
  5233. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  5234. FROM ICSInventoryLot a
  5235. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  5236. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  5237. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  5238. ";
  5239. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID, lotstr);
  5240. cmd.CommandText = sql;
  5241. result = cmd.ExecuteNonQuery();
  5242. if (result <= 0)
  5243. {
  5244. throw new Exception(language.GetNameByCode("WMSAPIInfo197"));//条码分批后库存日志表存入失败!
  5245. }
  5246. if (PrintEnable.Equals("True") && DisPrintEnable.Equals("True"))
  5247. {
  5248. 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
  5249. from ICSWareHouseLotInfolog A
  5250. left join ICSInventoryLot B on A.LotNO=B.LotNO and a.WorkPoint=b.WorkPoint
  5251. left join ICSWareHouseLotInfo C ON A.LotNO=C.LotNO and a.WorkPoint=c.WorkPoint
  5252. left join ICSInventory D on b.INVCODE=d.INVCODE and b.WorkPoint=d.WorkPoint
  5253. where A.lotno ='{0}' and a.workpoint='{1}' and a.BusinessCode='{2}'
  5254. ";
  5255. sql = string.Format(sql, lotstr, WorkPoint, BusinessCode);
  5256. dtLotno = DBHelper.SQlReturnData(sql, cmd);
  5257. lstDt = dtLotno;
  5258. }
  5259. ///添加日志
  5260. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  5261. BEGIN
  5262. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  5263. RETURN
  5264. END
  5265. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  5266. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  5267. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  5268. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  5269. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  5270. SELECT NEWID(),'{3}','{4}','{5}',a.LotNo ,a.InvCode ,
  5271. c.WarehouseCode,c.LocationCode,'','',c.Quantity,
  5272. '','0','{7}','32','0','',
  5273. '','','',f.F_Account ,f.F_RealName ,
  5274. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  5275. FROM ICSInventoryLot a
  5276. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  5277. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  5278. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  5279. ";
  5280. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID);
  5281. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5282. {
  5283. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  5284. }
  5285. #endregion
  5286. }
  5287. else
  5288. {
  5289. NewBarCodeList.Add(LotNo);
  5290. ///添加日志
  5291. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  5292. BEGIN
  5293. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  5294. RETURN
  5295. END
  5296. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  5297. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  5298. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  5299. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  5300. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  5301. SELECT NEWID(),'{3}','{4}','{5}',a.LotNo ,a.InvCode ,
  5302. c.WarehouseCode,c.LocationCode,'','','{6}',
  5303. '','0','{7}','{8}','0','',
  5304. '','','',f.F_Account ,f.F_RealName ,
  5305. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  5306. FROM ICSInventoryLot a
  5307. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  5308. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  5309. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  5310. ";
  5311. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID);
  5312. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5313. {
  5314. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  5315. }
  5316. ZLtable = ICSControlModeService.GetZL();
  5317. if (ZLtable == null)
  5318. {
  5319. throw new Exception(language.GetNameByCode("WMSAPIInfo471"));
  5320. }
  5321. for (int i = 0; i < ZLtable.Rows.Count; i++)
  5322. {
  5323. string zlTransCode = ZLtable.Rows[i]["BusinessCode"].ToString();
  5324. string Enable = ZLtable.Rows[i]["Enable"].ToString();
  5325. if (zlTransCode.Equals(BusinessCode))
  5326. {
  5327. if (Enable.Equals("True"))
  5328. {
  5329. ///更新日志
  5330. sql = @"
  5331. IF NOT EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfoLog a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' and transtype='15')
  5332. BEGIN
  5333. RAISERROR('" + language.GetNameByCode("WMSAPIInfo472") + @"',16,1);
  5334. RETURN
  5335. END
  5336. UPDATE ICSWareHouseLotInfoLog SET EATTRIBUTE2='1' WHERE LotNo='{0}' AND WorkPoint='{1}' and transtype='15'
  5337. ";
  5338. sql = string.Format(sql, LotNo, WorkPoint, LogID);
  5339. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5340. {
  5341. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"占料标识更新失败!");
  5342. }
  5343. ///更新库存
  5344. sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}',LockQuantity=ISNULL(LockQuantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  5345. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity-LockQuantity<0)
  5346. BEGIN
  5347. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  5348. RETURN
  5349. END";
  5350. sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  5351. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5352. {
  5353. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  5354. }
  5355. }
  5356. else
  5357. {
  5358. ///更新库存
  5359. sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  5360. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity-LockQuantity<0)
  5361. BEGIN
  5362. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  5363. RETURN
  5364. END";
  5365. sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  5366. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5367. {
  5368. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  5369. }
  5370. }
  5371. }
  5372. }
  5373. /////更新库存
  5374. //sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  5375. // IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity<0)
  5376. // BEGIN
  5377. // RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  5378. // RETURN
  5379. // END";
  5380. //sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  5381. //if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5382. //{
  5383. // throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  5384. //}
  5385. }
  5386. }
  5387. catch (Exception)
  5388. {
  5389. throw;
  5390. }
  5391. return lstDt;
  5392. }
  5393. /// <summary>
  5394. /// 无源头调拨
  5395. /// </summary>
  5396. /// <param name="LocationCode"></param>
  5397. /// <param name="LotNo"></param>
  5398. /// <param name="Quantity"></param>
  5399. /// <param name="User"></param>
  5400. /// <param name="WorkPoint"></param>
  5401. /// <param name="TransType"></param>
  5402. /// <param name="BusinessCode"></param>
  5403. /// <param name="cmd"></param>
  5404. public static DataTable WareHouseLotInfoNoTransfer(string Identification, string WarehouseCode, string LocationCode,
  5405. string LotNo, string Quantity, string User, string WorkPoint, string TransType, string BusinessCode, SqlCommand cmd, Dictionary<string, string> language, string MergeID, string Memo)
  5406. {
  5407. decimal LotQTYYY = 0;
  5408. decimal LotQTY = 0;
  5409. String LotEnable = "";
  5410. String PrintEnable = "";
  5411. String ToWareHouseCode = "";
  5412. String ToLocationCode = "";
  5413. string lotstr = "";
  5414. int result = 0;
  5415. DataTable dtLotno = new DataTable();
  5416. DataTable lstDt = new DataTable();
  5417. List<string> NewBarCodeList = new List<string>();
  5418. string sql = "";
  5419. try
  5420. {
  5421. //检验是否分批
  5422. sql = @"SELECT b.LotEnable,b.PrintEnable FROM ICSInventoryLot a
  5423. LEFT JOIN ICSInventory b ON a.InvCode=b.InvCode AND a.WorkPoint=b.WorkPoint
  5424. where a.LotNo='{0}' and a.WorkPoint='{1}'
  5425. ";
  5426. sql = string.Format(sql, LotNo, WorkPoint);
  5427. DataTable dt = DBHelper.SQlReturnData(sql, cmd);
  5428. if (dt.Rows.Count == 0)
  5429. {
  5430. throw new Exception(language.GetNameByCode("WMSAPIInfo369"));
  5431. }
  5432. else
  5433. {
  5434. LotEnable = dt.Rows[0]["LotEnable"].ToString();
  5435. PrintEnable = dt.Rows[0]["PrintEnable"].ToString();
  5436. }
  5437. sql = @"select Quantity from ICSWareHouseLotInfo
  5438. where LotNO='{0}' AND WorkPoint='{1}'";
  5439. sql = string.Format(sql, LotNo, WorkPoint);
  5440. DataTable dtt = DBHelper.SQlReturnData(sql, cmd);
  5441. LotQTYYY = Convert.ToDecimal(dtt.Rows[0]["Quantity"]);
  5442. LotQTY = Convert.ToDecimal(Quantity);
  5443. if (!LotEnable.Equals("False") && LotQTYYY - LotQTY > 0)
  5444. {
  5445. ///更新库存
  5446. sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  5447. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity<0)
  5448. BEGIN
  5449. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  5450. RETURN
  5451. END";
  5452. sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  5453. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5454. {
  5455. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  5456. }
  5457. ///分批前添加日志
  5458. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  5459. BEGIN
  5460. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  5461. RETURN
  5462. END
  5463. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  5464. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  5465. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  5466. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  5467. MTIME,WorkPoint,EATTRIBUTE1)
  5468. SELECT NEWID(),'{3}','','',a.LotNo ,a.InvCode ,
  5469. c.WarehouseCode,c.LocationCode,'','',c.Quantity+{6},
  5470. '','0','{4}','31','0','',
  5471. '','','',f.F_Account ,f.F_RealName ,
  5472. SYSDATETIME() ,a.WorkPoint ,''
  5473. FROM ICSInventoryLot a
  5474. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  5475. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  5476. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  5477. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  5478. ";
  5479. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransType, BusinessCode, Quantity);
  5480. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5481. {
  5482. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  5483. }
  5484. #region 获取分批后的条码(lotstr)
  5485. sql = @"SELECT TOP 1 LotNO FROM ICSInventoryLot WHERE EATTRIBUTE1='{0}' AND WorkPoint='{1}'
  5486. ORDER BY CAST(SUBSTRING(LotNO, (LEN(LotNO)-CHARINDEX('-',REVERSE(LotNO))+1)+1,CHARINDEX('-',REVERSE(LotNO))-1) AS INT) DESC";
  5487. sql = string.Format(sql, LotNo, WorkPoint);
  5488. dt = DBHelper.SQlReturnData(sql, cmd);
  5489. if (dt.Rows.Count == 0)
  5490. {
  5491. lotstr = LotNo + "-" + 1;
  5492. }
  5493. else
  5494. {
  5495. lotstr = LotNo + "-" + (Convert.ToInt32(dt.Rows[0]["LotNO"].ToString().Split('-')[dt.Rows[0]["LotNO"].ToString().Split('-').Length - 1]) + 1).ToString();
  5496. }
  5497. NewBarCodeList.Add(lotstr);//将分批后新条码添加到新集合
  5498. #endregion
  5499. #region 将分批后的条码记录插入条码表,库存表及日志表并将原条码库存数量清零
  5500. sql = @"INSERT INTO ICSInventoryLot(ID,LotNo,InvCode,ProductDate,ExpirationDate,
  5501. Quantity,Amount,ExtensionID,Type,PrintTimes,
  5502. LastPrintUser,LastPrintTime,MUSER,MUSERName,MTIME,
  5503. WorkPoint,EATTRIBUTE1,EATTRIBUTE2,EATTRIBUTE3,EATTRIBUTE4,EATTRIBUTE5,EATTRIBUTE6,EATTRIBUTE7,EATTRIBUTE8,
  5504. EATTRIBUTE9,EATTRIBUTE10,EATTRIBUTE11,EATTRIBUTE12,EATTRIBUTE13,EATTRIBUTE14,EATTRIBUTE15,EATTRIBUTE16,EATTRIBUTE17,EATTRIBUTE18,EATTRIBUTE19,EATTRIBUTE20,
  5505. EATTRIBUTE21,EATTRIBUTE22,EATTRIBUTE23,EATTRIBUTE24,EATTRIBUTE25,EATTRIBUTE26,EATTRIBUTE27,EATTRIBUTE28,EATTRIBUTE29,EATTRIBUTE30)
  5506. SELECT TOP 1 NEWID(),'{0}',a.InvCode,a.ProductDate,a.ExpirationDate,
  5507. '{2}',a.Amount,a.ExtensionID,a.Type,a.PrintTimes,
  5508. a.LastPrintUser,a.LastPrintTime,a.MUSER ,a.MUSERName ,GETDATE(),
  5509. a.WorkPoint ,'{1}',a.EATTRIBUTE2,a.EATTRIBUTE3,a.EATTRIBUTE4,a.EATTRIBUTE5,a.EATTRIBUTE6,a.EATTRIBUTE7,a.EATTRIBUTE8,
  5510. a.EATTRIBUTE9,a.EATTRIBUTE10,a.EATTRIBUTE11,a.EATTRIBUTE12,a.EATTRIBUTE13,a.EATTRIBUTE14,a.EATTRIBUTE15,a.EATTRIBUTE16,a.EATTRIBUTE17,a.EATTRIBUTE18,a.EATTRIBUTE19,a.EATTRIBUTE20,
  5511. a.EATTRIBUTE21,a.EATTRIBUTE22,a.EATTRIBUTE23,a.EATTRIBUTE24,a.EATTRIBUTE25,a.EATTRIBUTE26,a.EATTRIBUTE27,a.EATTRIBUTE28,a.EATTRIBUTE29,a.EATTRIBUTE30
  5512. From ICSInventoryLot a
  5513. where a.LotNo='{1}' and a.WorkPoint='{3}'";
  5514. sql = string.Format(sql, lotstr, LotNo, Quantity, WorkPoint);
  5515. cmd.CommandText = sql;
  5516. result = cmd.ExecuteNonQuery();
  5517. if (result <= 0)
  5518. {
  5519. throw new Exception(language.GetNameByCode("WMSAPIInfo195"));//条码分批后条码表存入失败!
  5520. }
  5521. #endregion
  5522. sql = @"INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  5523. select NEWID(),'{0}','{4}','{5}',InvCode,'{2}',InDate,LockQuantity
  5524. ,MUSER,MUSERName,GETDATE(),'{3}',''
  5525. from ICSWareHouseLotInfo
  5526. where LotNO='{1}' AND WorkPoint='{3}'";
  5527. sql = string.Format(sql, lotstr, LotNo, Quantity, WorkPoint, WarehouseCode, LocationCode);
  5528. cmd.CommandText = sql;
  5529. result = cmd.ExecuteNonQuery();
  5530. if (result <= 0)
  5531. {
  5532. throw new Exception(language.GetNameByCode("WMSAPIInfo196"));//条码分批后库存表存入失败!
  5533. }
  5534. //插入条码单据表
  5535. sql = @"INSERT INTO ICSInventoryLotDetail(LotNo,TransCode,TransSequence,MUSER,MUSERName,MTIME,WorkPoint)
  5536. SELECT '{3}',b.TransCode,b.TransSequence,f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint
  5537. FROM ICSInventoryLot a
  5538. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  5539. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  5540. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  5541. sql = string.Format(sql, LotNo, WorkPoint, User, lotstr);
  5542. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5543. {
  5544. throw new Exception(language.GetNameByCode("WMSAPIInfo174"));//"条码单据表写入失败!");
  5545. }
  5546. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  5547. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  5548. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  5549. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  5550. MTIME,WorkPoint,EATTRIBUTE1,LogID)
  5551. SELECT NEWID(),'{3}','','','{8}' ,a.InvCode ,
  5552. c.WarehouseCode,c.LocationCode,'{9}','{10}','{4}',
  5553. '{11}','0','{5}','{6}','0','',
  5554. '','','',f.F_Account ,f.F_RealName ,
  5555. SYSDATETIME() ,a.WorkPoint ,'','{7}'
  5556. FROM ICSInventoryLot a
  5557. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  5558. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  5559. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  5560. ";
  5561. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, Quantity, TransType, BusinessCode, MergeID, lotstr, WarehouseCode, LocationCode,Memo);
  5562. cmd.CommandText = sql;
  5563. result = cmd.ExecuteNonQuery();
  5564. if (result <= 0)
  5565. {
  5566. throw new Exception(language.GetNameByCode("WMSAPIInfo197"));//条码分批后库存日志表存入失败!
  5567. }
  5568. ///添加日志
  5569. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  5570. BEGIN
  5571. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  5572. RETURN
  5573. END
  5574. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  5575. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  5576. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  5577. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  5578. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  5579. SELECT NEWID(),'{3}','','',a.LotNo ,a.InvCode ,
  5580. c.WarehouseCode,c.LocationCode,'','',c.Quantity,
  5581. '','0','{5}','32','0','',
  5582. '','','',f.F_Account ,f.F_RealName ,
  5583. SYSDATETIME() ,a.WorkPoint ,'','{7}'
  5584. FROM ICSInventoryLot a
  5585. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  5586. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  5587. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  5588. ";
  5589. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, Quantity, TransType, BusinessCode, MergeID);
  5590. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5591. {
  5592. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  5593. }
  5594. if (PrintEnable.Equals("True"))
  5595. {
  5596. 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
  5597. from ICSWareHouseLotInfolog A
  5598. left join ICSInventoryLot B on A.LotNO=B.LotNO and a.WorkPoint=b.WorkPoint
  5599. left join ICSWareHouseLotInfo C ON A.LotNO=C.LotNO and a.WorkPoint=c.WorkPoint
  5600. left join ICSInventory D on b.INVCODE=d.INVCODE and b.WorkPoint=d.WorkPoint
  5601. where a.BusinessCode ='105'
  5602. and A.lotno like'{0}%' and a.workpoint='{1}'
  5603. ";
  5604. sql = string.Format(sql, LotNo, WorkPoint);
  5605. dtLotno = DBHelper.SQlReturnData(sql, cmd);
  5606. lstDt = dtLotno;
  5607. }
  5608. }
  5609. else
  5610. {
  5611. ///添加日志
  5612. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  5613. BEGIN
  5614. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  5615. RETURN
  5616. END
  5617. IF EXISTS(SELECT id FROM ICSWareHouseLotInfo WHERE WarehouseCode='{7}' AND LocationCode='{8}' AND WorkPoint='{1}' AND LotNo = '{0}')
  5618. BEGIN
  5619. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo355")) + @"',16,1);
  5620. RETURN
  5621. END
  5622. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  5623. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  5624. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  5625. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  5626. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  5627. SELECT NEWID(),'{3}','','',a.LotNo ,a.InvCode ,
  5628. c.WarehouseCode,c.LocationCode,'{7}','{8}',{4},
  5629. '{10}','0','{5}','{6}','0','',
  5630. '','','',f.F_Account ,f.F_RealName ,
  5631. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  5632. FROM ICSInventoryLot a
  5633. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  5634. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  5635. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  5636. ";
  5637. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, Quantity, TransType, BusinessCode, WarehouseCode, LocationCode, MergeID,Memo);
  5638. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5639. {
  5640. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  5641. }
  5642. ///更新库存
  5643. sql = @"UPDATE ICSWareHouseLotInfo SET WareHouseCode='{2}',LocationCode='{3}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  5644. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity<0)
  5645. BEGIN
  5646. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  5647. RETURN
  5648. END";
  5649. sql = string.Format(sql, LotNo, WorkPoint, WarehouseCode, LocationCode);
  5650. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5651. {
  5652. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  5653. }
  5654. }
  5655. }
  5656. catch (Exception)
  5657. {
  5658. log.Error(sql);
  5659. throw;
  5660. }
  5661. return lstDt;
  5662. }
  5663. /// <summary>
  5664. /// 修改库存
  5665. /// </summary>
  5666. /// <param name="Identification"></param>
  5667. /// <param name="TransCode"></param>
  5668. /// <param name="TransSequence"></param>
  5669. /// <param name="LotNo"></param>
  5670. /// <param name="Quantity"></param>
  5671. /// <param name="User"></param>
  5672. /// <param name="WorkPoint"></param>
  5673. /// <param name="TransType"></param>
  5674. /// <param name="cmd"></param>
  5675. public static void WareHouseLotInfoUpdate(string Identification, string TransCode, string TransSequence, string LotNo, string Quantity, string User,
  5676. string WorkPoint, string TransType,string CheckKind, SqlCommand cmd, Dictionary<string, string> language)
  5677. {
  5678. try
  5679. {
  5680. ///添加日志
  5681. string sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  5682. BEGIN
  5683. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  5684. RETURN
  5685. END
  5686. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  5687. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  5688. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  5689. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  5690. MTIME,WorkPoint,EATTRIBUTE1)
  5691. SELECT NEWID(),'{3}','{4}','{5}',a.LotNo ,a.InvCode ,
  5692. a.WarehouseCode,a.LocationCode,'','',a.Quantity,
  5693. '{8}','0','{6}','{7}','0','',
  5694. '','','',f.F_Account ,f.F_RealName ,
  5695. SYSDATETIME() ,a.WorkPoint ,''
  5696. FROM ICSWareHouseLotInfo a
  5697. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  5698. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  5699. ";
  5700. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, TransType, TransTypeEnum.LOTCheckBefore.GetDescription<DBValue>(), CheckKind);
  5701. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5702. {
  5703. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  5704. }
  5705. ///更新库存
  5706. sql = @"UPDATE ICSWareHouseLotInfo SET Quantity='{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'";
  5707. sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  5708. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5709. {
  5710. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  5711. }
  5712. ///添加日志
  5713. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  5714. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  5715. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  5716. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  5717. MTIME,WorkPoint,EATTRIBUTE1)
  5718. SELECT NEWID(),'{3}','{4}','{5}',a.LotNo ,a.InvCode ,
  5719. a.WarehouseCode,a.LocationCode,'','',a.Quantity,
  5720. '{8}','0','{6}','{7}','0','',
  5721. '','','',f.F_Account ,f.F_RealName ,
  5722. SYSDATETIME() ,a.WorkPoint ,''
  5723. FROM ICSWareHouseLotInfo a
  5724. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  5725. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  5726. ";
  5727. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, TransType, TransTypeEnum.LOTCheckAfter.GetDescription<DBValue>(), CheckKind);
  5728. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5729. {
  5730. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  5731. }
  5732. }
  5733. catch (Exception)
  5734. {
  5735. throw;
  5736. }
  5737. }
  5738. /// <summary>
  5739. /// 调拨
  5740. /// </summary>
  5741. /// <param name="LocationCode"></param>
  5742. /// <param name="LotNo"></param>
  5743. /// <param name="Quantity"></param>
  5744. /// <param name="User"></param>
  5745. /// <param name="WorkPoint"></param>
  5746. /// <param name="TransType"></param>
  5747. /// <param name="BusinessCode"></param>
  5748. /// <param name="cmd"></param>
  5749. public static DataTable WareHouseLotInfoTransfer(string Identification, string TransCode, string TransSequence, string WarehouseCode, string LocationCode,
  5750. string LotNo, string Quantity, string User, string WorkPoint,string InWorkPoint, string TransType, string BusinessCode, SqlCommand cmd, Dictionary<string, string> language, string MergeID)
  5751. {
  5752. decimal LotQTYYY = 0;
  5753. decimal LotQTY = 0;
  5754. String LotEnable = "";
  5755. String PrintEnable = "";
  5756. String chekEnable = "";
  5757. String DisPrintEnable = "";
  5758. string lotstr = "";
  5759. int result = 0;
  5760. DataTable dtLotno = new DataTable();
  5761. DataTable lstDt = new DataTable();
  5762. List<string> NewBarCodeList = new List<string>();
  5763. string Colspan = "";
  5764. string ProjectCode = "";
  5765. string BatchCode = "";
  5766. string Version = "";
  5767. string Brand = "";
  5768. string cFree1 = "";
  5769. string cFree2 = "";
  5770. string cFree3 = "";
  5771. string cFree4 = "";
  5772. string cFree5 = "";
  5773. string cFree6 = "";
  5774. string cFree7 = "";
  5775. string cFree8 = "";
  5776. string cFree9 = "";
  5777. string cFree10 = "";
  5778. string IDD = "";
  5779. try
  5780. {
  5781. //派纳不查站点
  5782. if (DBHelper.IsPNU9())
  5783. {
  5784. 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
  5785. from Sys_SRM_Items a
  5786. left join Sys_SRM_ItemsDetail b on a.F_Id=b.F_ItemId
  5787. where a.F_EnCode='TransBatch' and b.F_ItemCode='{0}' )
  5788. BEGIN
  5789. RAISERROR('" + language.GetNameByCode("WMSAPIInfo470") + @"',16,1);
  5790. RETURN
  5791. END
  5792. select b.F_ItemCode as Code ,b.F_ItemName as Name,b.F_EnabledMark AS Enable ,b.F_IsDefault AS DisPrintEnable
  5793. from Sys_SRM_Items a
  5794. left join Sys_SRM_ItemsDetail b on a.F_Id=b.F_ItemId
  5795. where a.F_EnCode='TransBatch' and b.F_ItemCode='{0}'
  5796. ";
  5797. cheksql = string.Format(cheksql, BusinessCode);
  5798. DataTable chekdt = DBHelper.SQlReturnData(cheksql, cmd);
  5799. if (chekdt.Rows.Count == 0)
  5800. {
  5801. throw new Exception(language.GetNameByCode("WMSAPIInfo369"));
  5802. }
  5803. else
  5804. {
  5805. chekEnable = chekdt.Rows[0]["Enable"].ToString();
  5806. DisPrintEnable = chekdt.Rows[0]["DisPrintEnable"].ToString();
  5807. }
  5808. //检验是否分批
  5809. string sql = @"SELECT b.LotEnable,b.PrintEnable FROM ICSInventoryLot a
  5810. LEFT JOIN ICSInventory b ON a.InvCode=b.InvCode --AND a.WorkPoint=b.WorkPoint
  5811. where a.LotNo='{0}'
  5812. ";
  5813. sql = string.Format(sql, LotNo, WorkPoint);
  5814. DataTable dt = DBHelper.SQlReturnData(sql, cmd);
  5815. if (dt.Rows.Count == 0)
  5816. {
  5817. throw new Exception(language.GetNameByCode("WMSAPIInfo369"));
  5818. }
  5819. else
  5820. {
  5821. LotEnable = dt.Rows[0]["LotEnable"].ToString();
  5822. PrintEnable = dt.Rows[0]["PrintEnable"].ToString();
  5823. }
  5824. sql = @"select Quantity from ICSWareHouseLotInfo
  5825. where LotNO='{0}' ";
  5826. sql = string.Format(sql, LotNo, WorkPoint);
  5827. DataTable dtt = DBHelper.SQlReturnData(sql, cmd);
  5828. LotQTYYY = Convert.ToDecimal(dtt.Rows[0]["Quantity"]);
  5829. LotQTY = Convert.ToDecimal(Quantity);
  5830. if (LotEnable.Equals("True") && chekEnable.Equals("True") && LotQTYYY - LotQTY > 0)//增加数量判断
  5831. {
  5832. ///更新库存
  5833. sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}' , WorkPoint='{3}' WHERE LotNo='{0}'
  5834. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND Quantity<0)
  5835. BEGIN
  5836. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  5837. RETURN
  5838. END";
  5839. sql = string.Format(sql, LotNo, WorkPoint, Quantity,InWorkPoint);
  5840. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5841. {
  5842. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  5843. }
  5844. ///分批前添加日志
  5845. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  5846. BEGIN
  5847. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  5848. RETURN
  5849. END
  5850. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  5851. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  5852. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  5853. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  5854. MTIME,WorkPoint,EATTRIBUTE1)
  5855. SELECT NEWID(),'{3}','{7}','{8}',a.LotNo ,a.InvCode ,
  5856. c.WarehouseCode,c.LocationCode,'','',c.Quantity+{6},
  5857. '','0','{4}','31','0','',
  5858. '','','',f.F_Account ,f.F_RealName ,
  5859. SYSDATETIME() ,'{1}' ,''
  5860. FROM ICSInventoryLot a
  5861. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo --AND a.WorkPoint=b.WorkPoint
  5862. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo --AND a.WorkPoint=c.WorkPoint
  5863. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  5864. WHERE a.LotNo='{0}'
  5865. ";
  5866. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransType, BusinessCode, Quantity, TransCode, TransSequence);
  5867. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5868. {
  5869. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  5870. }
  5871. #region 获取分批后的条码(lotstr)
  5872. sql = @"SELECT TOP 1 LotNO FROM ICSInventoryLot WHERE EATTRIBUTE1='{0}'
  5873. ORDER BY CAST(SUBSTRING(LotNO, (LEN(LotNO)-CHARINDEX('-',REVERSE(LotNO))+1)+1,CHARINDEX('-',REVERSE(LotNO))-1) AS INT) DESC";
  5874. sql = string.Format(sql, LotNo, WorkPoint);
  5875. dt = DBHelper.SQlReturnData(sql, cmd);
  5876. if (dt.Rows.Count == 0)
  5877. {
  5878. lotstr = LotNo + "-" + 1;
  5879. }
  5880. else
  5881. {
  5882. lotstr = LotNo + "-" + (Convert.ToInt32(dt.Rows[0]["LotNO"].ToString().Split('-')[dt.Rows[0]["LotNO"].ToString().Split('-').Length - 1]) + 1).ToString();
  5883. }
  5884. NewBarCodeList.Add(lotstr);//将分批后新条码添加到新集合
  5885. #endregion
  5886. #region 将分批后的条码记录插入条码表,库存表及日志表并将原条码库存数量清零
  5887. sql = @"INSERT INTO ICSInventoryLot(ID,LotNo,InvCode,ProductDate,ExpirationDate,
  5888. Quantity,Amount,ExtensionID,Type,PrintTimes,
  5889. LastPrintUser,LastPrintTime,MUSER,MUSERName,MTIME,
  5890. WorkPoint,EATTRIBUTE1)
  5891. SELECT TOP 1 NEWID(),'{0}',a.InvCode,a.ProductDate,a.ExpirationDate,
  5892. '{2}',a.Amount,a.ExtensionID,a.Type,a.PrintTimes,
  5893. a.LastPrintUser,a.LastPrintTime,a.MUSER ,a.MUSERName ,GETDATE(),
  5894. '{3}' ,'{1}'
  5895. From ICSInventoryLot a
  5896. where a.LotNo='{1}' ";
  5897. sql = string.Format(sql, lotstr, LotNo, Quantity, WorkPoint);
  5898. cmd.CommandText = sql;
  5899. result = cmd.ExecuteNonQuery();
  5900. if (result <= 0)
  5901. {
  5902. throw new Exception(language.GetNameByCode("WMSAPIInfo195"));//条码分批后条码表存入失败!
  5903. }
  5904. #endregion
  5905. sql = @"INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  5906. select NEWID(),'{0}','{4}','{5}',InvCode,'{2}',InDate,LockQuantity
  5907. ,MUSER,MUSERName,GETDATE(),'{3}',''
  5908. from ICSWareHouseLotInfo
  5909. where LotNO='{1}' ";
  5910. sql = string.Format(sql, lotstr, LotNo, Quantity, WorkPoint, WarehouseCode, LocationCode);
  5911. cmd.CommandText = sql;
  5912. result = cmd.ExecuteNonQuery();
  5913. if (result <= 0)
  5914. {
  5915. throw new Exception(language.GetNameByCode("WMSAPIInfo196"));//条码分批后库存表存入失败!
  5916. }
  5917. //插入条码单据表
  5918. sql = @"INSERT INTO ICSInventoryLotDetail(LotNo,TransCode,TransSequence,MUSER,MUSERName,MTIME,WorkPoint)
  5919. SELECT '{3}',b.TransCode,b.TransSequence,f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint
  5920. FROM ICSInventoryLot a
  5921. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo --AND a.WorkPoint=b.WorkPoint
  5922. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  5923. WHERE a.LotNo='{0}' ";
  5924. sql = string.Format(sql, LotNo, WorkPoint, User, lotstr);
  5925. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5926. {
  5927. throw new Exception(language.GetNameByCode("WMSAPIInfo174"));//"条码单据表写入失败!");
  5928. }
  5929. sql = @"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,LogID)
  5934. SELECT NEWID(),'{3}','{4}','{5}','{10}' ,a.InvCode ,
  5935. c.WarehouseCode,c.LocationCode,'{11}','{12}','{6}',
  5936. '','0','{7}','{8}','0','',
  5937. '','','',f.F_Account ,f.F_RealName ,
  5938. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  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}'
  5943. ";
  5944. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID, lotstr, WarehouseCode, LocationCode);
  5945. cmd.CommandText = sql;
  5946. result = cmd.ExecuteNonQuery();
  5947. if (result <= 0)
  5948. {
  5949. throw new Exception(language.GetNameByCode("WMSAPIInfo197"));//条码分批后库存日志表存入失败!
  5950. }
  5951. ///添加日志
  5952. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  5953. BEGIN
  5954. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  5955. RETURN
  5956. END
  5957. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  5958. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  5959. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  5960. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  5961. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  5962. SELECT NEWID(),'{3}','{4}','{5}',a.LotNo ,a.InvCode ,
  5963. c.WarehouseCode,c.LocationCode,'','',c.Quantity,
  5964. '','0','{7}','32','0','',
  5965. '','','',f.F_Account ,f.F_RealName ,
  5966. SYSDATETIME() ,'{1}' ,'','{9}'
  5967. FROM ICSInventoryLot a
  5968. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo --AND a.WorkPoint=c.WorkPoint
  5969. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  5970. WHERE a.LotNo='{0}'
  5971. ";
  5972. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID);
  5973. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  5974. {
  5975. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  5976. }
  5977. if (PrintEnable.Equals("True"))
  5978. {
  5979. string PrintData = DBHelper.ReadFileStream();
  5980. //sql = @""+PrintData+"";
  5981. 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
  5982. from ICSWareHouseLotInfolog A
  5983. left join ICSInventoryLot B on A.LotNO=B.LotNO and a.WorkPoint=b.WorkPoint
  5984. left join ICSWareHouseLotInfo C ON A.LotNO=C.LotNO and a.WorkPoint=c.WorkPoint
  5985. left join ICSInventory D on b.INVCODE=d.INVCODE and b.WorkPoint=d.WorkPoint
  5986. where A.lotno like '%{0}%' and a.Identification='{3}' and a.BusinessCode='{2}'";
  5987. sql = string.Format(sql, LotNo, WorkPoint, BusinessCode, Identification);
  5988. dtLotno = DBHelper.SQlReturnData(sql, cmd);
  5989. lstDt = dtLotno;
  5990. }
  5991. }
  5992. else
  5993. {
  5994. if (DBHelper.IsPNU9() && TransType == "14")
  5995. {
  5996. ///添加日志
  5997. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' )
  5998. BEGIN
  5999. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  6000. RETURN
  6001. END
  6002. IF EXISTS(SELECT id FROM ICSWareHouseLotInfo WHERE WarehouseCode='{9}' AND LocationCode='{10}' AND LotNo = '{0}')
  6003. BEGIN
  6004. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo355")) + @"',16,1);
  6005. RETURN
  6006. END
  6007. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  6008. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  6009. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  6010. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  6011. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  6012. SELECT NEWID(),'{3}','{4}','{5}',a.LotNo ,a.InvCode ,
  6013. c.WarehouseCode,c.LocationCode,'{9}','{10}',{6},
  6014. '','0','{7}','{8}','0','',
  6015. '','','',f.F_Account ,f.F_RealName ,
  6016. SYSDATETIME() ,'{1}' ,'','{11}'
  6017. FROM ICSInventoryLot a
  6018. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo --AND a.WorkPoint=c.WorkPoint
  6019. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  6020. WHERE a.LotNo='{0}'
  6021. ";
  6022. sql = string.Format(sql, LotNo, InWorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, WarehouseCode, LocationCode, MergeID);
  6023. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  6024. {
  6025. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  6026. }
  6027. }
  6028. else
  6029. {
  6030. ///添加日志
  6031. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' )
  6032. BEGIN
  6033. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  6034. RETURN
  6035. END
  6036. IF EXISTS(SELECT id FROM ICSWareHouseLotInfo WHERE WarehouseCode='{9}' AND LocationCode='{10}' AND LotNo = '{0}')
  6037. BEGIN
  6038. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo355")) + @"',16,1);
  6039. RETURN
  6040. END
  6041. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  6042. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  6043. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  6044. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  6045. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  6046. SELECT NEWID(),'{3}','{4}','{5}',a.LotNo ,a.InvCode ,
  6047. c.WarehouseCode,c.LocationCode,'{9}','{10}',{6},
  6048. '','0','{7}','{8}','0','',
  6049. '','','',f.F_Account ,f.F_RealName ,
  6050. SYSDATETIME() ,'{1}' ,'','{11}'
  6051. FROM ICSInventoryLot a
  6052. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo --AND a.WorkPoint=c.WorkPoint
  6053. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  6054. WHERE a.LotNo='{0}'
  6055. ";
  6056. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, WarehouseCode, LocationCode, MergeID);
  6057. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  6058. {
  6059. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  6060. }
  6061. }
  6062. if (DBHelper.IsPNU9() && TransType == "14")
  6063. {
  6064. ///更新库存
  6065. //sql = @"UPDATE ICSWareHouseLotInfo SET WorkPoint='{4}' WHERE LotNo='{0}'
  6066. // IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND Quantity<=0)
  6067. // BEGIN
  6068. // RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  6069. // RETURN
  6070. // END";
  6071. string upsql = @"select b.ProjectCode,b.BatchCode,b.Version,b.Brand,b.cFree1,b.cFree2,b.cFree3,
  6072. b.cFree4,b.cFree5,b.cFree6,b.cFree7,b.cFree8,b.cFree9,b.cFree10 from ICSInventoryLot a
  6073. INNER JOIN ICSExtension B on B.ID=A.ExtensionID
  6074. where a.lotno='{0}' and a.WorkPoint='{1}'";
  6075. upsql = string.Format(upsql, LotNo, WorkPoint);
  6076. DataTable Sumdtt = DBHelper.SQlReturnData(upsql, cmd);
  6077. ProjectCode = Sumdtt.Rows[0]["ProjectCode"].ToString();
  6078. BatchCode = Sumdtt.Rows[0]["BatchCode"].ToString();
  6079. Version = Sumdtt.Rows[0]["Version"].ToString();
  6080. Brand = Sumdtt.Rows[0]["Brand"].ToString();
  6081. cFree1 = Sumdtt.Rows[0]["cFree1"].ToString();
  6082. cFree2 = Sumdtt.Rows[0]["cFree2"].ToString();
  6083. cFree3 = Sumdtt.Rows[0]["cFree3"].ToString();
  6084. cFree4 = Sumdtt.Rows[0]["cFree4"].ToString();
  6085. cFree5 = Sumdtt.Rows[0]["cFree5"].ToString();
  6086. cFree6 = Sumdtt.Rows[0]["cFree6"].ToString();
  6087. cFree7 = Sumdtt.Rows[0]["cFree7"].ToString();
  6088. cFree8 = Sumdtt.Rows[0]["cFree8"].ToString();
  6089. cFree9 = Sumdtt.Rows[0]["cFree9"].ToString();
  6090. cFree10 = Sumdtt.Rows[0]["cFree10"].ToString();
  6091. //检验自由项
  6092. Colspan = ProjectCode + "~" + BatchCode + "~" + Version
  6093. + "~" + Brand + "~" + cFree1
  6094. + "~" + cFree2 + "~" + cFree3 + "~" + cFree4
  6095. + "~" + cFree5 + "~" + cFree6 + "~" + cFree7
  6096. + "~" + cFree8 + "~" + cFree9 + "~" + cFree10;
  6097. string exsql = @"select ID,Colspan from ICSExtension a
  6098. where Colspan='{0}' and WorkPoint='{1}'";
  6099. exsql = string.Format(exsql, Colspan, InWorkPoint);
  6100. DataTable dttt = DBHelper.SQlReturnData(exsql, cmd);
  6101. if (dttt.Rows.Count == 0)
  6102. {
  6103. IDD = Guid.NewGuid().ToString();
  6104. sql = @"Insert into ICSExtension(ID, Colspan, ProjectCode, BatchCode, Version, Brand, cFree1, cFree2, cFree3, cFree4, cFree5, cFree6, cFree7, cFree8, cFree9, cFree10, MTIME, MUSER, MUSERName, WorkPoint)
  6105. 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}'";
  6106. sql = string.Format(sql, Colspan, ProjectCode, BatchCode, Version, Brand, cFree1, cFree2, cFree3, cFree4, cFree5, cFree6, cFree7, cFree8, cFree9, cFree10, User, InWorkPoint, IDD);
  6107. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  6108. {
  6109. throw new Exception(language.GetNameByCode("WMSAPIInfo366"));
  6110. }
  6111. string uppsql = @"update ICSInventoryLot SET ExtensionID='{0}' where lotno='{1}'";
  6112. uppsql = string.Format(uppsql, IDD, LotNo);
  6113. if (!DBHelper.ExecuteNonQuery(uppsql, cmd))
  6114. {
  6115. throw new Exception(language.GetNameByCode("跨组织条码修改自由项id失败"));
  6116. }
  6117. }
  6118. else
  6119. {
  6120. string uppsql = @"update ICSInventoryLot SET ExtensionID='{0}' where lotno='{1}'";
  6121. uppsql = string.Format(uppsql, dttt.Rows[0]["ID"].ToString(), LotNo);
  6122. if (!DBHelper.ExecuteNonQuery(uppsql, cmd))
  6123. {
  6124. throw new Exception(language.GetNameByCode("跨组织条码修改自由项id失败"));
  6125. }
  6126. }
  6127. sql = @"IF EXISTS(SELECT id FROM ICSTransferApplication a WHERE a.TransferNO='{5}' AND isnull(EATTRIBUTE29,'')<>isnull(EATTRIBUTE30,''))
  6128. BEGIN
  6129. UPDATE ICSWareHouseLotInfo SET WorkPoint='{4}' WHERE LotNo='{0}'
  6130. UPDATE ICSInventoryLot SET WorkPoint='{4}' WHERE LotNo='{0}'
  6131. UPDATE ICSInventoryLotDetail SET WorkPoint='{4}' WHERE LotNo='{0}'
  6132. END
  6133. ELSE
  6134. BEGIN
  6135. UPDATE ICSInventoryLot SET WorkPoint='{4}' WHERE LotNo='{0}'
  6136. UPDATE ICSWareHouseLotInfo SET WareHouseCode='{2}',LocationCode='{3}' , WorkPoint='{4}' WHERE LotNo='{0}'
  6137. END
  6138. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND Quantity<=0)
  6139. BEGIN
  6140. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  6141. RETURN
  6142. END";
  6143. sql = string.Format(sql, LotNo, WorkPoint, WarehouseCode, LocationCode, InWorkPoint,TransCode);
  6144. }
  6145. else if (DBHelper.IsPNU9() && TransType == "6")
  6146. {
  6147. ///更新库存
  6148. //sql = @"UPDATE ICSWareHouseLotInfo SET WorkPoint='{4}' WHERE LotNo='{0}'
  6149. // IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND Quantity<=0)
  6150. // BEGIN
  6151. // RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  6152. // RETURN
  6153. // END";
  6154. string upsql = @"select b.ProjectCode,b.BatchCode,b.Version,b.Brand,b.cFree1,b.cFree2,b.cFree3,
  6155. b.cFree4,b.cFree5,b.cFree6,b.cFree7,b.cFree8,b.cFree9,b.cFree10 from ICSInventoryLot a
  6156. INNER JOIN ICSExtension B on B.ID=A.ExtensionID
  6157. where a.lotno='{0}' and a.WorkPoint='{1}'";
  6158. upsql = string.Format(upsql, LotNo, WorkPoint);
  6159. DataTable Sumdtt = DBHelper.SQlReturnData(upsql, cmd);
  6160. ProjectCode = Sumdtt.Rows[0]["ProjectCode"].ToString();
  6161. BatchCode = Sumdtt.Rows[0]["BatchCode"].ToString();
  6162. Version = Sumdtt.Rows[0]["Version"].ToString();
  6163. Brand = Sumdtt.Rows[0]["Brand"].ToString();
  6164. cFree1 = Sumdtt.Rows[0]["cFree1"].ToString();
  6165. cFree2 = Sumdtt.Rows[0]["cFree2"].ToString();
  6166. cFree3 = Sumdtt.Rows[0]["cFree3"].ToString();
  6167. cFree4 = Sumdtt.Rows[0]["cFree4"].ToString();
  6168. cFree5 = Sumdtt.Rows[0]["cFree5"].ToString();
  6169. cFree6 = Sumdtt.Rows[0]["cFree6"].ToString();
  6170. cFree7 = Sumdtt.Rows[0]["cFree7"].ToString();
  6171. cFree8 = Sumdtt.Rows[0]["cFree8"].ToString();
  6172. cFree9 = Sumdtt.Rows[0]["cFree9"].ToString();
  6173. cFree10 = Sumdtt.Rows[0]["cFree10"].ToString();
  6174. //检验自由项
  6175. Colspan = ProjectCode + "~" + BatchCode + "~" + Version
  6176. + "~" + Brand + "~" + cFree1
  6177. + "~" + cFree2 + "~" + cFree3 + "~" + cFree4
  6178. + "~" + cFree5 + "~" + cFree6 + "~" + cFree7
  6179. + "~" + cFree8 + "~" + cFree9 + "~" + cFree10;
  6180. string exsql = @"select ID,Colspan from ICSExtension a
  6181. where Colspan='{0}' and WorkPoint='{1}'";
  6182. exsql = string.Format(exsql, Colspan, WorkPoint);
  6183. DataTable dttt = DBHelper.SQlReturnData(exsql, cmd);
  6184. if (dttt.Rows.Count == 0)
  6185. {
  6186. IDD = Guid.NewGuid().ToString();
  6187. sql = @"Insert into ICSExtension(ID, Colspan, ProjectCode, BatchCode, Version, Brand, cFree1, cFree2, cFree3, cFree4, cFree5, cFree6, cFree7, cFree8, cFree9, cFree10, MTIME, MUSER, MUSERName, WorkPoint)
  6188. 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}'";
  6189. sql = string.Format(sql, Colspan, ProjectCode, BatchCode, Version, Brand, cFree1, cFree2, cFree3, cFree4, cFree5, cFree6, cFree7, cFree8, cFree9, cFree10, User, WorkPoint, IDD);
  6190. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  6191. {
  6192. throw new Exception(language.GetNameByCode("WMSAPIInfo366"));
  6193. }
  6194. string uppsql = @"update ICSInventoryLot SET ExtensionID='{0}' where lotno='{1}'";
  6195. uppsql = string.Format(uppsql, IDD, LotNo);
  6196. if (!DBHelper.ExecuteNonQuery(uppsql, cmd))
  6197. {
  6198. throw new Exception(language.GetNameByCode("跨组织条码修改自由项id失败"));
  6199. }
  6200. }
  6201. else
  6202. {
  6203. string uppsql = @"update ICSInventoryLot SET ExtensionID='{0}' where lotno='{1}'";
  6204. uppsql = string.Format(uppsql, dttt.Rows[0]["ID"].ToString(), LotNo);
  6205. if (!DBHelper.ExecuteNonQuery(uppsql, cmd))
  6206. {
  6207. throw new Exception(language.GetNameByCode("跨组织条码修改自由项id失败"));
  6208. }
  6209. }
  6210. sql = @"IF EXISTS(SELECT id FROM ICSTransferApplication a WHERE a.TransferNO='{5}' AND isnull(EATTRIBUTE29,'')<>isnull(EATTRIBUTE30,''))
  6211. BEGIN
  6212. UPDATE ICSWareHouseLotInfo SET WorkPoint='{4}' WHERE LotNo='{0}'
  6213. UPDATE ICSInventoryLot SET WorkPoint='{4}' WHERE LotNo='{0}'
  6214. END
  6215. ELSE
  6216. BEGIN
  6217. UPDATE ICSInventoryLot SET WorkPoint='{4}' WHERE LotNo='{0}'
  6218. UPDATE ICSWareHouseLotInfo SET WareHouseCode='{2}',LocationCode='{3}' , WorkPoint='{4}' WHERE LotNo='{0}'
  6219. END
  6220. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND Quantity<=0)
  6221. BEGIN
  6222. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  6223. RETURN
  6224. END";
  6225. sql = string.Format(sql, LotNo, WorkPoint, WarehouseCode, LocationCode, WorkPoint, TransCode);
  6226. }
  6227. else
  6228. {
  6229. ///更新库存
  6230. sql = @"UPDATE ICSWareHouseLotInfo SET WareHouseCode='{2}',LocationCode='{3}' , WorkPoint='{1}' WHERE LotNo='{0}'
  6231. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND Quantity<=0)
  6232. BEGIN
  6233. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  6234. RETURN
  6235. END";
  6236. sql = string.Format(sql, LotNo, WorkPoint, WarehouseCode, LocationCode, WorkPoint);
  6237. }
  6238. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  6239. {
  6240. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  6241. }
  6242. }
  6243. DateTime now = DateTime.Now;
  6244. sql = @"select 1 from ICSContainerLot
  6245. where LotNo='{0}'
  6246. ";
  6247. sql = string.Format(sql, LotNo, WorkPoint);
  6248. log.Debug("查询容器条码关联表是否存在");
  6249. DataTable dttte = DBHelper.SQlReturnData(sql, cmd);
  6250. if (dttte.Rows.Count > 0)
  6251. {
  6252. ///删除条码关联表数据
  6253. sql = @"DELETE FROM ICSContainerLot
  6254. where LotNo='{0}'
  6255. ";
  6256. sql = string.Format(sql, LotNo, WorkPoint);
  6257. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  6258. {
  6259. throw new Exception(language.GetNameByCode("容器条码关联表数据删除失败"));
  6260. }
  6261. }
  6262. }
  6263. else
  6264. {
  6265. 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
  6266. from Sys_SRM_Items a
  6267. left join Sys_SRM_ItemsDetail b on a.F_Id=b.F_ItemId
  6268. where a.F_EnCode='TransBatch' and b.F_ItemCode='{0}' )
  6269. BEGIN
  6270. RAISERROR('" + language.GetNameByCode("WMSAPIInfo470") + @"',16,1);
  6271. RETURN
  6272. END
  6273. select b.F_ItemCode as Code ,b.F_ItemName as Name,b.F_EnabledMark AS Enable ,b.F_IsDefault AS DisPrintEnable
  6274. from Sys_SRM_Items a
  6275. left join Sys_SRM_ItemsDetail b on a.F_Id=b.F_ItemId
  6276. where a.F_EnCode='TransBatch' and b.F_ItemCode='{0}'
  6277. ";
  6278. cheksql = string.Format(cheksql, BusinessCode);
  6279. DataTable chekdt = DBHelper.SQlReturnData(cheksql, cmd);
  6280. if (chekdt.Rows.Count == 0)
  6281. {
  6282. throw new Exception(language.GetNameByCode("WMSAPIInfo369"));
  6283. }
  6284. else
  6285. {
  6286. chekEnable = chekdt.Rows[0]["Enable"].ToString();
  6287. DisPrintEnable = chekdt.Rows[0]["DisPrintEnable"].ToString();
  6288. }
  6289. //检验是否分批
  6290. string sql = @"SELECT b.LotEnable,b.PrintEnable FROM ICSInventoryLot a
  6291. LEFT JOIN ICSInventory b ON a.InvCode=b.InvCode AND a.WorkPoint=b.WorkPoint
  6292. where a.LotNo='{0}' and a.WorkPoint='{1}'
  6293. ";
  6294. sql = string.Format(sql, LotNo, WorkPoint);
  6295. DataTable dt = DBHelper.SQlReturnData(sql, cmd);
  6296. if (dt.Rows.Count == 0)
  6297. {
  6298. throw new Exception(language.GetNameByCode("WMSAPIInfo369"));
  6299. }
  6300. else
  6301. {
  6302. LotEnable = dt.Rows[0]["LotEnable"].ToString();
  6303. PrintEnable = dt.Rows[0]["PrintEnable"].ToString();
  6304. }
  6305. sql = @"select Quantity from ICSWareHouseLotInfo
  6306. where LotNO='{0}' AND WorkPoint='{1}'";
  6307. sql = string.Format(sql, LotNo, WorkPoint);
  6308. DataTable dtt = DBHelper.SQlReturnData(sql, cmd);
  6309. LotQTYYY = Convert.ToDecimal(dtt.Rows[0]["Quantity"]);
  6310. LotQTY = Convert.ToDecimal(Quantity);
  6311. if (LotEnable.Equals("True") && chekEnable.Equals("True") && LotQTYYY - LotQTY > 0)//增加数量判断
  6312. {
  6313. ///更新库存
  6314. sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  6315. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND Quantity<0)
  6316. BEGIN
  6317. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  6318. RETURN
  6319. END";
  6320. sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  6321. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  6322. {
  6323. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  6324. }
  6325. ///分批前添加日志
  6326. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  6327. BEGIN
  6328. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  6329. RETURN
  6330. END
  6331. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  6332. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  6333. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  6334. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  6335. MTIME,WorkPoint,EATTRIBUTE1)
  6336. SELECT NEWID(),'{3}','{7}','{8}',a.LotNo ,a.InvCode ,
  6337. c.WarehouseCode,c.LocationCode,'','',c.Quantity+{6},
  6338. '','0','{4}','31','0','',
  6339. '','','',f.F_Account ,f.F_RealName ,
  6340. SYSDATETIME() ,a.WorkPoint ,''
  6341. FROM ICSInventoryLot a
  6342. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  6343. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  6344. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  6345. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  6346. ";
  6347. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransType, BusinessCode, Quantity, TransCode, TransSequence);
  6348. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  6349. {
  6350. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  6351. }
  6352. #region 获取分批后的条码(lotstr)
  6353. sql = @"SELECT TOP 1 LotNO FROM ICSInventoryLot WHERE EATTRIBUTE1='{0}' AND WorkPoint='{1}'
  6354. ORDER BY CAST(SUBSTRING(LotNO, (LEN(LotNO)-CHARINDEX('-',REVERSE(LotNO))+1)+1,CHARINDEX('-',REVERSE(LotNO))-1) AS INT) DESC";
  6355. sql = string.Format(sql, LotNo, WorkPoint);
  6356. dt = DBHelper.SQlReturnData(sql, cmd);
  6357. if (dt.Rows.Count == 0)
  6358. {
  6359. lotstr = LotNo + "-" + 1;
  6360. }
  6361. else
  6362. {
  6363. lotstr = LotNo + "-" + (Convert.ToInt32(dt.Rows[0]["LotNO"].ToString().Split('-')[dt.Rows[0]["LotNO"].ToString().Split('-').Length - 1]) + 1).ToString();
  6364. }
  6365. NewBarCodeList.Add(lotstr);//将分批后新条码添加到新集合
  6366. #endregion
  6367. #region 将分批后的条码记录插入条码表,库存表及日志表并将原条码库存数量清零
  6368. sql = @"INSERT INTO ICSInventoryLot(ID,LotNo,InvCode,ProductDate,ExpirationDate,
  6369. Quantity,Amount,ExtensionID,Type,PrintTimes,
  6370. LastPrintUser,LastPrintTime,MUSER,MUSERName,MTIME,
  6371. WorkPoint,EATTRIBUTE1,EATTRIBUTE2,EATTRIBUTE3,EATTRIBUTE4,EATTRIBUTE5,EATTRIBUTE6,EATTRIBUTE7,EATTRIBUTE8,
  6372. EATTRIBUTE9,EATTRIBUTE10,EATTRIBUTE11,EATTRIBUTE12,EATTRIBUTE13,EATTRIBUTE14,EATTRIBUTE15,EATTRIBUTE16,EATTRIBUTE17,EATTRIBUTE18,EATTRIBUTE19,EATTRIBUTE20,
  6373. EATTRIBUTE21,EATTRIBUTE22,EATTRIBUTE23,EATTRIBUTE24,EATTRIBUTE25,EATTRIBUTE26,EATTRIBUTE27,EATTRIBUTE28,EATTRIBUTE29,EATTRIBUTE30)
  6374. SELECT TOP 1 NEWID(),'{0}',a.InvCode,a.ProductDate,a.ExpirationDate,
  6375. '{2}',a.Amount,a.ExtensionID,a.Type,a.PrintTimes,
  6376. a.LastPrintUser,a.LastPrintTime,a.MUSER ,a.MUSERName ,GETDATE(),
  6377. a.WorkPoint ,'{1}',a.EATTRIBUTE2,a.EATTRIBUTE3,a.EATTRIBUTE4,a.EATTRIBUTE5,a.EATTRIBUTE6,a.EATTRIBUTE7,a.EATTRIBUTE8,
  6378. a.EATTRIBUTE9,a.EATTRIBUTE10,a.EATTRIBUTE11,a.EATTRIBUTE12,a.EATTRIBUTE13,a.EATTRIBUTE14,a.EATTRIBUTE15,a.EATTRIBUTE16,a.EATTRIBUTE17,a.EATTRIBUTE18,a.EATTRIBUTE19,a.EATTRIBUTE20,
  6379. a.EATTRIBUTE21,a.EATTRIBUTE22,a.EATTRIBUTE23,a.EATTRIBUTE24,a.EATTRIBUTE25,a.EATTRIBUTE26,a.EATTRIBUTE27,a.EATTRIBUTE28,a.EATTRIBUTE29,a.EATTRIBUTE30
  6380. From ICSInventoryLot a
  6381. where a.LotNo='{1}' and a.WorkPoint='{3}'";
  6382. sql = string.Format(sql, lotstr, LotNo, Quantity, WorkPoint);
  6383. cmd.CommandText = sql;
  6384. result = cmd.ExecuteNonQuery();
  6385. if (result <= 0)
  6386. {
  6387. throw new Exception(language.GetNameByCode("WMSAPIInfo195"));//条码分批后条码表存入失败!
  6388. }
  6389. #endregion
  6390. sql = @"INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  6391. select NEWID(),'{0}','{4}','{5}',InvCode,'{2}',InDate,LockQuantity
  6392. ,MUSER,MUSERName,GETDATE(),'{3}',''
  6393. from ICSWareHouseLotInfo
  6394. where LotNO='{1}' AND WorkPoint='{3}'";
  6395. sql = string.Format(sql, lotstr, LotNo, Quantity, WorkPoint, WarehouseCode, LocationCode);
  6396. cmd.CommandText = sql;
  6397. result = cmd.ExecuteNonQuery();
  6398. if (result <= 0)
  6399. {
  6400. throw new Exception(language.GetNameByCode("WMSAPIInfo196"));//条码分批后库存表存入失败!
  6401. }
  6402. //插入条码单据表
  6403. sql = @"INSERT INTO ICSInventoryLotDetail(LotNo,TransCode,TransSequence,MUSER,MUSERName,MTIME,WorkPoint)
  6404. SELECT '{3}',b.TransCode,b.TransSequence,f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint
  6405. FROM ICSInventoryLot a
  6406. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  6407. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  6408. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  6409. sql = string.Format(sql, LotNo, WorkPoint, User, lotstr);
  6410. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  6411. {
  6412. throw new Exception(language.GetNameByCode("WMSAPIInfo174"));//"条码单据表写入失败!");
  6413. }
  6414. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  6415. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  6416. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  6417. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  6418. MTIME,WorkPoint,EATTRIBUTE1,LogID)
  6419. SELECT NEWID(),'{3}','{4}','{5}','{10}' ,a.InvCode ,
  6420. c.WarehouseCode,c.LocationCode,'{11}','{12}','{6}',
  6421. '','0','{7}','{8}','0','',
  6422. '','','',f.F_Account ,f.F_RealName ,
  6423. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  6424. FROM ICSInventoryLot a
  6425. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  6426. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  6427. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  6428. ";
  6429. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID, lotstr, WarehouseCode, LocationCode);
  6430. cmd.CommandText = sql;
  6431. result = cmd.ExecuteNonQuery();
  6432. if (result <= 0)
  6433. {
  6434. throw new Exception(language.GetNameByCode("WMSAPIInfo197"));//条码分批后库存日志表存入失败!
  6435. }
  6436. ///添加日志
  6437. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  6438. BEGIN
  6439. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  6440. RETURN
  6441. END
  6442. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  6443. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  6444. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  6445. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  6446. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  6447. SELECT NEWID(),'{3}','{4}','{5}',a.LotNo ,a.InvCode ,
  6448. c.WarehouseCode,c.LocationCode,'','',c.Quantity,
  6449. '','0','{7}','32','0','',
  6450. '','','',f.F_Account ,f.F_RealName ,
  6451. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  6452. FROM ICSInventoryLot a
  6453. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  6454. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  6455. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  6456. ";
  6457. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID);
  6458. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  6459. {
  6460. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  6461. }
  6462. if (PrintEnable.Equals("True"))
  6463. {
  6464. string PrintData = DBHelper.ReadFileStream();
  6465. //sql = @""+PrintData+"";
  6466. 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
  6467. from ICSWareHouseLotInfolog A
  6468. left join ICSInventoryLot B on A.LotNO=B.LotNO and a.WorkPoint=b.WorkPoint
  6469. left join ICSWareHouseLotInfo C ON A.LotNO=C.LotNO and a.WorkPoint=c.WorkPoint
  6470. left join ICSInventory D on b.INVCODE=d.INVCODE and b.WorkPoint=d.WorkPoint
  6471. where A.lotno like '%{0}%' and a.Identification='{3}' and a.workpoint='{1}' and a.BusinessCode='{2}'";
  6472. sql = string.Format(sql, LotNo, WorkPoint, BusinessCode, Identification);
  6473. dtLotno = DBHelper.SQlReturnData(sql, cmd);
  6474. lstDt = dtLotno;
  6475. }
  6476. }
  6477. else
  6478. {
  6479. ///添加日志
  6480. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  6481. BEGIN
  6482. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  6483. RETURN
  6484. END
  6485. IF EXISTS(SELECT id FROM ICSWareHouseLotInfo WHERE WarehouseCode='{9}' AND LocationCode='{10}' AND WorkPoint='{1}' AND LotNo = '{0}')
  6486. BEGIN
  6487. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo355")) + @"',16,1);
  6488. RETURN
  6489. END
  6490. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  6491. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  6492. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  6493. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  6494. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  6495. SELECT NEWID(),'{3}','{4}','{5}',a.LotNo ,a.InvCode ,
  6496. c.WarehouseCode,c.LocationCode,'{9}','{10}',{6},
  6497. '','0','{7}','{8}','0','',
  6498. '','','',f.F_Account ,f.F_RealName ,
  6499. SYSDATETIME() ,a.WorkPoint ,'','{11}'
  6500. FROM ICSInventoryLot a
  6501. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  6502. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  6503. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  6504. ";
  6505. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, WarehouseCode, LocationCode, MergeID);
  6506. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  6507. {
  6508. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  6509. }
  6510. ///更新库存
  6511. sql = @"UPDATE ICSWareHouseLotInfo SET WareHouseCode='{2}',LocationCode='{3}',WorkPoint='{1}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  6512. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity<=0)
  6513. BEGIN
  6514. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  6515. RETURN
  6516. END";
  6517. sql = string.Format(sql, LotNo, WorkPoint, WarehouseCode, LocationCode);
  6518. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  6519. {
  6520. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  6521. }
  6522. }
  6523. DateTime now = DateTime.Now;
  6524. sql = @"select 1 from ICSContainerLot
  6525. where LotNo='{0}' and WorkPoint='{1}'
  6526. ";
  6527. sql = string.Format(sql, LotNo, WorkPoint);
  6528. log.Debug("查询容器条码关联表是否存在");
  6529. DataTable dttte = DBHelper.SQlReturnData(sql, cmd);
  6530. if (dttte.Rows.Count > 0)
  6531. {
  6532. ///删除条码关联表数据
  6533. sql = @"DELETE FROM ICSContainerLot
  6534. where LotNo='{0}' and WorkPoint='{1}'
  6535. ";
  6536. sql = string.Format(sql, LotNo, WorkPoint);
  6537. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  6538. {
  6539. throw new Exception(language.GetNameByCode("容器条码关联表数据删除失败"));
  6540. }
  6541. }
  6542. }
  6543. }
  6544. catch (Exception)
  6545. {
  6546. throw;
  6547. }
  6548. return lstDt;
  6549. }
  6550. /// <summary>
  6551. /// 移库
  6552. /// </summary>
  6553. /// <param name="LocationCode"></param>
  6554. /// <param name="LotNo"></param>
  6555. /// <param name="Quantity"></param>
  6556. /// <param name="User"></param>
  6557. /// <param name="WorkPoint"></param>
  6558. /// <param name="TransType"></param>
  6559. /// <param name="BusinessCode"></param>
  6560. /// <param name="cmd"></param>
  6561. public static void WareHouseLotInfoLibrary(string Identification, string TransCode, string TransSequence, string WarehouseCode, string LocationCode,
  6562. string LotNo, string User, string WorkPoint, string TransType, string BusinessCode,String ScanType, SqlCommand cmd, Dictionary<string, string> language)
  6563. {
  6564. try
  6565. {
  6566. string sql = @"SELECT WarehouseCode FROM ICSWareHouseLotInfo a WHERE LotNo='{0}' AND WorkPoint='{1}'";
  6567. sql = string.Format(sql, LotNo,WorkPoint);
  6568. DataTable dt = DBHelper.SQlReturnData(sql, cmd);
  6569. if (dt == null || dt.Rows.Count <= 0)
  6570. {
  6571. throw new Exception(string.Format(language.GetNameByCode("WMSAPIInfo171"), LotNo));
  6572. }
  6573. string whcode = dt.Rows[0]["WarehouseCode"].ToString();
  6574. ///添加日志
  6575. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  6576. BEGIN
  6577. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  6578. RETURN
  6579. END
  6580. IF('" + whcode + @"' != '{8}')
  6581. BEGIN
  6582. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo394"), "{8}", whcode) + @"', 16, 1);
  6583. RETURN
  6584. END
  6585. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  6586. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  6587. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  6588. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  6589. MTIME,WorkPoint,EATTRIBUTE1 )
  6590. SELECT NEWID(),'{3}','{4}','{5}',a.LotNo ,a.InvCode ,
  6591. c.WarehouseCode,c.LocationCode,'{8}','{9}',c.Quantity,
  6592. '','0','{6}','{7}','0','',
  6593. '','','',f.F_Account ,f.F_RealName ,
  6594. SYSDATETIME() ,a.WorkPoint ,''
  6595. FROM ICSInventoryLot a
  6596. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  6597. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  6598. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  6599. ";
  6600. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, TransType, BusinessCode, WarehouseCode, LocationCode);
  6601. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  6602. {
  6603. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  6604. }
  6605. ///添加库存
  6606. sql = @"IF NOT EXISTS(SELECT a.ID FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity>0)
  6607. BEGIN
  6608. RAISERROR('" + language.GetNameByCode("WMSAPIInfo038") + @"',16,1);
  6609. RETURN
  6610. END
  6611. IF NOT EXISTS(SELECT a.ID FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND a.WarehouseCode='{2}')
  6612. BEGIN
  6613. RAISERROR('" + language.GetNameByCode("WMSAPIInfo038") + @"',16,1);
  6614. RETURN
  6615. END
  6616. UPDATE ICSWareHouseLotInfo SET WarehouseCode='{2}',LocationCode='{3}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  6617. ";
  6618. sql = string.Format(sql, LotNo, WorkPoint, WarehouseCode, LocationCode);
  6619. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  6620. {
  6621. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存表更新失败!");
  6622. }
  6623. DateTime now = DateTime.Now;
  6624. if (ScanType== "LOTNO")
  6625. {
  6626. sql = @"select 1 from ICSContainerLot
  6627. where LotNo='{0}' and WorkPoint='{1}'
  6628. ";
  6629. sql = string.Format(sql, LotNo, WorkPoint);
  6630. log.Debug("查询容器条码关联表是否存在");
  6631. DataTable dttte = DBHelper.SQlReturnData(sql, cmd);
  6632. if (dttte.Rows.Count > 0)
  6633. {
  6634. ///删除条码关联表数据
  6635. sql = @"DELETE FROM ICSContainerLot
  6636. where LotNo='{0}' and WorkPoint='{1}'
  6637. ";
  6638. sql = string.Format(sql, LotNo, WorkPoint);
  6639. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  6640. {
  6641. throw new Exception(language.GetNameByCode("容器条码关联表数据删除失败"));
  6642. }
  6643. }
  6644. }
  6645. }
  6646. catch (Exception)
  6647. {
  6648. throw;
  6649. }
  6650. }
  6651. /// <summary>
  6652. /// 两步调入
  6653. /// </summary>
  6654. /// <param name="LocationCode"></param>
  6655. /// <param name="LotNo"></param>
  6656. /// <param name="Quantity"></param>
  6657. /// <param name="User"></param>
  6658. /// <param name="WorkPoint"></param>
  6659. /// <param name="TransType"></param>
  6660. /// <param name="BusinessCode"></param>
  6661. /// <param name="cmd"></param>
  6662. public static void WareHouseLotInfoTwoStepTransferDocIn(string Identification, string TransCode, string TransSequence, string WarehouseCode,
  6663. string LocationCode, string LotNo, string Quantity, string User, string WorkPoint, string TransType, string BusinessCode, SqlCommand cmd, Dictionary<string, string> language)
  6664. {
  6665. try
  6666. {
  6667. ///添加日志
  6668. string sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  6669. BEGIN
  6670. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  6671. RETURN
  6672. END
  6673. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  6674. ToWarehouseCode,ToLocationCode,Quantity,
  6675. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  6676. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  6677. MTIME,WorkPoint,EATTRIBUTE1)
  6678. SELECT NEWID(),'{3}','{4}','{5}',a.LotNo ,a.InvCode ,
  6679. '{9}','{10}','{6}',
  6680. '','0','{7}','{8}','0','',
  6681. '','','',f.F_Account ,f.F_RealName ,
  6682. SYSDATETIME() ,a.WorkPoint ,''
  6683. FROM ICSInventoryLot a
  6684. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  6685. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  6686. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  6687. ";
  6688. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, WarehouseCode, LocationCode);
  6689. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  6690. {
  6691. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  6692. }
  6693. ///添加库存
  6694. sql = @"IF NOT EXISTS(SELECT a.ID FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}')
  6695. BEGIN
  6696. RAISERROR('" + language.GetNameByCode("WMSAPIInfo171") + @"',16,1);
  6697. RETURN
  6698. END
  6699. UPDATE ICSWareHouseLotInfo SET WarehouseCode='{2}',LocationCode='{3}',Quantity=Quantity+'{4}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  6700. ";
  6701. sql = string.Format(sql, LotNo, WorkPoint, WarehouseCode, LocationCode, Quantity);
  6702. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  6703. {
  6704. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存表更新失败!");
  6705. }
  6706. }
  6707. catch (Exception)
  6708. {
  6709. throw;
  6710. }
  6711. }
  6712. /// <summary>
  6713. /// 锐腾两步调入
  6714. /// </summary>
  6715. /// <param name="LocationCode"></param>
  6716. /// <param name="LotNo"></param>
  6717. /// <param name="Quantity"></param>
  6718. /// <param name="User"></param>
  6719. /// <param name="WorkPoint"></param>
  6720. /// <param name="TransType"></param>
  6721. /// <param name="BusinessCode"></param>
  6722. /// <param name="cmd"></param>
  6723. public static void RTWareHouseLotInfoTwoStepTransferDocIn(string Identification, string TransCode, string TransSequence, string WarehouseCode,
  6724. string LocationCode, string LotNo, string Quantity, string User, string WorkPoint, string TransType, string BusinessCode, SqlCommand cmd, Dictionary<string, string> language)
  6725. {
  6726. try
  6727. {
  6728. ///添加日志
  6729. string sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  6730. BEGIN
  6731. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  6732. RETURN
  6733. END
  6734. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  6735. ToWarehouseCode,ToLocationCode,Quantity,
  6736. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  6737. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  6738. MTIME,WorkPoint,EATTRIBUTE1)
  6739. SELECT NEWID(),'{3}','{4}','{5}',a.LotNo ,a.InvCode ,
  6740. '{9}','{10}','{6}',
  6741. '','0','{7}','{8}','0','',
  6742. '','','',f.F_Account ,f.F_RealName ,
  6743. SYSDATETIME() ,a.WorkPoint ,''
  6744. FROM ICSInventoryLot a
  6745. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  6746. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  6747. ";
  6748. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, WarehouseCode, LocationCode);
  6749. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  6750. {
  6751. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  6752. }
  6753. ///添加库存
  6754. sql = @"IF EXISTS(SELECT a.ID FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}')
  6755. BEGIN
  6756. RAISERROR('!',16,1);
  6757. RETURN
  6758. END
  6759. INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  6760. SELECT NEWID(),a.LotNo ,e.WarehouseCode,d.LocationCode,a.InvCode ,'{3}',SYSDATETIME(),'0',f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint ,''
  6761. FROM ICSInventoryLot a
  6762. LEFT JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  6763. --INNER JOIN ICSOApplyNegDetail c ON b.TransCode=c.OApplyNegCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  6764. INNER JOIN ICSLocation d ON d.LocationCode='{4}' AND a.WorkPoint=d.WorkPoint
  6765. INNER JOIN ICSWarehouse e ON d.WHID=e.ID AND d.WorkPoint=e.WorkPoint
  6766. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  6767. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  6768. ";
  6769. sql = string.Format(sql, LotNo, WorkPoint, User, Quantity, LocationCode);
  6770. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  6771. {
  6772. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存表更新失败!");
  6773. }
  6774. }
  6775. catch (Exception)
  6776. {
  6777. throw;
  6778. }
  6779. }
  6780. /// <summary>
  6781. /// 合并日志
  6782. /// </summary>
  6783. /// <param name="Identification"></param>
  6784. /// <param name="LotNo"></param>
  6785. /// <param name="User"></param>
  6786. /// <param name="WorkPoint"></param>
  6787. /// <param name="TransType"></param>
  6788. /// <param name="BusinessCode"></param>
  6789. /// <param name="cmd"></param>
  6790. public static DataTable WareHouseLotInfoLogMerge(string Identification, string LotNo, string User, string WorkPoint, string TransType, string BusinessCode, string newLotno, SqlCommand cmd, Dictionary<string, string> language)
  6791. {
  6792. String LotEnable = "";
  6793. String PrintEnable = "";
  6794. DataTable dtLotno = new DataTable();
  6795. DataTable lstDt = new DataTable();
  6796. try
  6797. {
  6798. //检验是否分批
  6799. string sql = @"SELECT b.LotEnable,b.PrintEnable FROM ICSInventoryLot a
  6800. LEFT JOIN ICSInventory b ON a.InvCode=b.InvCode AND a.WorkPoint=b.WorkPoint
  6801. where a.LotNo='{0}' and a.WorkPoint='{1}'
  6802. ";
  6803. sql = string.Format(sql, LotNo, WorkPoint);
  6804. DataTable dt = DBHelper.SQlReturnData(sql, cmd);
  6805. if (dt.Rows.Count == 0)
  6806. {
  6807. throw new Exception(language.GetNameByCode("WMSAPIInfo369"));
  6808. }
  6809. else
  6810. {
  6811. LotEnable = dt.Rows[0]["LotEnable"].ToString();
  6812. PrintEnable = dt.Rows[0]["PrintEnable"].ToString();
  6813. }
  6814. ///添加日志
  6815. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  6816. BEGIN
  6817. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  6818. RETURN
  6819. END
  6820. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  6821. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  6822. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  6823. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  6824. MTIME,WorkPoint,EATTRIBUTE1)
  6825. SELECT NEWID(),'{3}',b.TransCode,b.TransSequence,a.LotNo ,a.InvCode ,
  6826. '','',c.WarehouseCode,c.LocationCode,c.Quantity,
  6827. '','0','{4}','{5}','0','',
  6828. '','','',f.F_Account ,f.F_RealName ,
  6829. SYSDATETIME() ,a.WorkPoint ,''
  6830. FROM ICSInventoryLot a
  6831. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  6832. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  6833. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  6834. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  6835. ";
  6836. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransType, BusinessCode);
  6837. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  6838. {
  6839. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  6840. }
  6841. if (PrintEnable.Equals("True"))
  6842. {
  6843. sql = @"select A.LotNO , B.Quantity AS OLDLotQty, C.Quantity AS LotQty ,b.InvCode,d.INVSTD,d.INVNAME,b.MTIME,A.TransCode
  6844. from ICSWareHouseLotInfolog A
  6845. left join ICSInventoryLot B on A.LotNO=B.LotNO and a.WorkPoint=b.WorkPoint
  6846. left join ICSWareHouseLotInfo C ON A.LotNO=C.LotNO and a.WorkPoint=c.WorkPoint
  6847. left join ICSInventory D on b.INVCODE=d.INVCODE and b.WorkPoint=d.WorkPoint
  6848. where a.BusinessCode='34'
  6849. and A.lotno = '{0}' and a.workpoint='{1}'
  6850. ";
  6851. sql = string.Format(sql, LotNo, WorkPoint, BusinessCode, newLotno);
  6852. dtLotno = DBHelper.SQlReturnData(sql, cmd);
  6853. lstDt = dtLotno;
  6854. }
  6855. }
  6856. catch (Exception)
  6857. {
  6858. throw;
  6859. }
  6860. return lstDt;
  6861. }
  6862. /// <summary>
  6863. /// 拆分、合并日志
  6864. /// </summary>
  6865. /// <param name="Identification"></param>
  6866. /// <param name="LotNo"></param>
  6867. /// <param name="User"></param>
  6868. /// <param name="WorkPoint"></param>
  6869. /// <param name="TransType"></param>
  6870. /// <param name="BusinessCode"></param>
  6871. /// <param name="cmd"></param>
  6872. public static DataTable WareHouseLotInfoLog(string Identification, string LotNo, string User, string WorkPoint, string TransType, string BusinessCode,string newLotno, SqlCommand cmd, Dictionary<string, string> language)
  6873. {
  6874. String LotEnable = "";
  6875. String PrintEnable = "";
  6876. DataTable dtLotno = new DataTable();
  6877. DataTable lstDt = new DataTable();
  6878. try{
  6879. //检验是否分批
  6880. string sql = @"SELECT b.LotEnable,b.PrintEnable FROM ICSInventoryLot a
  6881. LEFT JOIN ICSInventory b ON a.InvCode=b.InvCode AND a.WorkPoint=b.WorkPoint
  6882. where a.LotNo='{0}' and a.WorkPoint='{1}'
  6883. ";
  6884. sql = string.Format(sql, LotNo, WorkPoint);
  6885. DataTable dt = DBHelper.SQlReturnData(sql, cmd);
  6886. if (dt.Rows.Count == 0)
  6887. {
  6888. throw new Exception(language.GetNameByCode("WMSAPIInfo369"));
  6889. }
  6890. else
  6891. {
  6892. LotEnable = dt.Rows[0]["LotEnable"].ToString();
  6893. PrintEnable = dt.Rows[0]["PrintEnable"].ToString();
  6894. }
  6895. ///添加日志
  6896. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  6897. BEGIN
  6898. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  6899. RETURN
  6900. END
  6901. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  6902. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  6903. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  6904. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  6905. MTIME,WorkPoint,EATTRIBUTE1)
  6906. SELECT NEWID(),'{3}',b.TransCode,b.TransSequence,a.LotNo ,a.InvCode ,
  6907. '','',c.WarehouseCode,c.LocationCode,c.Quantity,
  6908. '','0','{4}','{5}','0','',
  6909. '','','',f.F_Account ,f.F_RealName ,
  6910. SYSDATETIME() ,a.WorkPoint ,''
  6911. FROM ICSInventoryLot a
  6912. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  6913. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  6914. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  6915. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  6916. ";
  6917. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransType, BusinessCode);
  6918. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  6919. {
  6920. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  6921. }
  6922. //if (PrintEnable.Equals("True"))
  6923. //{
  6924. // 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
  6925. // from ICSWareHouseLotInfolog A
  6926. // left join ICSInventoryLot B on A.LotNO=B.LotNO and a.WorkPoint=b.WorkPoint
  6927. // left join ICSWareHouseLotInfo C ON A.LotNO=C.LotNO and a.WorkPoint=c.WorkPoint
  6928. // left join ICSInventory D on b.INVCODE=d.INVCODE and b.WorkPoint=d.WorkPoint
  6929. // left JOIN ICSExtension f on b.ExtensionID=f.id and b.WorkPoint=f.WorkPoint
  6930. // where a.BusinessCode='32'
  6931. // and A.lotno = '{3}' and a.workpoint='{1}'
  6932. // ";
  6933. // sql = string.Format(sql, LotNo, WorkPoint, BusinessCode,newLotno);
  6934. // dtLotno = DBHelper.SQlReturnData(sql, cmd);
  6935. // lstDt = dtLotno;
  6936. //}
  6937. if (PrintEnable.Equals("True") )
  6938. {
  6939. string PrintData = DBHelper.ReadPrintStream();
  6940. sql = @"" + PrintData + "";
  6941. //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
  6942. // from ICSWareHouseLotInfolog A
  6943. // left join ICSInventoryLot B on A.LotNO=B.LotNO and a.WorkPoint=b.WorkPoint
  6944. // left join ICSWareHouseLotInfo C ON A.LotNO=C.LotNO and a.WorkPoint=c.WorkPoint
  6945. // left join ICSInventory D on b.INVCODE=d.INVCODE and b.WorkPoint=d.WorkPoint
  6946. // where A.lotno ='{0}' and a.workpoint='{1}' and a.BusinessCode='{2}'
  6947. // ";
  6948. sql = string.Format(sql, newLotno, WorkPoint, BusinessCode, Identification);
  6949. log.Debug("拆分数据源:"+ sql);
  6950. dtLotno = DBHelper.SQlReturnData(sql, cmd);
  6951. lstDt = dtLotno;
  6952. }
  6953. }
  6954. catch (Exception)
  6955. {
  6956. throw;
  6957. }
  6958. return lstDt;
  6959. }
  6960. /// <summary>
  6961. /// 合并
  6962. /// </summary>
  6963. /// <param name="Identification"></param>
  6964. /// <param name="LotNo"></param>
  6965. /// <param name="User"></param>
  6966. /// <param name="WorkPoint"></param>
  6967. /// <param name="TransType"></param>
  6968. /// <param name="BusinessCode"></param>
  6969. /// <param name="cmd"></param>
  6970. public static void WareHouseLotInfoMerge(string Identification, string LotNo, string CurrentLotNo, string Quantity, string User, string WorkPoint, string TransType,
  6971. string BusinessCode, SqlCommand cmd, Dictionary<string, string> language)
  6972. {
  6973. try
  6974. {
  6975. ///更新目标条码库存
  6976. string sql = @"IF NOT EXISTS(SELECT a.LotNo FROM ICSInventoryLot a
  6977. INNER JOIN ICSInventoryLot b ON b.LotNo='{3}' AND a.InvCode=b.InvCode AND a.WorkPoint=b.WorkPoint
  6978. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}')
  6979. BEGIN
  6980. RAISERROR('" + language.GetNameByCode("WMSAPIInfo170") + @"',16,1);
  6981. RETURN
  6982. END
  6983. IF NOT EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}')
  6984. BEGIN
  6985. RAISERROR('" + language.GetNameByCode("WMSAPIInfo171") + @"',16,1);
  6986. RETURN
  6987. END
  6988. IF EXISTS(
  6989. SELECT * FROM ICSWareHouseLotInfo a
  6990. INNER JOIN ICSInventoryLot c on a.LotNo=c.LotNo and a.WorkPoint=c.WorkPoint
  6991. INNER JOIN ICSInventory d on c.invcode=d.invcode and c.WorkPoint=d.WorkPoint
  6992. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' and d.BatchEnable='1'
  6993. )
  6994. BEGIN
  6995. IF NOT EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a
  6996. INNER JOIN ICSWareHouseLotInfo b ON b.LotNo='{3}' AND a.WarehouseCode=b.WarehouseCode AND a.WorkPoint=b.WorkPoint
  6997. INNER JOIN ICSInventoryLot c on a.LotNo=c.LotNo and a.WorkPoint=c.WorkPoint
  6998. INNER JOIN ICSInventoryLot d on b.LotNo=d.LotNo and b.WorkPoint=d.WorkPoint
  6999. INNER JOIN ICSExtension e on c.ExtensionID=e.ID and c.WorkPoint=e.WorkPoint
  7000. INNER JOIN ICSExtension f on d.ExtensionID=f.id and d.WorkPoint=f.WorkPoint
  7001. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' and e.ID=f.ID)
  7002. BEGIN
  7003. RAISERROR('/',16,1);
  7004. RETURN
  7005. END
  7006. END
  7007. IF NOT EXISTS(
  7008. SELECT * FROM ICSWareHouseLotInfo a
  7009. INNER JOIN ICSInventoryLot c on a.LotNo=c.LotNo and a.WorkPoint=c.WorkPoint
  7010. INNER JOIN ICSInventory d on c.invcode=d.invcode and c.WorkPoint=d.WorkPoint
  7011. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' and d.BatchEnable='1'
  7012. )
  7013. BEGIN
  7014. IF NOT EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a
  7015. INNER JOIN ICSWareHouseLotInfo b ON b.LotNo='{3}' AND a.WarehouseCode=b.WarehouseCode AND a.WorkPoint=b.WorkPoint
  7016. INNER JOIN ICSInventoryLot c on a.LotNo=c.LotNo and a.WorkPoint=c.WorkPoint
  7017. INNER JOIN ICSInventoryLot d on b.LotNo=d.LotNo and b.WorkPoint=d.WorkPoint
  7018. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}')
  7019. BEGIN
  7020. RAISERROR('/',16,1);
  7021. RETURN
  7022. END
  7023. END
  7024. UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)+'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  7025. UPDATE ICSInventoryLot SET Amount=(ISNULL(Amount,0)+(select Amount from
  7026. ICSInventoryLot where LotNo='{3}' AND WorkPoint='{1}')) WHERE LotNo='{0}' AND WorkPoint='{1}'
  7027. ";
  7028. sql = string.Format(sql, LotNo, WorkPoint, Quantity, CurrentLotNo);
  7029. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  7030. {
  7031. throw new Exception(language.GetNameByCode("WMSAPIInfo169"));//"目标条码库存更新失败!");
  7032. }
  7033. ///更新原条码库存
  7034. sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  7035. UPDATE ICSInventoryLot SET Amount=(ISNULL(Amount,0)-(select Amount from
  7036. ICSInventoryLot where LotNo='{0}' AND WorkPoint='{1}')) WHERE LotNo='{0}' AND WorkPoint='{1}'
  7037. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity<0)
  7038. BEGIN
  7039. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  7040. RETURN
  7041. END";
  7042. sql = string.Format(sql, CurrentLotNo, WorkPoint, Quantity);
  7043. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  7044. {
  7045. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  7046. }
  7047. ///添加日志
  7048. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  7049. BEGIN
  7050. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  7051. RETURN
  7052. END
  7053. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  7054. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  7055. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  7056. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  7057. MTIME,WorkPoint,EATTRIBUTE1)
  7058. SELECT NEWID(),'{3}',b.TransCode,b.TransSequence,a.LotNo ,a.InvCode ,
  7059. '','',c.WarehouseCode,c.LocationCode,c.Quantity,
  7060. '','0','{4}','{5}','0','',
  7061. '','','',f.F_Account ,f.F_RealName ,
  7062. SYSDATETIME() ,a.WorkPoint ,''
  7063. FROM ICSInventoryLot a
  7064. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  7065. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  7066. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  7067. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  7068. ";
  7069. sql = string.Format(sql, CurrentLotNo, WorkPoint, User, Identification, TransType, BusinessCode);
  7070. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  7071. {
  7072. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  7073. }
  7074. }
  7075. catch (Exception)
  7076. {
  7077. throw;
  7078. }
  7079. }
  7080. /// <summary>
  7081. /// 拆分
  7082. /// </summary>
  7083. /// <param name="Identification"></param>
  7084. /// <param name="LotNo"></param>
  7085. /// <param name="User"></param>
  7086. /// <param name="WorkPoint"></param>
  7087. /// <param name="TransType"></param>
  7088. /// <param name="BusinessCode"></param>
  7089. /// <param name="cmd"></param>
  7090. public static void WareHouseLotInfoSplit(string Identification, string LotNo, string CurrentLotNo, string Quantity, string User, string WorkPoint, string TransType,
  7091. string BusinessCode, SqlCommand cmd, Dictionary<string, string> language)
  7092. {
  7093. try
  7094. {
  7095. ///更新库存
  7096. string sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  7097. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity<0)
  7098. BEGIN
  7099. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  7100. RETURN
  7101. END";
  7102. sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  7103. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  7104. {
  7105. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  7106. }
  7107. #region 添加库存
  7108. //插入条码表
  7109. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  7110. BEGIN
  7111. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  7112. RETURN
  7113. END
  7114. IF EXISTS(SELECT a.LotNo FROM ICSInventoryLot a WHERE a.LotNo='{4}' AND a.WorkPoint='{1}')
  7115. BEGIN
  7116. RAISERROR('" + language.GetNameByCode("WMSAPIInfo172") + @"',16,1);
  7117. RETURN
  7118. END
  7119. INSERT INTO ICSInventoryLot(ID,LotNo,InvCode,ProductDate,ExpirationDate,Quantity,Amount,ExtensionID,Type,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1,EATTRIBUTE2,EATTRIBUTE3,EATTRIBUTE4,EATTRIBUTE5,EATTRIBUTE6,EATTRIBUTE7,EATTRIBUTE8,
  7120. EATTRIBUTE9,EATTRIBUTE10,EATTRIBUTE11,EATTRIBUTE12,EATTRIBUTE13,EATTRIBUTE14,EATTRIBUTE15,EATTRIBUTE16,EATTRIBUTE17,EATTRIBUTE18,EATTRIBUTE19,EATTRIBUTE20,
  7121. EATTRIBUTE21,EATTRIBUTE22,EATTRIBUTE23,EATTRIBUTE24,EATTRIBUTE25,EATTRIBUTE26,EATTRIBUTE27,EATTRIBUTE28,EATTRIBUTE29,EATTRIBUTE30)
  7122. 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,
  7123. a.EATTRIBUTE9,a.EATTRIBUTE10,a.EATTRIBUTE11,a.EATTRIBUTE12,a.EATTRIBUTE13,a.EATTRIBUTE14,a.EATTRIBUTE15,a.EATTRIBUTE16,a.EATTRIBUTE17,a.EATTRIBUTE18,a.EATTRIBUTE19,a.EATTRIBUTE20,
  7124. a.EATTRIBUTE21,a.EATTRIBUTE22,a.EATTRIBUTE23,a.EATTRIBUTE24,a.EATTRIBUTE25,a.EATTRIBUTE26,a.EATTRIBUTE27,a.EATTRIBUTE28,a.EATTRIBUTE29,a.EATTRIBUTE30
  7125. FROM ICSInventoryLot a
  7126. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  7127. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  7128. sql = string.Format(sql, LotNo, WorkPoint, User, Quantity, CurrentLotNo);
  7129. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  7130. {
  7131. throw new Exception(language.GetNameByCode("WMSAPIInfo173"));//"条码表写入失败!");
  7132. }
  7133. //插入条码单据表
  7134. sql = @"INSERT INTO ICSInventoryLotDetail(LotNo,TransCode,TransSequence,MUSER,MUSERName,MTIME,WorkPoint)
  7135. SELECT '{3}',b.TransCode,b.TransSequence,f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint
  7136. FROM ICSInventoryLot a
  7137. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  7138. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  7139. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  7140. sql = string.Format(sql, LotNo, WorkPoint, User, CurrentLotNo);
  7141. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  7142. {
  7143. throw new Exception(language.GetNameByCode("WMSAPIInfo174"));//"条码单据表写入失败!");
  7144. }
  7145. ///添加库存
  7146. sql = @"IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}')
  7147. BEGIN
  7148. RAISERROR('" + language.GetNameByCode("WMSAPIInfo164") + @"',16,1);
  7149. RETURN
  7150. END
  7151. INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1,freeze)
  7152. 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
  7153. FROM ICSInventoryLot a
  7154. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  7155. INNER JOIN ICSWareHouseLotInfo d ON a.EATTRIBUTE1=d.LotNo AND a.WorkPoint=d.WorkPoint
  7156. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  7157. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  7158. sql = string.Format(sql, CurrentLotNo, WorkPoint, User, Quantity);
  7159. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  7160. {
  7161. throw new Exception(language.GetNameByCode("WMSAPIInfo165"));
  7162. }
  7163. ///添加日志
  7164. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  7165. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  7166. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  7167. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  7168. MTIME,WorkPoint,EATTRIBUTE1)
  7169. SELECT NEWID(),'{3}',b.TransCode,b.TransSequence,a.LotNo ,a.InvCode ,
  7170. '','',c.WarehouseCode,c.LocationCode,c.Quantity,
  7171. '','0','{4}','{5}','0','',
  7172. '','','',f.F_Account ,f.F_RealName ,
  7173. SYSDATETIME() ,a.WorkPoint ,''
  7174. FROM ICSInventoryLot a
  7175. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  7176. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  7177. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  7178. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  7179. ";
  7180. sql = string.Format(sql, CurrentLotNo, WorkPoint, User, Identification, TransType, BusinessCode);
  7181. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  7182. {
  7183. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  7184. }
  7185. #endregion
  7186. }
  7187. catch (Exception)
  7188. {
  7189. throw;
  7190. }
  7191. }
  7192. /// <summary>
  7193. /// 拆分(奥美)
  7194. /// </summary>
  7195. /// <param name="Identification"></param>
  7196. /// <param name="LotNo"></param>
  7197. /// <param name="User"></param>
  7198. /// <param name="WorkPoint"></param>
  7199. /// <param name="TransType"></param>
  7200. /// <param name="BusinessCode"></param>
  7201. /// <param name="cmd"></param>
  7202. public static void AMWareHouseLotInfoSplit(string Identification, string LotNo, string CurrentLotNo, string Quantity, string User, string WorkPoint, string TransType,
  7203. string BusinessCode, SqlCommand cmd, Dictionary<string, string> language)
  7204. {
  7205. try
  7206. {
  7207. string amount = "";
  7208. //string sqql = @"select a.Amount FROM ICSInventoryLot a
  7209. // WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  7210. //sqql = string.Format(sqql, LotNo, WorkPoint);
  7211. //DataTable dtaa = DBHelper.SQlReturnData(sqql, cmd);
  7212. //amount = dtaa.Rows[0]["Amount"].ToString();
  7213. string cheksql = @"select d.EATTRIBUTE1 FROM ICSInventoryLot a
  7214. INNER JOIN ICSWareHouseLotInfo b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  7215. INNER JOIN ICSInventory d on a.InvCode=d.InvCode and a.WorkPoint=d.WorkPoint
  7216. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' and d.AmountEnable='1'";
  7217. cheksql = string.Format(cheksql, LotNo, WorkPoint);
  7218. DataTable dta = DBHelper.SQlReturnData(cheksql, cmd);
  7219. if (dta.Rows.Count > 0)
  7220. {
  7221. Quantity = (decimal.Parse(Quantity) * decimal.Parse(dta.Rows[0]["EATTRIBUTE1"].ToString())).ToString();
  7222. }
  7223. ///更新库存
  7224. string sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  7225. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity<0)
  7226. BEGIN
  7227. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  7228. RETURN
  7229. END";
  7230. sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  7231. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  7232. {
  7233. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  7234. }
  7235. #region 添加库存
  7236. //插入条码表
  7237. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  7238. BEGIN
  7239. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  7240. RETURN
  7241. END
  7242. IF EXISTS(SELECT a.LotNo FROM ICSInventoryLot a WHERE a.LotNo='{4}' AND a.WorkPoint='{1}')
  7243. BEGIN
  7244. RAISERROR('" + language.GetNameByCode("WMSAPIInfo172") + @"',16,1);
  7245. RETURN
  7246. END
  7247. INSERT INTO ICSInventoryLot(ID,LotNo,InvCode,ProductDate,ExpirationDate,Quantity,Amount,ExtensionID,Type,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  7248. 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
  7249. FROM ICSInventoryLot a
  7250. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  7251. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  7252. sql = string.Format(sql, LotNo, WorkPoint, User, Quantity, CurrentLotNo);
  7253. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  7254. {
  7255. throw new Exception(language.GetNameByCode("WMSAPIInfo173"));//"条码表写入失败!");
  7256. }
  7257. //插入条码单据表
  7258. sql = @"INSERT INTO ICSInventoryLotDetail(LotNo,TransCode,TransSequence,MUSER,MUSERName,MTIME,WorkPoint)
  7259. SELECT '{3}',b.TransCode,b.TransSequence,f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint
  7260. FROM ICSInventoryLot a
  7261. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  7262. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  7263. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  7264. sql = string.Format(sql, LotNo, WorkPoint, User, CurrentLotNo);
  7265. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  7266. {
  7267. throw new Exception(language.GetNameByCode("WMSAPIInfo174"));//"条码单据表写入失败!");
  7268. }
  7269. ///添加库存
  7270. sql = @"IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}')
  7271. BEGIN
  7272. RAISERROR('" + language.GetNameByCode("WMSAPIInfo164") + @"',16,1);
  7273. RETURN
  7274. END
  7275. INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  7276. SELECT NEWID(),a.LotNo ,d.WarehouseCode,d.LocationCode,a.InvCode ,'{3}',SYSDATETIME(),'0',f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint ,''
  7277. FROM ICSInventoryLot a
  7278. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  7279. INNER JOIN ICSWareHouseLotInfo d ON a.EATTRIBUTE1=d.LotNo AND a.WorkPoint=d.WorkPoint
  7280. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  7281. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  7282. sql = string.Format(sql, CurrentLotNo, WorkPoint, User, Quantity);
  7283. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  7284. {
  7285. throw new Exception(language.GetNameByCode("WMSAPIInfo165"));
  7286. }
  7287. ///添加日志
  7288. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  7289. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  7290. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  7291. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  7292. MTIME,WorkPoint,EATTRIBUTE1)
  7293. SELECT NEWID(),'{3}',b.TransCode,b.TransSequence,a.LotNo ,a.InvCode ,
  7294. '','',c.WarehouseCode,c.LocationCode,c.Quantity,
  7295. '','0','{4}','{5}','0','',
  7296. '','','',f.F_Account ,f.F_RealName ,
  7297. SYSDATETIME() ,a.WorkPoint ,''
  7298. FROM ICSInventoryLot a
  7299. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  7300. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  7301. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  7302. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  7303. ";
  7304. sql = string.Format(sql, CurrentLotNo, WorkPoint, User, Identification, TransType, BusinessCode);
  7305. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  7306. {
  7307. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  7308. }
  7309. #endregion
  7310. }
  7311. catch (Exception)
  7312. {
  7313. throw;
  7314. }
  7315. }
  7316. /// <summary>
  7317. /// 回写ERP ID
  7318. /// </summary>
  7319. /// <param name="TransType"></param>
  7320. /// <param name="SourceDetailID"></param>
  7321. /// <param name="Identification"></param>
  7322. /// <param name="ID"></param>
  7323. /// <param name="DetailID"></param>
  7324. /// <param name="Code"></param>
  7325. /// <param name="Sequence"></param>
  7326. /// <param name="cmd"></param>
  7327. 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)
  7328. {
  7329. string ERPupdate = string.Empty;
  7330. string NewERPupdate = string.Empty;
  7331. try
  7332. {
  7333. //采购入库
  7334. if (TransType == TransTypeEnum.PurchaseReceiveDoc.GetDescription())
  7335. {
  7336. ERPupdate = @"SELECT a.id
  7337. INTO #NewTempERP
  7338. FROM ICSWareHouseLotInfoLog a
  7339. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  7340. INNER JOIN ICSPurchaseOrder c ON b.TransCode=c.POCode AND b.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  7341. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  7342. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  7343. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  7344. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.ToWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  7345. WHERE c.PODetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  7346. 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, '') +
  7347. 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}'
  7348. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  7349. where ID in (select id from #NewTempERP)
  7350. DROP TABLE #NewTempERP";
  7351. }
  7352. //审核的到货单
  7353. else if (TransType == TransTypeEnum.DeliveryNotice.GetDescription())
  7354. {
  7355. ERPupdate = @"SELECT a.id
  7356. INTO #NewTempERP
  7357. FROM ICSWareHouseLotInfoLog a
  7358. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  7359. INNER JOIN ICSDeliveryNotice c ON b.TransCode=c.DNCode AND b.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  7360. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  7361. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  7362. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  7363. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.ToWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  7364. WHERE c.DNDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  7365. 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, '') +
  7366. 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}'
  7367. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  7368. where ID in (select id from #NewTempERP)
  7369. DROP TABLE #NewTempERP
  7370. ";
  7371. }
  7372. //采购拒收
  7373. else if (TransType == TransTypeEnum.PurchaseRejectDoc.GetDescription())
  7374. {
  7375. ERPupdate = @"SELECT a.id
  7376. INTO #NewTempERP
  7377. FROM ICSWareHouseLotInfoLog a
  7378. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  7379. INNER JOIN ICSDeliveryNotice c ON b.TransCode=c.DNCode AND b.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  7380. WHERE c.DNDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  7381. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  7382. where ID in (select id from #NewTempERP)
  7383. DROP TABLE #NewTempERP
  7384. ";
  7385. }
  7386. //审核的委外到货单
  7387. else if (TransType == TransTypeEnum.ODeliveryNotice.GetDescription())
  7388. {
  7389. ERPupdate = @"SELECT a.id
  7390. INTO #NewTempERP
  7391. FROM ICSWareHouseLotInfoLog a
  7392. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  7393. INNER JOIN ICSODeliveryNotice c ON b.TransCode=c.ODNCode AND b.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  7394. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  7395. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  7396. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  7397. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.ToWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  7398. WHERE c.ODNDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  7399. 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, '') +
  7400. 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}'
  7401. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  7402. where ID in (select id from #NewTempERP)
  7403. DROP TABLE #NewTempERP
  7404. ";
  7405. }
  7406. //委外拒收
  7407. else if (TransType == TransTypeEnum.OutsourcingRejectDoc.GetDescription())
  7408. {
  7409. ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  7410. FROM ICSWareHouseLotInfoLog a
  7411. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  7412. INNER JOIN ICSODeliveryNotice c ON b.TransCode=c.ODNCode AND b.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  7413. ";
  7414. }
  7415. //采购退货
  7416. else if (TransType == TransTypeEnum.PurchaseReceiveDoctNegative.GetDescription())
  7417. {
  7418. ERPupdate = @"SELECT a.id
  7419. INTO #NewTempERP
  7420. FROM ICSWareHouseLotInfoLog a
  7421. INNER JOIN ICSDeliveryNotice c ON a.TransCode=c.DNCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  7422. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  7423. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  7424. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  7425. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.ToWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  7426. WHERE c.DNDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}' --AND c.DNType='2'
  7427. 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, '') +
  7428. 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}'
  7429. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  7430. where ID in (select id from #NewTempERP)
  7431. DROP TABLE #NewTempERP
  7432. ";
  7433. }
  7434. //委外发料
  7435. else if (TransType == TransTypeEnum.OutsourcingIssueDoc.GetDescription())
  7436. {
  7437. ERPupdate = @"SELECT a.id
  7438. INTO #NewTempERP
  7439. FROM ICSWareHouseLotInfoLog a
  7440. INNER JOIN ICSOutsourcingOrder y ON a.TransCode=y.OOCode AND a.WorkPoint=y.WorkPoint
  7441. INNER JOIN ICSOOPick x ON x.OODetailID=y.OODetailID AND a.TransSequence=y.Sequence+'~'+x.Sequence AND x.WorkPoint=y.WorkPoint
  7442. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  7443. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  7444. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  7445. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  7446. WHERE x.PickID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  7447. 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, '') +
  7448. 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}'
  7449. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  7450. where ID in (select id from #NewTempERP)
  7451. DROP TABLE #NewTempERP
  7452. ";
  7453. }
  7454. //委外退料
  7455. else if (TransType == TransTypeEnum.ICSOutsourcingIssueDoNegative.GetDescription()
  7456. || TransType == TransTypeEnum.ICSOutsourcingIssueDoNegativeApply.GetDescription()
  7457. || TransType == TransTypeEnum.ICSOutsourcingIssueDoNegativeIssue.GetDescription())
  7458. {
  7459. ERPupdate = @"--根据退料单退料
  7460. UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  7461. FROM ICSWareHouseLotInfoLog a
  7462. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  7463. INNER JOIN ICSOApplyNegDetail c ON b.TransCode=c.OApplyNegCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  7464. INNER JOIN ICSOApplyNeg d ON c.OApplyNegCode=d.OApplyNegCode AND c.WorkPoint=d.WorkPoint
  7465. Left JOIN ICSOIssue m ON (CASE WHEN d.Type='3' THEN c.SourceDetailID ELSE 0 END)=m.IssueDetailID AND c.WorkPoint=m.WorkPoint
  7466. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  7467. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  7468. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  7469. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  7470. WHERE ISNULL(m.ApplyDetailID,ISNULL(m.PickID, c.SourceDetailID))='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  7471. 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, '') +
  7472. 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}'
  7473. --退-
  7474. UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  7475. FROM ICSWareHouseLotInfoLog a
  7476. INNER JOIN ICSWareHouseLotInfoLog b ON a.LogID=b.ID AND a.WorkPoint=b.WorkPoint
  7477. INNER JOIN ICSOutsourcingOrder y ON b.TransCode=y.OOCode AND b.WorkPoint=y.WorkPoint
  7478. INNER JOIN ICSOOPick x ON x.OODetailID=y.OODetailID AND x.WorkPoint=y.WorkPoint AND b.TransSequence = y.Sequence + '~' + x.Sequence
  7479. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  7480. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  7481. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  7482. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  7483. WHERE x.PickID='{0}' AND a.Identification='{1}' AND a.ERPUpload='0' AND a.BusinessCode ='{7}'
  7484. 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, '') +
  7485. 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}'
  7486. --退-
  7487. UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  7488. FROM ICSWareHouseLotInfoLog a
  7489. INNER JOIN ICSWareHouseLotInfoLog b ON a.LogID=b.ID AND a.WorkPoint=b.WorkPoint
  7490. INNER JOIN ICSOApply z ON b.TransCode=z.ApplyCode AND b.TransSequence=z.Sequence AND b.WorkPoint=z.WorkPoint
  7491. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  7492. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  7493. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  7494. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  7495. WHERE z.ApplyDetailID='{0}' AND a.Identification='{1}' AND a.ERPUpload='0' AND a.BusinessCode ='{7}'
  7496. 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, '') +
  7497. 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}'
  7498. --退-
  7499. UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  7500. FROM ICSWareHouseLotInfoLog a
  7501. INNER JOIN ICSWareHouseLotInfoLog b ON a.LogID=b.ID AND a.WorkPoint=b.WorkPoint
  7502. INNER JOIN ICSOIssue m ON b.TransCode=m.IssueCode AND b.TransSequence=m.Sequence AND b.WorkPoint=m.WorkPoint
  7503. LEFT JOIN ICSOOPick x ON m.PickID=x.PickID AND m.WorkPoint=x.WorkPoint
  7504. LEFT JOIN ICSOutsourcingOrder y ON x.OODetailID=y.OODetailID AND x.WorkPoint=y.WorkPoint
  7505. LEFT JOIN ICSOApply z ON m.ApplyDetailID=z.ApplyDetailID AND m.WorkPoint=z.WorkPoint
  7506. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  7507. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  7508. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  7509. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  7510. WHERE ISNULL(m.ApplyDetailID, m.PickID)='{0}' AND a.Identification='{1}' AND a.ERPUpload='0' AND a.BusinessCode ='{7}'
  7511. 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, '') +
  7512. 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}'
  7513. ";
  7514. }
  7515. //委外入库
  7516. else if (TransType == TransTypeEnum.OutsourcingReceiveDoc.GetDescription())
  7517. {
  7518. ERPupdate = @"SELECT a.id
  7519. INTO #NewTempERP
  7520. FROM ICSWareHouseLotInfoLog a
  7521. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  7522. INNER JOIN ICSOutsourcingOrder c ON b.TransCode=c.OOCode AND b.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  7523. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  7524. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  7525. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  7526. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.ToWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  7527. WHERE c.OODetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  7528. --ISNULL(a.ToWarehouseCode, '') +
  7529. 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, '') +
  7530. 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}'
  7531. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  7532. where ID in (select id from #NewTempERP)
  7533. DROP TABLE #NewTempERP";
  7534. }
  7535. //委外退货
  7536. else if (TransType == TransTypeEnum.OutsourcingReturnBack.GetDescription())
  7537. {
  7538. ERPupdate = @"SELECT a.id
  7539. INTO #NewTempERP
  7540. FROM ICSWareHouseLotInfoLog a
  7541. INNER JOIN ICSODeliveryNotice c ON a.TransCode=c.ODNCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  7542. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  7543. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  7544. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  7545. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  7546. WHERE c.ODNDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'--AND c.ODNType='2'
  7547. 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, '') +
  7548. 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}'
  7549. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  7550. where ID in (select id from #NewTempERP)
  7551. DROP TABLE #NewTempERP
  7552. ";
  7553. }
  7554. //生产发料
  7555. else if (TransType == TransTypeEnum.MOIssueDoc.GetDescription())
  7556. {
  7557. //ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  7558. // FROM ICSWareHouseLotInfoLog a
  7559. // INNER JOIN ICSMO y ON a.TransCode=y.MOCode AND a.WorkPoint=y.WorkPoint
  7560. // INNER JOIN ICSMOPick x ON x.MODetailID=y.MODetailID AND a.TransSequence=y.Sequence+'~'+x.Sequence AND x.WorkPoint=y.WorkPoint
  7561. // INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  7562. // INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  7563. // INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  7564. // LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  7565. // WHERE x.PickID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  7566. // 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, '') +
  7567. // 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}'
  7568. // ";
  7569. ERPupdate = @"SELECT a.id
  7570. INTO #NewTempERP
  7571. FROM ICSWareHouseLotInfoLog a
  7572. INNER JOIN ICSMO y ON a.TransCode=y.MOCode AND a.WorkPoint=y.WorkPoint
  7573. INNER JOIN ICSMOPick x ON x.MODetailID=y.MODetailID AND a.TransSequence=y.Sequence+'~'+x.Sequence AND x.WorkPoint=y.WorkPoint
  7574. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  7575. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  7576. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  7577. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  7578. WHERE x.PickID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  7579. 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, '') +
  7580. 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}'
  7581. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  7582. where ID in (select id from #NewTempERP)
  7583. DROP TABLE #NewTempERP";
  7584. }
  7585. //生产退料
  7586. else if (TransType == TransTypeEnum.MOIssueDocNegative.GetDescription()
  7587. || TransType == TransTypeEnum.MOIssueDocNegativeApply.GetDescription()
  7588. || TransType == TransTypeEnum.MOIssueDocNegativeIssue.GetDescription())
  7589. {
  7590. ERPupdate = @"--根据退料单退料
  7591. UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  7592. FROM ICSWareHouseLotInfoLog a
  7593. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  7594. INNER JOIN ICSMOApplyNegDetail c ON b.TransCode=c.ApplyNegCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  7595. INNER JOIN ICSMOApplyNeg d ON c.ApplyNegCode=d.ApplyNegCode AND c.WorkPoint=d.WorkPoint
  7596. left JOIN ICSMOIssue m ON (CASE WHEN d.Type='3' THEN c.SourceDetailID ELSE 0 END)=m.IssueDetailID AND c.WorkPoint=m.WorkPoint
  7597. WHERE ISNULL(m.ApplyDetailID, ISNULL(m.PickID, c.SourceDetailID))='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  7598. --退-
  7599. UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  7600. FROM ICSWareHouseLotInfoLog a
  7601. INNER JOIN ICSWareHouseLotInfoLog b ON a.LogID=b.ID AND a.WorkPoint=b.WorkPoint
  7602. INNER JOIN ICSMO y ON b.TransCode=y.MOCode AND b.WorkPoint=y.WorkPoint
  7603. INNER JOIN ICSMOPick x ON x.MODetailID=y.MODetailID AND x.WorkPoint=y.WorkPoint AND b.TransSequence = y.Sequence + '~' + x.Sequence
  7604. WHERE x.PickID='{0}' AND a.Identification='{1}' AND a.ERPUpload='0' AND a.BusinessCode ='{7}'
  7605. --退-
  7606. UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  7607. FROM ICSWareHouseLotInfoLog a
  7608. INNER JOIN ICSWareHouseLotInfoLog b ON a.LogID=b.ID AND a.WorkPoint=b.WorkPoint
  7609. INNER JOIN ICSMOApply z ON b.TransCode=z.ApplyCode AND b.TransSequence=z.Sequence AND b.WorkPoint=z.WorkPoint
  7610. WHERE z.ApplyDetailID='{0}' AND a.Identification='{1}' AND a.ERPUpload='0' AND a.BusinessCode ='{7}'
  7611. --退-
  7612. UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  7613. FROM ICSWareHouseLotInfoLog a
  7614. INNER JOIN ICSWareHouseLotInfoLog b ON a.LogID=b.ID AND a.WorkPoint=b.WorkPoint
  7615. INNER JOIN ICSMOIssue m ON b.TransCode=m.IssueCode AND b.TransSequence=m.Sequence AND b.WorkPoint=m.WorkPoint
  7616. LEFT JOIN ICSMOPick x ON m.PickID=x.PickID AND m.WorkPoint=x.WorkPoint
  7617. LEFT JOIN ICSMO y ON x.MODetailID=y.MODetailID AND x.WorkPoint=y.WorkPoint
  7618. LEFT JOIN ICSMOApply z ON m.ApplyDetailID=z.ApplyDetailID AND m.WorkPoint=z.WorkPoint
  7619. WHERE ISNULL(m.ApplyDetailID, m.PickID)='{0}' AND a.Identification='{1}' AND a.ERPUpload='0' AND a.BusinessCode ='{7}'
  7620. ";
  7621. }
  7622. //生产入库
  7623. else if (TransType == TransTypeEnum.ManufactureReceiveDoc.GetDescription())
  7624. {
  7625. //ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  7626. // FROM ICSWareHouseLotInfoLog a
  7627. // INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  7628. // INNER JOIN ICSMO c ON b.TransCode=c.MOCode AND b.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  7629. // INNER JOIN ICSExtension docext ON docext.ID=c.ExtensionID AND docext.WorkPoint=c.WorkPoint
  7630. // INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  7631. // INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  7632. // INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  7633. // LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  7634. // WHERE c.MODetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  7635. // and (ISNULL(a.fromwarehousecode, '')
  7636. // + CASE WHEN ISNULL(docext.ProjectCode,'')!='' Then ISNULL(ext.ProjectCode, '') ELSE '' END
  7637. // + CASE WHEN (invBat.BatchEnable IS NULL AND ISNULL(inv.BatchEnable, '0')='1') OR ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END
  7638. // + CASE WHEN ISNULL(docext.Version,'')!='' Then ISNULL(ext.Version, '') ELSE '' END
  7639. // + CASE WHEN ISNULL(docext.Brand,'')!='' THEN ISNULL(ext.Brand, '') ELSE '' END
  7640. // + CASE WHEN ISNULL(docext.cFree1,'')!='' THEN ISNULL(ext.cFree1, '') ELSE '' END
  7641. // + CASE WHEN ISNULL(docext.cFree2,'')!='' THEN ISNULL(ext.cFree2, '') ELSE '' END
  7642. // + CASE WHEN ISNULL(docext.cFree3,'')!='' THEN ISNULL(ext.cFree3, '') ELSE '' END
  7643. // + CASE WHEN ISNULL(docext.cFree4,'')!='' THEN ISNULL(ext.cFree4, '') ELSE '' END
  7644. // + CASE WHEN ISNULL(docext.cFree5,'')!='' THEN ISNULL(ext.cFree5, '') ELSE '' END
  7645. // + CASE WHEN ISNULL(docext.cFree6,'')!='' THEN ISNULL(ext.cFree6, '') ELSE '' END
  7646. // + CASE WHEN ISNULL(docext.cFree7,'')!='' THEN ISNULL(ext.cFree7, '') ELSE '' END
  7647. // + CASE WHEN ISNULL(docext.cFree8,'')!='' THEN ISNULL(ext.cFree8, '') ELSE '' END
  7648. // + CASE WHEN ISNULL(docext.cFree9,'')!='' THEN ISNULL(ext.cFree9, '') ELSE '' END
  7649. // + CASE WHEN ISNULL(docext.cFree10,'')!='' THEN ISNULL(ext.cFree10, '') ELSE '' END)='{6}'
  7650. //";
  7651. ERPupdate = @"SELECT a.id
  7652. INTO #NewTempERP
  7653. FROM ICSWareHouseLotInfoLog a
  7654. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  7655. INNER JOIN ICSMO c ON b.TransCode=c.MOCode AND b.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  7656. INNER JOIN ICSExtension docext ON docext.ID=c.ExtensionID AND docext.WorkPoint=c.WorkPoint
  7657. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  7658. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  7659. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  7660. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.ToWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  7661. WHERE c.MODetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  7662. and (ISNULL(a.ToWarehouseCode, '')
  7663. + CASE WHEN ISNULL(docext.ProjectCode,'')!='' Then ISNULL(ext.ProjectCode, '') ELSE '' END
  7664. + CASE WHEN (invBat.BatchEnable IS NULL AND ISNULL(inv.BatchEnable, '0')='1') OR ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END
  7665. + CASE WHEN ISNULL(docext.Version,'')!='' Then ISNULL(ext.Version, '') ELSE '' END
  7666. + CASE WHEN ISNULL(docext.Brand,'')!='' THEN ISNULL(ext.Brand, '') ELSE '' END
  7667. + CASE WHEN ISNULL(docext.cFree1,'')!='' THEN ISNULL(ext.cFree1, '') ELSE '' END
  7668. + CASE WHEN ISNULL(docext.cFree2,'')!='' THEN ISNULL(ext.cFree2, '') ELSE '' END
  7669. + CASE WHEN ISNULL(docext.cFree3,'')!='' THEN ISNULL(ext.cFree3, '') ELSE '' END
  7670. + CASE WHEN ISNULL(docext.cFree4,'')!='' THEN ISNULL(ext.cFree4, '') ELSE '' END
  7671. + CASE WHEN ISNULL(docext.cFree5,'')!='' THEN ISNULL(ext.cFree5, '') ELSE '' END
  7672. + CASE WHEN ISNULL(docext.cFree6,'')!='' THEN ISNULL(ext.cFree6, '') ELSE '' END
  7673. + CASE WHEN ISNULL(docext.cFree7,'')!='' THEN ISNULL(ext.cFree7, '') ELSE '' END
  7674. + CASE WHEN ISNULL(docext.cFree8,'')!='' THEN ISNULL(ext.cFree8, '') ELSE '' END
  7675. + CASE WHEN ISNULL(docext.cFree9,'')!='' THEN ISNULL(ext.cFree9, '') ELSE '' END
  7676. + CASE WHEN ISNULL(docext.cFree10,'')!='' THEN ISNULL(ext.cFree10, '') ELSE '' END)='{6}'
  7677. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  7678. where ID in (select id from #NewTempERP)
  7679. DROP TABLE #NewTempERP
  7680. ";
  7681. }
  7682. //开立的生产入库单
  7683. else if (TransType == TransTypeEnum.ManufactureReceive.GetDescription())
  7684. {
  7685. ERPupdate = @"SELECT a.id
  7686. INTO #NewTempERP
  7687. FROM ICSWareHouseLotInfoLog a
  7688. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  7689. INNER JOIN ICSManufactureReceive c ON b.TransCode=c.RCVCode AND b.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  7690. WHERE c.RCVID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND c.Type='1' AND a.BusinessCode ='{7}'
  7691. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  7692. where ID in (select id from #NewTempERP)
  7693. DROP TABLE #NewTempERP
  7694. ";
  7695. }
  7696. //销售出库
  7697. else if (TransType == TransTypeEnum.SalesShipmentDoc.GetDescription())
  7698. {
  7699. ERPupdate = @"SELECT a.id
  7700. INTO #NewTempERP
  7701. FROM ICSWareHouseLotInfoLog a
  7702. INNER JOIN ICSSDN c ON a.TransCode=c.SDNCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  7703. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  7704. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  7705. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  7706. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  7707. WHERE c.SDNDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND c.Type='1' AND a.BusinessCode ='{7}'
  7708. 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, '') +
  7709. 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}'
  7710. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  7711. where ID in (select id from #NewTempERP)
  7712. DROP TABLE #NewTempERP
  7713. ";
  7714. }
  7715. //销售退货
  7716. else if (TransType == TransTypeEnum.SalesShipmentDocNegative.GetDescription())
  7717. {
  7718. ERPupdate = @"SELECT a.id
  7719. INTO #NewTempERP
  7720. FROM ICSWareHouseLotInfoLog a
  7721. INNER JOIN ICSSDN c ON a.TransCode=c.SDNCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  7722. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  7723. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  7724. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  7725. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.ToWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  7726. WHERE c.SDNDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND c.Type='2' AND a.BusinessCode ='{7}'
  7727. 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, '') +
  7728. 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}'
  7729. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  7730. where ID in (select id from #NewTempERP)
  7731. DROP TABLE #NewTempERP";
  7732. }
  7733. //返工工单
  7734. else if (TransType == TransTypeEnum.ReWorkReceiveMo.GetDescription())
  7735. {
  7736. ERPupdate = @"SELECT a.id
  7737. INTO #NewTempERP
  7738. FROM ICSWareHouseLotInfoLog a
  7739. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  7740. INNER JOIN ICSMO c ON b.TransCode=c.MOCode AND b.WorkPoint=c.WorkPoint
  7741. INNER JOIN ICSMOPick d ON d.MODetailID=c.MODetailID AND d.WorkPoint=c.WorkPoint and b.TransSequence=c.Sequence+'-'+d.Sequence
  7742. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  7743. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  7744. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  7745. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  7746. WHERE d.PickID='{3}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  7747. 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, '') +
  7748. 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}'
  7749. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  7750. where ID in (select id from #NewTempERP)
  7751. DROP TABLE #NewTempERP
  7752. ";
  7753. }
  7754. //一步调拨
  7755. else if (TransType == TransTypeEnum.OneStepTransferDocIn.GetDescription())
  7756. {
  7757. ERPupdate = @"SELECT a.id
  7758. INTO #NewTempERP
  7759. FROM ICSWareHouseLotInfoLog a
  7760. INNER JOIN ICSTransfer c ON a.TransCode=c.TransferNO AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  7761. WHERE c.TransferID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND c.Type='1' AND a.BusinessCode ='{7}'
  7762. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  7763. where ID in (select id from #NewTempERP)
  7764. DROP TABLE #NewTempERP
  7765. ";
  7766. }
  7767. //调拨
  7768. else if (TransType == TransTypeEnum.OneStepTransferDocIn.GetDescription())
  7769. {
  7770. ERPupdate = @"SELECT a.id
  7771. INTO #NewTempERP
  7772. FROM ICSWareHouseLotInfoLog a
  7773. INNER JOIN ICSTransfer c ON a.TransCode=c.TransferNO AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  7774. WHERE c.TransferID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND c.Type='1' AND a.BusinessCode ='{7}'
  7775. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  7776. where ID in (select id from #NewTempERP)
  7777. DROP TABLE #NewTempERP
  7778. ";
  7779. }
  7780. //无源头调拨
  7781. else if (TransType == TransTypeEnum.StepNoTransferDocIn.GetDescription())
  7782. {
  7783. ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  7784. FROM ICSWareHouseLotInfoLog a
  7785. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  7786. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  7787. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  7788. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  7789. WHERE a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode='70'
  7790. 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, '') +
  7791. 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}'
  7792. ";
  7793. }
  7794. //两步调出
  7795. else if (TransType == TransTypeEnum.TwoStepTransferDocOut.GetDescription())
  7796. {
  7797. ERPupdate = @"SELECT a.id
  7798. INTO #NewTempERP
  7799. FROM ICSWareHouseLotInfoLog a
  7800. INNER JOIN ICSOtherOut c ON a.TransCode=c.OutCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  7801. INNER JOIN ICSTransfer d ON c.TransferDetailID=d.TransferDetailID AND c.WorkPoint=d.WorkPoint
  7802. WHERE c.OutID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  7803. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  7804. where ID in (select id from #NewTempERP)
  7805. DROP TABLE #NewTempERP
  7806. ";
  7807. }
  7808. //两步调入
  7809. else if (TransType == TransTypeEnum.TwoStepTransferDocIn.GetDescription())
  7810. {
  7811. ERPupdate = @"SELECT a.id
  7812. INTO #NewTempERP
  7813. FROM ICSWareHouseLotInfoLog a
  7814. INNER JOIN ICSOtherIn b ON a.TransCode=b.InCode AND a.TransSequence=b.Sequence AND a.WorkPoint=b.WorkPoint
  7815. INNER JOIN ICSTransfer c ON b.TransferDetailID=c.TransferDetailID AND b.WorkPoint=c.WorkPoint
  7816. WHERE b.InID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  7817. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  7818. where ID in (select id from #NewTempERP)
  7819. DROP TABLE #NewTempERP
  7820. ";
  7821. }
  7822. //销售退货-原条码
  7823. else if (TransType == TransTypeEnum.SalesReturnBack.GetDescription())
  7824. {
  7825. ERPupdate = @"SELECT a.id
  7826. INTO #NewTempERP
  7827. FROM ICSWareHouseLotInfoLog a
  7828. INNER JOIN ICSSDN c ON a.TransCode=c.SDNCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  7829. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  7830. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  7831. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  7832. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.ToWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  7833. WHERE c.SDNDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND c.Type='2' AND a.BusinessCode ='{7}'
  7834. 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, '') +
  7835. 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}'
  7836. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  7837. where ID in (select id from #NewTempERP)
  7838. DROP TABLE #NewTempERP";
  7839. }
  7840. //其他出库
  7841. else if (TransType == TransTypeEnum.OtherOutDoc.GetDescription())
  7842. {
  7843. ERPupdate = @"SELECT a.id
  7844. INTO #NewTempERP
  7845. FROM ICSWareHouseLotInfoLog a
  7846. INNER JOIN ICSOtherOut c ON a.TransCode=c.OutCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  7847. WHERE c.OutID='{0}' AND a.Identification='{1}' AND a.ERPUpload='0' AND a.BusinessCode ='{7}'
  7848. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  7849. where ID in (select id from #NewTempERP)
  7850. DROP TABLE #NewTempERP
  7851. ";
  7852. }
  7853. //其他入库
  7854. else if (TransType == TransTypeEnum.OtherInDoc.GetDescription())
  7855. {
  7856. ERPupdate = @"SELECT a.id
  7857. INTO #NewTempERP
  7858. FROM ICSWareHouseLotInfoLog a
  7859. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  7860. INNER JOIN ICSOtherIn c ON b.TransCode=c.InCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  7861. WHERE c.InID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  7862. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  7863. where ID in (select id from #NewTempERP)
  7864. DROP TABLE #NewTempERP
  7865. ";
  7866. }
  7867. //采购入库-入库单
  7868. else if (TransType == TransTypeEnum.PurchaseReceiveRevDoc.GetDescription())
  7869. {
  7870. ERPupdate = @"SELECT a.id
  7871. INTO #NewTempERP
  7872. FROM ICSWareHouseLotInfoLog a
  7873. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  7874. INNER JOIN ICSPurchaseReceive c ON b.TransCode=c.RcvCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  7875. WHERE c.RcvID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  7876. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  7877. where ID in (select id from #NewTempERP)
  7878. DROP TABLE #NewTempERP
  7879. ";
  7880. }
  7881. //委外入库-入库单
  7882. else if (TransType == TransTypeEnum.OutsourcingReceiveRevDoc.GetDescription())
  7883. {
  7884. ERPupdate = @"SELECT a.id
  7885. INTO #NewTempERP
  7886. FROM ICSWareHouseLotInfoLog a
  7887. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  7888. INNER JOIN ICSOutsourcingReceive c ON b.TransCode=c.RcvCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  7889. WHERE c.RcvID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  7890. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  7891. where ID in (select id from #NewTempERP)
  7892. DROP TABLE #NewTempERP
  7893. ";
  7894. }
  7895. //拆卸单
  7896. else if (TransType == TransTypeEnum.DisassemblyDoc.GetDescription())
  7897. {
  7898. ERPupdate = @"UPDATE d set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  7899. FROM ICSWareHouseLotInfoLog a
  7900. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  7901. INNER JOIN ICSDisassemblyDoc c ON b.TransCode=c.DABDOCCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  7902. INNER JOIN ICSWareHouseLotInfoLog d ON b.TransCode=d.TransCode AND d.TransSequence='1' AND b.WorkPoint=d.WorkPoint
  7903. WHERE c.DABDOCID='{0}' AND a.Identification='{1}' AND d.ERPUpload='0' AND a.BusinessCode ='{7}'
  7904. UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  7905. FROM ICSWareHouseLotInfoLog a
  7906. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  7907. INNER JOIN ICSDisassemblyDoc c ON b.TransCode=c.DABDOCCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  7908. WHERE c.DABDOCID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND c.DABDOCType='2' AND a.BusinessCode ='{7}'
  7909. ";
  7910. }
  7911. //领料申请单
  7912. else if (TransType == TransTypeEnum.MOApply.GetDescription())
  7913. {
  7914. //ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  7915. // FROM ICSWareHouseLotInfoLog a
  7916. // INNER JOIN ICSMOApply c ON a.TransCode=c.ApplyCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  7917. // INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  7918. // INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  7919. // INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  7920. // LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  7921. // WHERE c.ApplyDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  7922. // 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, '') +
  7923. // 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}'
  7924. // ";
  7925. ERPupdate = @"SELECT a.id
  7926. INTO #NewTempERP
  7927. FROM ICSWareHouseLotInfoLog a
  7928. INNER JOIN ICSMOApply c ON a.TransCode=c.ApplyCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  7929. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  7930. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  7931. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  7932. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  7933. WHERE c.ApplyDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  7934. 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, '') +
  7935. 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}'
  7936. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  7937. where ID in (select id from #NewTempERP)
  7938. DROP TABLE #NewTempERP
  7939. ";
  7940. }
  7941. //补料申请单
  7942. else if (TransType == TransTypeEnum.MOReplenishment.GetDescription())
  7943. {
  7944. //ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  7945. // FROM ICSWareHouseLotInfoLog a
  7946. // INNER JOIN ICSMOApply c ON a.TransCode=c.ApplyCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  7947. // INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  7948. // INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  7949. // INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  7950. // LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  7951. // WHERE c.ApplyDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  7952. // 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, '') +
  7953. // 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}'
  7954. // ";
  7955. ERPupdate = @"SELECT a.id
  7956. INTO #NewTempERP
  7957. FROM ICSWareHouseLotInfoLog a
  7958. INNER JOIN ICSMOReplenishment c ON a.TransCode=c.ReplenishmentCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  7959. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  7960. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  7961. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  7962. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  7963. WHERE c.ReplenishmentDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  7964. 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, '') +
  7965. 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}'
  7966. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  7967. where ID in (select id from #NewTempERP)
  7968. DROP TABLE #NewTempERP
  7969. ";
  7970. }
  7971. //委外领料申请单
  7972. else if (TransType == TransTypeEnum.OOApply.GetDescription())
  7973. {
  7974. //ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  7975. // FROM ICSWareHouseLotInfoLog a
  7976. // INNER JOIN ICSOApply c ON a.TransCode=c.ApplyCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  7977. // INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  7978. // INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  7979. // INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  7980. // LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  7981. // WHERE c.ApplyDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  7982. // 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, '') +
  7983. // 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}'
  7984. // ";
  7985. ERPupdate = @"SELECT a.id
  7986. INTO #NewTempERP
  7987. FROM ICSWareHouseLotInfoLog a
  7988. INNER JOIN ICSOApply c ON a.TransCode=c.ApplyCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  7989. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  7990. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  7991. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  7992. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  7993. WHERE c.ApplyDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  7994. 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, '') +
  7995. 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}'
  7996. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  7997. where ID in (select id from #NewTempERP)
  7998. DROP TABLE #NewTempERP
  7999. ";
  8000. }
  8001. //开立材料出库
  8002. else if (TransType == TransTypeEnum.MOIssue.GetDescription())
  8003. {
  8004. ERPupdate = @"SELECT a.id
  8005. INTO #NewTempERP
  8006. FROM ICSWareHouseLotInfoLog a
  8007. INNER JOIN ICSMOIssue c ON a.TransCode=c.IssueCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  8008. WHERE c.IssueID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  8009. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  8010. where ID in (select id from #NewTempERP)
  8011. DROP TABLE #NewTempERP
  8012. ";
  8013. }
  8014. //开立委外材料出库
  8015. else if (TransType == TransTypeEnum.OOIssue.GetDescription())
  8016. {
  8017. ERPupdate = @"SELECT a.id
  8018. INTO #NewTempERP
  8019. FROM ICSWareHouseLotInfoLog a
  8020. INNER JOIN ICSMOIssue c ON a.TransCode=c.IssueCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  8021. WHERE c.IssueID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  8022. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  8023. where ID in (select id from #NewTempERP)
  8024. DROP TABLE #NewTempERP
  8025. ";
  8026. }
  8027. //开立红字入库单
  8028. else if (TransType == TransTypeEnum.PurchaseReceive.GetDescription())
  8029. {
  8030. ERPupdate = @"SELECT a.id
  8031. INTO #NewTempERP
  8032. FROM ICSWareHouseLotInfoLog a
  8033. INNER JOIN ICSPurchaseReceive c ON a.TransCode=c.RCVCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  8034. WHERE c.RCVID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND c.Type='2' AND a.BusinessCode ='{7}'
  8035. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  8036. where ID in (select id from #NewTempERP)
  8037. DROP TABLE #NewTempERP
  8038. ";
  8039. }
  8040. //开立委外红字入库单
  8041. else if (TransType == TransTypeEnum.OutsourcingReceiveDocNegative.GetDescription())
  8042. {
  8043. ERPupdate = @"SELECT a.id
  8044. INTO #NewTempERP
  8045. FROM ICSWareHouseLotInfoLog a
  8046. INNER JOIN ICSOutsourcingReceive c ON a.TransCode=c.RCVCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  8047. WHERE c.RCVID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND c.Type='2' AND a.BusinessCode ='{7}'
  8048. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  8049. where ID in (select id from #NewTempERP)
  8050. DROP TABLE #NewTempERP
  8051. ";
  8052. }
  8053. //借用
  8054. else if (TransType == TransTypeEnum.BrrowDoc.GetDescription())
  8055. {
  8056. ERPupdate = @"SELECT a.id
  8057. INTO #NewTempERP
  8058. FROM ICSWareHouseLotInfoLog a
  8059. INNER JOIN ICSBrrow c ON a.TransCode=c.BrrowCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  8060. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  8061. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  8062. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  8063. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  8064. WHERE c.BrrowDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  8065. 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, '') +
  8066. 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}'
  8067. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  8068. where ID in (select id from #NewTempERP)
  8069. DROP TABLE #NewTempERP";
  8070. }
  8071. //归还
  8072. else if (TransType == TransTypeEnum.ReturnDoc.GetDescription())
  8073. {
  8074. ERPupdate = @"SELECT a.id
  8075. INTO #NewTempERP
  8076. FROM ICSWareHouseLotInfoLog a
  8077. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  8078. INNER JOIN ICSReturn c ON b.TransCode=c.ReturnCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  8079. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  8080. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  8081. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  8082. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.ToWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  8083. WHERE c.ReturnDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  8084. 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, '') +
  8085. 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}'
  8086. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  8087. where ID in (select id from #NewTempERP)
  8088. DROP TABLE #NewTempERP";
  8089. }
  8090. //销售出库-出库单
  8091. else if (TransType == TransTypeEnum.SalesShipmentOutDoc.GetDescription())
  8092. {
  8093. ERPupdate = @"SELECT a.id
  8094. INTO #NewTempERP
  8095. FROM ICSWareHouseLotInfoLog a
  8096. INNER JOIN ICSSSD c ON a.TransCode=c.SSDCOde AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  8097. WHERE c.SSDID='{0}' AND a.Identification='{1}' AND a.ERPUpload='0' AND a.BusinessCode ='{7}'
  8098. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  8099. where ID in (select id from #NewTempERP)
  8100. DROP TABLE #NewTempERP
  8101. ";
  8102. }
  8103. ERPupdate = string.Format(ERPupdate, SourceDetailID, Identification, ID, DetailID, Code, Sequence, col, BusinessCode);
  8104. if (!DBHelper.ExecuteNonQuery(ERPupdate, cmd))
  8105. {
  8106. throw new Exception(TransType + language.GetNameByCode("WMSAPIInfo175"));//"回写日志失败!");
  8107. }
  8108. }
  8109. catch (Exception ex)
  8110. {
  8111. log.Debug(ex.ToString());
  8112. log.Debug(TransType + Environment.NewLine + ERPupdate);
  8113. }
  8114. }
  8115. /// <summary>
  8116. /// 倒冲时子件已领数量回写
  8117. /// </summary>
  8118. public static void DetailQTYUpdate()
  8119. {
  8120. }
  8121. /// <summary>
  8122. /// 生成条码
  8123. /// </summary>
  8124. /// <param name="LotNo"></param>
  8125. /// <param name="Quantity"></param>
  8126. /// <param name="TransCode"></param>
  8127. /// <param name="TransSequence"></param>
  8128. /// <param name="WorkPoint"></param>
  8129. /// <param name="Identification"></param>
  8130. /// <param name="User"></param>
  8131. /// <param name="InvCode"></param>
  8132. /// <param name="BusinessCode"></param>
  8133. /// <param name="ProjectCode"></param>
  8134. /// <param name="BatchCode"></param>
  8135. /// <param name="Version"></param>
  8136. /// <param name="Brand"></param>
  8137. /// <param name="cFree1"></param>
  8138. /// <param name="cFree2"></param>
  8139. /// <param name="cFree3"></param>
  8140. /// <param name="cFree4"></param>
  8141. /// <param name="cFree5"></param>
  8142. /// <param name="cFree6"></param>
  8143. /// <param name="cFree7"></param>
  8144. /// <param name="cFree8"></param>
  8145. /// <param name="cFree9"></param>
  8146. /// <param name="cFree10"></param>
  8147. /// <param name="cmd"></param>
  8148. /// <param name="language"></param>
  8149. public static void CreateLotNo(string LotNo, string Quantity, string TransCode, string TransSequence, string WorkPoint, string Identification, string User, string InvCode, string BusinessCode,
  8150. 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)
  8151. {
  8152. try
  8153. {
  8154. String EffectiveEnable = "";
  8155. String Colspan = "";
  8156. String IDD = "";
  8157. int EffectiveDays = 0;
  8158. String Time = "";
  8159. int EffectiveDayss = 0;
  8160. DateTime dtt;
  8161. DateTime now = DateTime.Now;
  8162. string sql = string.Empty;
  8163. //string sql = @"select EffectiveEnable,EffectiveDays from ICSInventory a
  8164. // Left Join ICSMO b ON a.InvCode=b.InvCode and a.WorkPoint = b.WorkPoint
  8165. // where b.MoCode='{0}' and b.WorkPoint='{1}'";
  8166. //sql = string.Format(sql, TransCode, WorkPoint);
  8167. //DataTable dt = DBHelper.SQlReturnData(sql, cmd);
  8168. //if (dt.Rows.Count == 0)
  8169. //{
  8170. // throw new Exception(language.GetNameByCode("WMSAPIInfo366"));
  8171. //}
  8172. //else
  8173. //{
  8174. // EffectiveEnable = dt.Rows[0]["EffectiveEnable"].ToString();
  8175. //EffectiveDays = Convert.ToInt32(dt.Rows[0]["EffectiveDays"]);
  8176. //}
  8177. //EffectiveDayss = Convert.ToInt32(EffectiveDays);
  8178. //if (!EffectiveEnable.Equals("False"))
  8179. //{
  8180. int year = now.Year;
  8181. int month = now.Month;
  8182. int day = now.Day;
  8183. int n = DateTime.DaysInMonth(year, month);
  8184. int k = day + EffectiveDays;
  8185. if (k > n)
  8186. {
  8187. day = EffectiveDays - (n - day);
  8188. month = month + 1;
  8189. if (month > 12)
  8190. {
  8191. month = 1;
  8192. year = year + 1;
  8193. }
  8194. }
  8195. else
  8196. {
  8197. day = day + EffectiveDays;
  8198. }
  8199. Time = year + "-" + month + "-" + day;
  8200. //}
  8201. //else
  8202. //{
  8203. // Time = "2999-12-31 00:00:00.000";
  8204. //}
  8205. dtt = Convert.ToDateTime(Time);
  8206. //检验自由项
  8207. Colspan = ProjectCode + "~" + BatchCode + "~" + Version
  8208. + "~" + Brand + "~" + cFree1
  8209. + "~" + cFree2 + "~" + cFree3 + "~" + cFree4
  8210. + "~" + cFree5 + "~" + cFree6 + "~" + cFree7
  8211. + "~" + cFree8 + "~" + cFree9 + "~" + cFree10;
  8212. sql = @"select ID,Colspan from ICSExtension a
  8213. where Colspan='{0}' and WorkPoint='{1}'";
  8214. sql = string.Format(sql, Colspan, WorkPoint);
  8215. DataTable dttt = DBHelper.SQlReturnData(sql, cmd);
  8216. if (dttt.Rows.Count == 0)
  8217. {
  8218. IDD = Guid.NewGuid().ToString();
  8219. sql = @"Insert into ICSExtension(ID, Colspan, ProjectCode, BatchCode, Version, Brand, cFree1, cFree2, cFree3, cFree4, cFree5, cFree6, cFree7, cFree8, cFree9, cFree10, MTIME, MUSER, MUSERName, WorkPoint)
  8220. 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}'";
  8221. sql = string.Format(sql, Colspan, ProjectCode, BatchCode, Version, Brand, cFree1, cFree2, cFree3, cFree4, cFree5, cFree6, cFree7, cFree8, cFree9, cFree10, User, WorkPoint, IDD);
  8222. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  8223. {
  8224. throw new Exception(language.GetNameByCode("WMSAPIInfo366"));
  8225. }
  8226. }
  8227. else
  8228. {
  8229. IDD = dttt.Rows[0]["ID"].ToString();
  8230. }
  8231. //存入条码表
  8232. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{4}')
  8233. BEGIN
  8234. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  8235. RETURN
  8236. END
  8237. INSERT INTO ICSInventoryLot(ID,LotNo,InvCode,ProductDate,ExpirationDate,
  8238. Quantity,Amount,ExtensionID,Type,PrintTimes,
  8239. LastPrintUser,LastPrintTime,MUSER,MUSERName,MTIME,
  8240. WorkPoint,EATTRIBUTE1)
  8241. SELECT TOP 1 NEWID(),'{0}','{8}',GETDATE(),'{6}',
  8242. '{1}','0','{7}','16',null,
  8243. null,null,'{2}' ,f.F_RealName ,GETDATE(),
  8244. '{4}' ,''
  8245. FROM Sys_SRM_User f
  8246. where f.F_Account='{2}' and f.F_Location='{4}'
  8247. ";
  8248. sql = string.Format(sql, LotNo, Quantity, User, TransCode, WorkPoint, TransSequence, dtt, IDD,InvCode);
  8249. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  8250. {
  8251. throw new Exception(language.GetNameByCode("WMSAPIInfo366"));
  8252. }
  8253. ///存入条码关联表
  8254. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{3}')
  8255. BEGIN
  8256. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  8257. RETURN
  8258. END
  8259. INSERT INTO ICSInventoryLotDetail(LotNo,TransCode,TransSequence,MUSER,MUSERName,MTIME,
  8260. WorkPoint,EATTRIBUTE1)
  8261. SELECT '{4}','{0}','{1}',f.F_Account ,f.F_RealName,GETDATE(),
  8262. a.WorkPoint,''
  8263. FROM ICSInventoryLot a
  8264. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  8265. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  8266. WHERE a.LotNo='{5}' AND a.WorkPoint='{3}'
  8267. ";
  8268. sql = string.Format(sql, TransCode, TransSequence, User, WorkPoint, LotNo, OLDLotNo);
  8269. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  8270. {
  8271. throw new Exception(language.GetNameByCode("WMSAPIInfo367"));
  8272. }
  8273. //存入库存表
  8274. sql = @"INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  8275. SELECT NEWID(),a.LotNo ,e.WarehouseCode,d.LocationCode,a.InvCode ,'0',SYSDATETIME(),'0',f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint ,''
  8276. FROM ICSInventoryLot a
  8277. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  8278. --INNER JOIN ICSOApplyNegDetail c ON b.TransCode=c.OApplyNegCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  8279. INNER JOIN ICSLocation d ON d.LocationCode='{4}' AND a.WorkPoint=d.WorkPoint
  8280. INNER JOIN ICSWarehouse e ON d.WHID=e.ID AND d.WorkPoint=e.WorkPoint
  8281. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  8282. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  8283. sql = string.Format(sql, LotNo, WorkPoint, User, Quantity, LocationCode);
  8284. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  8285. {
  8286. throw new Exception(language.GetNameByCode("WMSAPIInfo165"));
  8287. }
  8288. }
  8289. catch (Exception)
  8290. {
  8291. throw;
  8292. }
  8293. }
  8294. /// <summary>
  8295. /// 东辉日志表记录交接人EATTRIBUTE3
  8296. /// </summary>
  8297. /// <param name="TransType"></param>
  8298. /// <param name="BusinessCode"></param>
  8299. /// <param name="Heir"></param>
  8300. /// <param name="cmd"></param>
  8301. public static void WareHouseLotInfoLogUpdateHeir(string Identification, string BusinessCode, SqlCommand cmd, Dictionary<string, string> language,string Heir)
  8302. {
  8303. try
  8304. {
  8305. ///更新日志表
  8306. string sql = @"
  8307. UPDATE ICSWareHouseLotInfoLog SET EATTRIBUTE3='{2}' WHERE Identification='{0}' and BusinessCode ='{1}'
  8308. ";
  8309. sql = string.Format(sql, Identification, BusinessCode, Heir);
  8310. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  8311. {
  8312. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));//"库存表更新失败!");
  8313. }
  8314. }
  8315. catch (Exception)
  8316. {
  8317. throw;
  8318. }
  8319. }
  8320. //public void AutoWarehousingCreate()
  8321. //{
  8322. //}
  8323. }
  8324. }