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.

4706 lines
304 KiB

1 year ago
1 year ago
1 year ago
1 year ago
  1. using ICSSoft.Common;
  2. using ICSSoft.Entity;
  3. using Newtonsoft.Json;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Data;
  7. using System.Data.SqlClient;
  8. using System.Linq;
  9. using System.Net.Http;
  10. using System.Text;
  11. using System.Threading.Tasks;
  12. namespace ICSSoft.DataProject
  13. {
  14. /// <summary>
  15. /// 使用中
  16. /// 更新库存表、日志表
  17. /// </summary>
  18. public class ICSWareHouseLotInfoService
  19. {
  20. private static log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
  21. /// <summary>
  22. /// 分批
  23. /// </summary>
  24. /// <param name="Identification"></param>
  25. /// <param name="TransCode"></param>
  26. /// <param name="TransSequence"></param>
  27. /// <param name="LotNo"></param>
  28. /// <param name="Quantity"></param>
  29. /// <param name="User"></param>
  30. /// <param name="WorkPoint"></param>
  31. /// <param name="TransType"></param>
  32. /// <param name="BusinessCode"></param>
  33. /// <param name="cmd"></param>
  34. public static void WareHouseLotInfoInBatches(string Identification, string TransCode, string TransSequence, string LotNo, string Quantity, string User,
  35. string WorkPoint, string TransType, string BusinessCode, SqlCommand cmd, Dictionary<string, string> language, string MergeID = "")
  36. {
  37. }
  38. /// <summary>
  39. /// 添加库存
  40. /// </summary>
  41. /// <param name="LocationCode"></param>
  42. /// <param name="LotNo"></param>
  43. /// <param name="Quantity"></param>
  44. /// <param name="User"></param>
  45. /// <param name="WorkPoint"></param>
  46. /// <param name="TransType"></param>
  47. /// <param name="BusinessCode"></param>
  48. /// <param name="cmd"></param>
  49. /// <param name="jointLotNo"></param>
  50. public static void WareHouseLotInfoUp(string Identification, string LocationCode, string LotNo, string Quantity, string User,
  51. string WorkPoint, string TransType, 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
  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. INNER 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. sql = string.Format(sql, LotNo, WorkPoint, User, Quantity, LocationCode);
  189. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  190. {
  191. throw new Exception(language.GetNameByCode("WMSAPIInfo165"));
  192. }
  193. if (BusinessCode == TransTypeEnum.MOStockINByProductNoTrans.GetDescription<DBValue>())
  194. {
  195. ///添加日志
  196. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  197. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  198. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  199. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  200. MTIME,WorkPoint,EATTRIBUTE1,LogID)
  201. SELECT NEWID(),'{3}',b.TransCode,b.TransSequence,a.LotNo ,a.InvCode ,
  202. '','',c.WarehouseCode,c.LocationCode,'{6}',
  203. '','0','{4}','{5}','0','',
  204. '','','',f.F_Account ,f.F_RealName ,
  205. SYSDATETIME() ,a.WorkPoint ,'','{7}'
  206. FROM ICSInventoryLot a
  207. LEFT JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  208. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  209. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  210. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  211. ";
  212. }
  213. else
  214. {
  215. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  216. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  217. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  218. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  219. MTIME,WorkPoint,EATTRIBUTE1,LogID)
  220. SELECT NEWID(),'{3}',b.TransCode,b.TransSequence,a.LotNo ,a.InvCode ,
  221. '','',c.WarehouseCode,c.LocationCode,'{6}',
  222. '','0','{4}','{5}','0','',
  223. '','','',f.F_Account ,f.F_RealName ,
  224. SYSDATETIME() ,a.WorkPoint ,'','{7}'
  225. FROM ICSInventoryLot a
  226. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  227. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  228. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  229. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  230. ";
  231. }
  232. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransType, BusinessCode, Quantity, LogID);
  233. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  234. {
  235. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  236. }
  237. #endregion
  238. #region 管控方式是"料品"时
  239. ControlMode mode = ICSControlModeService.GetControlMode();
  240. if (mode.itemCode.Equals("ControlMode02"))
  241. {
  242. //查询是否存在料品管控的条码
  243. string sqlStrNew = @"SELECT a.ID,
  244. con.ContainerCode,
  245. con.ContainerName,
  246. a.LotNo,
  247. a.InvCode,
  248. inv.InvName,
  249. inv.InvStd,
  250. inv.InvUnit,-- {0}
  251. inv.AmountUnit,
  252. ext.ID AS ExtensionID,
  253. ext.ProjectCode,
  254. ext.Version,
  255. ext.BatchCode,
  256. ext.Brand,
  257. ext.cFree1,
  258. ext.cFree2,
  259. ext.cFree3,
  260. ext.cFree4,
  261. ext.cFree5,
  262. ext.cFree6,
  263. ext.cFree7,
  264. ext.cFree8,
  265. ext.cFree9,
  266. ext.cFree10,
  267. a.MUSER AS [ USER ],
  268. a.MTIME AS [ MTime ]
  269. FROM
  270. ICSInventoryLot a
  271. LEFT JOIN ICSContainerLot conlot ON a.LotNo = conlot.LotNo AND a.WorkPoint = conlot.WorkPoint
  272. LEFT JOIN ICSContainer con ON conlot.ContainerID = con.ID AND conlot.WorkPoint = con.WorkPoint
  273. INNER JOIN ICSInventory inv ON a.InvCode = inv.InvCode AND a.WorkPoint = inv.WorkPoint
  274. INNER JOIN ICSExtension ext ON a.ExtensionID = ext.ID AND a.WorkPoint = ext.WorkPoint
  275. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  276. sqlStrNew = string.Format(sqlStrNew, jointLotNo, WorkPoint);
  277. DataTable table = DBHelper.SQlReturnData(sqlStrNew, cmd);
  278. string json = JsonConvert.SerializeObject(table);
  279. List<LotNoMode> modelNew = JsonConvert.DeserializeObject<List<LotNoMode>>(json);
  280. //当不存在料品管控条码时,生成新条码
  281. if (!(modelNew.Count > 0))
  282. {
  283. //获取旧条码的信息
  284. string jsonStr = ICSControlModeService.QueryLotNo(LotNo, WorkPoint);
  285. List<LotNoMode> model = JsonConvert.DeserializeObject<List<LotNoMode>>(jsonStr);
  286. //在条码表中插入一条新数据,在条码表中插入一条新数据,并在库存表中添加新数据
  287. LotNoMode lotNoMode = model[0];
  288. CreateLotNo(jointLotNo, Quantity, "", "", WorkPoint, Identification, User, lotNoMode.InvCode, BusinessCode, lotNoMode.ProjectCode, lotNoMode.BatchCode,
  289. lotNoMode.Version, lotNoMode.Brand, lotNoMode.cFree1, lotNoMode.cFree2, lotNoMode.cFree3, lotNoMode.cFree4, lotNoMode.cFree5, lotNoMode.cFree6, lotNoMode.cFree7,
  290. lotNoMode.cFree8, lotNoMode.cFree9, lotNoMode.cFree10, cmd, language, LocationCode, LotNo);
  291. }
  292. try
  293. {
  294. //合并前日志
  295. WareHouseLotInfoLog(Identification, jointLotNo, User, WorkPoint, "2",
  296. TransTypeEnum.LOTMergeBefore.GetDescription<DBValue>(),"", cmd, language);
  297. //更新目标条码库存
  298. WareHouseLotInfoMerge(Identification, jointLotNo, LotNo, Quantity, User, WorkPoint, "2",
  299. TransTypeEnum.LOTMergeAfter.GetDescription<DBValue>(), cmd, language);
  300. //合并后日志
  301. WareHouseLotInfoLog(Identification, jointLotNo, User, WorkPoint, "2",
  302. TransTypeEnum.LOTMergeAfter.GetDescription<DBValue>(), "",cmd, language);
  303. }
  304. catch (Exception)
  305. {
  306. throw;
  307. }
  308. }
  309. #endregion
  310. #region 成品(生产)入库,倒冲
  311. if (BusinessCode.Equals(TransTypeEnum.ManufactureReceiveDoc.GetDescription<DBValue>()))
  312. {
  313. #region sql
  314. sql = @"-- 1.创建临时表 初始单据数据 maintemp
  315. SELECT
  316. c.MOCode AS TransCode,
  317. a.MODetailID AS DetailID,
  318. a.InvCode,
  319. b.InvName,
  320. b.InvStd,
  321. a.ParentQuantity/c.Quantity*{2} AS Quantity,
  322. a.Amount,
  323. a.Sequence AS TransSequence,
  324. a.IssueQuantity,
  325. c.Sequence,
  326. inv.InvUnit,
  327. 0 AS LocationQty,
  328. inv.AmountUnit,
  329. a.ExtensionID,
  330. a.WorkPoint,
  331. ext.ProjectCode,
  332. CASE WHEN ISNULL(inv.BatchEnable, '0')='1' THEN ext.BatchCode ELSE '' END AS BatchCode,
  333. ext.Version,
  334. ext.Brand,
  335. ext.cFree1,
  336. ext.cFree2,
  337. ext.cFree3,
  338. ext.cFree4,
  339. ext.cFree5,
  340. ext.cFree6,
  341. ext.cFree7,
  342. ext.cFree8,
  343. ext.cFree9,
  344. ext.cFree10
  345. INTO #maintemp
  346. FROM
  347. ICSMOPick a
  348. inner join ICSMO c on a.MODetailID=c.MODetailID and a.WorkPoint=c.WorkPoint
  349. LEFT JOIN ICSINVENTORY b ON a.InvCode = b.InvCode AND a.WorkPoint=b.WorkPoint
  350. INNER JOIN ICSExtension ext ON a.ExtensionID=ext.ID AND a.WorkPoint=ext.WorkPoint
  351. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  352. INNER JOIN (
  353. SELECT a.MOCode,a.Sequence,a.WorkPoint
  354. FROM ICSMO a
  355. INNER JOIN ICSInventoryLotDetail b ON b.TransCode=a.MOCode AND b.TransSequence=a.Sequence AND b.WorkPoint=a.WorkPoint
  356. INNER JOIN ICSInventoryLot c ON c.LotNo=b.LotNo AND c.WorkPoint=b.WorkPoint
  357. WHERE c.LotNo='{0}' AND c.WorkPoint='{1}'
  358. ) temp ON c.MOCode=temp.MOCode AND a.WorkPoint=temp.WorkPoint AND c.Sequence=temp.Sequence
  359. WHERE a.SupplyType='1'
  360. 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,
  361. 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;
  362. select * into #resulttemp from #maintemp
  363. ALTER TABLE #resulttemp ADD LotNo VARCHAR(50)
  364. delete from #resulttemp
  365. -- 2.maintemp barcodetemp
  366. select a.lotno,a.invcode,(a.quantity-a.lockQuantity) as quantity ,a.mtime into #barcodetemp from ICSWareHouseLotInfo a LEFT JOIN
  367. (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
  368. -- 3.maintemp ID barcodetemp
  369. BEGIN
  370. DECLARE @transSequence int;--
  371. DECLARE @qty int;--
  372. DECLARE @needqty int;--
  373. DECLARE @lotno VARCHAR(50);--
  374. DECLARE @DetailID VARCHAR(50);--ID
  375. DECLARE tempCursor CURSOR FOR (select transSequence,DetailID from #maintemp); --tempCursor
  376. OPEN tempCursor; --
  377. FETCH NEXT FROM tempCursor INTO @transSequence,@DetailID; --
  378. WHILE @@fetch_status=0
  379. BEGIN
  380. select @needqty=Quantity from #maintemp where transSequence = @transSequence AND DetailID = @DetailID
  381. PRINT @transSequence
  382. WHILE @needqty>0
  383. BEGIN
  384. select top 1 @qty = isnull(quantity,0),@lotno = isnull(lotno,'') from #barcodetemp a
  385. RIGHT JOIN (select invcode from #maintemp where transSequence = @transSequence AND DetailID = @DetailID) b on a.invcode=b.invcode ORDER BY mtime
  386. BEGIN
  387. IF(@needqty-@qty>=0 and ISNULL(@lotno, '')<>'')
  388. BEGIN
  389. insert INTO #resulttemp (lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity,Quantity,
  390. Amount,InvCode,InvName,InvStd,InvUnit,LocationQty,AmountUnit,
  391. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint)
  392. SELECT @lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity, Quantity,
  393. ISNULL(Amount, 0), InvCode,InvName,ISNULL(InvStd, ''),InvUnit,@qty,ISNULL(AmountUnit, ''),
  394. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint from #maintemp
  395. where #maintemp.transSequence = @transSequence AND DetailID = @DetailID
  396. delete from #barcodetemp where lotno = @lotno
  397. SET @needqty=@needqty-@qty
  398. END
  399. ELSE IF(@needqty-@qty<0 and ISNULL(@lotno, '')<>'')
  400. BEGIN
  401. insert INTO #resulttemp (lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity,Quantity,
  402. Amount,InvCode,InvName,InvStd,InvUnit,LocationQty,AmountUnit,
  403. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint)
  404. SELECT @lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity, Quantity,
  405. ISNULL(Amount, 0),InvCode,InvName,ISNULL(InvStd, ''),InvUnit,@needqty,ISNULL(AmountUnit, ''),
  406. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint from #maintemp
  407. where #maintemp.transSequence = @transSequence AND DetailID = @DetailID
  408. update #barcodetemp set quantity = @qty-@needqty where lotno = @lotno
  409. SET @needqty=@needqty-@qty
  410. END
  411. ELSE
  412. BEGIN
  413. insert INTO #resulttemp (lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity,Quantity,
  414. Amount,InvCode,InvName,InvStd,InvUnit,LocationQty,AmountUnit,
  415. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint)
  416. SELECT @lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity, Quantity,
  417. ISNULL(Amount, 0),InvCode,InvName,ISNULL(InvStd, ''),InvUnit,0,ISNULL(AmountUnit, ''),
  418. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint from #maintemp
  419. where #maintemp.transSequence = @transSequence AND DetailID = @DetailID
  420. SET @needqty=0
  421. END
  422. END
  423. END
  424. FETCH NEXT FROM tempCursor INTO @transSequence,@DetailID;
  425. END
  426. CLOSE tempCursor
  427. DEALLOCATE tempCursor
  428. END
  429. select TransCode,LotNo,LocationQty AS Quantity,InvCode,DetailID,Sequence,TransSequence from #resulttemp
  430. --select * from #resulttemp
  431. DROP table #maintemp
  432. DROP table #resulttemp
  433. DROP table #barcodetemp";
  434. #endregion
  435. sql = String.Format(sql,LotNo,WorkPoint, Quantity);
  436. DataTable table = DBHelper.SQlReturnData(sql,cmd);
  437. string json = JsonConvert.SerializeObject(table);
  438. List<DownItemModel> downItemModels = JsonConvert.DeserializeObject<List<DownItemModel>>(json);
  439. foreach (DownItemModel model in downItemModels)
  440. {
  441. if (model != null && model.LotNo == null || "" == model.LotNo)
  442. {
  443. throw new Exception(language.GetNameByCode("WMSAPIInfo201"));
  444. }
  445. WareHouseLotInfoDown(Identification,model.TransCode,model.Sequence + "~" + model.TransSequence,model.LotNo,model.Quantity,User,WorkPoint,"12",BusinessCode,cmd,language,"","");
  446. //回写已领数量
  447. sql = @"UPDATE ICSMOPick SET IssueQuantity=(ISNULL(IssueQuantity,0)+" + model.Quantity+") WHERE MODetailID='{0}' AND Sequence='{1}' AND WorkPoint='{2}'";
  448. sql = String.Format(sql,model.DetailID,model.TransSequence,WorkPoint);
  449. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  450. {
  451. throw new Exception(language.GetNameByCode("WMSAPIInfo199"));
  452. }
  453. }
  454. }
  455. #endregion
  456. #region 委外入库,倒冲
  457. if (BusinessCode.Equals(TransTypeEnum.OutsourcingReceiveDoc.GetDescription<DBValue>()))
  458. {
  459. #region sql
  460. sql = @"-- 1.创建临时表 初始单据数据 maintemp
  461. SELECT
  462. c.OOCode AS TransCode,
  463. a.OODetailID AS DetailID,
  464. a.InvCode,
  465. b.InvName,
  466. b.InvStd,
  467. a.ParentQuantity/c.Quantity*{2} AS Quantity,
  468. a.Amount,
  469. a.Sequence AS TransSequence,
  470. a.IssueQuantity,
  471. c.Sequence,
  472. inv.InvUnit,
  473. 0 AS LocationQty,
  474. inv.AmountUnit,
  475. a.ExtensionID,
  476. a.WorkPoint,
  477. ext.ProjectCode,
  478. CASE WHEN ISNULL(inv.BatchEnable, '0')='1' THEN ext.BatchCode ELSE '' END AS BatchCode,
  479. ext.Version,
  480. ext.Brand,
  481. ext.cFree1,
  482. ext.cFree2,
  483. ext.cFree3,
  484. ext.cFree4,
  485. ext.cFree5,
  486. ext.cFree6,
  487. ext.cFree7,
  488. ext.cFree8,
  489. ext.cFree9,
  490. ext.cFree10
  491. INTO #maintemp
  492. FROM
  493. ICSOOPick a
  494. inner join ICSOutsourcingOrder c on a.OODetailID=c.OODetailID and a.WorkPoint=c.WorkPoint
  495. LEFT JOIN ICSINVENTORY b ON a.InvCode = b.InvCode AND a.WorkPoint=b.WorkPoint
  496. INNER JOIN ICSExtension ext ON a.ExtensionID=ext.ID AND a.WorkPoint=ext.WorkPoint
  497. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  498. INNER JOIN (
  499. SELECT a.OOCode,a.Sequence,a.WorkPoint
  500. FROM ICSOutsourcingOrder a
  501. INNER JOIN ICSInventoryLotDetail b ON b.TransCode=a.OOCode AND b.TransSequence=a.Sequence AND b.WorkPoint=a.WorkPoint
  502. INNER JOIN ICSInventoryLot c ON c.LotNo=b.LotNo AND c.WorkPoint=b.WorkPoint
  503. WHERE c.LotNo='{0}' AND c.WorkPoint='{1}'
  504. ) temp ON c.OOCode=temp.OOCode AND a.WorkPoint=temp.WorkPoint AND c.Sequence=temp.Sequence
  505. WHERE a.SupplyType='1'
  506. 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,
  507. 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;
  508. select * into #resulttemp from #maintemp
  509. ALTER TABLE #resulttemp ADD LotNo VARCHAR(50)
  510. delete from #resulttemp
  511. -- 2.maintemp barcodetemp
  512. select a.lotno,a.invcode,(a.quantity-a.lockQuantity) as quantity ,a.mtime into #barcodetemp from ICSWareHouseLotInfo a LEFT JOIN
  513. (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
  514. -- 3.maintemp ID barcodetemp
  515. BEGIN
  516. DECLARE @transSequence int;--
  517. DECLARE @qty int;--
  518. DECLARE @needqty int;--
  519. DECLARE @lotno VARCHAR(50);--
  520. DECLARE @DetailID VARCHAR(50);--ID
  521. DECLARE tempCursor CURSOR FOR (select transSequence,DetailID from #maintemp); --tempCursor
  522. OPEN tempCursor; --
  523. FETCH NEXT FROM tempCursor INTO @transSequence,@DetailID; --
  524. WHILE @@fetch_status=0
  525. BEGIN
  526. select @needqty=Quantity from #maintemp where transSequence = @transSequence AND DetailID = @DetailID
  527. PRINT @transSequence
  528. WHILE @needqty>0
  529. BEGIN
  530. select top 1 @qty = isnull(quantity,0),@lotno = isnull(lotno,'') from #barcodetemp a
  531. RIGHT JOIN (select invcode from #maintemp where transSequence = @transSequence AND DetailID = @DetailID) b on a.invcode=b.invcode ORDER BY mtime
  532. BEGIN
  533. IF(@needqty-@qty>=0 and ISNULL(@lotno, '')<>'')
  534. BEGIN
  535. insert INTO #resulttemp (lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity,Quantity,
  536. Amount,InvCode,InvName,InvStd,InvUnit,LocationQty,AmountUnit,
  537. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint)
  538. SELECT @lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity, Quantity,
  539. ISNULL(Amount, 0), InvCode,InvName,ISNULL(InvStd, ''),InvUnit,@qty,ISNULL(AmountUnit, ''),
  540. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint from #maintemp
  541. where #maintemp.transSequence = @transSequence AND DetailID = @DetailID
  542. delete from #barcodetemp where lotno = @lotno
  543. SET @needqty=@needqty-@qty
  544. END
  545. ELSE IF(@needqty-@qty<0 and ISNULL(@lotno, '')<>'')
  546. BEGIN
  547. insert INTO #resulttemp (lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity,Quantity,
  548. Amount,InvCode,InvName,InvStd,InvUnit,LocationQty,AmountUnit,
  549. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint)
  550. SELECT @lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity, Quantity,
  551. ISNULL(Amount, 0),InvCode,InvName,ISNULL(InvStd, ''),InvUnit,@needqty,ISNULL(AmountUnit, ''),
  552. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint from #maintemp
  553. where #maintemp.transSequence = @transSequence AND DetailID = @DetailID
  554. update #barcodetemp set quantity = @qty-@needqty where lotno = @lotno
  555. SET @needqty=@needqty-@qty
  556. END
  557. ELSE
  558. BEGIN
  559. insert INTO #resulttemp (lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity,Quantity,
  560. Amount,InvCode,InvName,InvStd,InvUnit,LocationQty,AmountUnit,
  561. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint)
  562. SELECT @lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity, Quantity,
  563. ISNULL(Amount, 0),InvCode,InvName,ISNULL(InvStd, ''),InvUnit,0,ISNULL(AmountUnit, ''),
  564. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint from #maintemp
  565. where #maintemp.transSequence = @transSequence AND DetailID = @DetailID
  566. SET @needqty=0
  567. END
  568. END
  569. END
  570. FETCH NEXT FROM tempCursor INTO @transSequence,@DetailID;
  571. END
  572. CLOSE tempCursor
  573. DEALLOCATE tempCursor
  574. END
  575. select TransCode,LotNo,LocationQty AS Quantity,InvCode,DetailID,Sequence,TransSequence from #resulttemp
  576. --select * from #resulttemp
  577. DROP table #maintemp
  578. DROP table #resulttemp
  579. DROP table #barcodetemp";
  580. #endregion
  581. sql = String.Format(sql, LotNo, WorkPoint, Quantity);
  582. DataTable table = DBHelper.SQlReturnData(sql, cmd);
  583. string json = JsonConvert.SerializeObject(table);
  584. List<DownItemModel> downItemModels = JsonConvert.DeserializeObject<List<DownItemModel>>(json);
  585. foreach (DownItemModel model in downItemModels)
  586. {
  587. if (model != null && model.LotNo == null || "" == model.LotNo)
  588. {
  589. throw new Exception(language.GetNameByCode("WMSAPIInfo201"));
  590. }
  591. WareHouseLotInfoDown(Identification, model.TransCode, model.Sequence + "~" + model.TransSequence, model.LotNo, model.Quantity, User, WorkPoint, "13", BusinessCode, cmd, language,"","");
  592. //回写已领数量
  593. sql = @"UPDATE ICSOOPick SET IssueQuantity=(ISNULL(IssueQuantity,0)+" + model.Quantity+") WHERE OODetailID='{0}' AND Sequence='{1}' AND WorkPoint='{2}'";
  594. sql = String.Format(sql, model.DetailID, model.TransSequence, WorkPoint);
  595. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  596. {
  597. throw new Exception(language.GetNameByCode("WMSAPIInfo199"));
  598. }
  599. }
  600. }
  601. #endregion
  602. }
  603. catch (Exception)
  604. {
  605. throw;
  606. }
  607. }
  608. /// <summary>
  609. /// 添加库存(奥美专用)
  610. /// </summary>
  611. /// <param name="LocationCode"></param>
  612. /// <param name="LotNo"></param>
  613. /// <param name="Quantity"></param>
  614. /// <param name="User"></param>
  615. /// <param name="WorkPoint"></param>
  616. /// <param name="TransType"></param>
  617. /// <param name="BusinessCode"></param>
  618. /// <param name="cmd"></param>
  619. /// <param name="jointLotNo"></param>
  620. public static void WareHouseLotInfoUpAM(string Identification, string LocationCode, string LotNo, string Quantity, string User,
  621. string WorkPoint, string TransType, string BusinessCode, SqlCommand cmd, Dictionary<string, string> language, string LogID, string jointLotNo,string TransCode,string TransSequence)
  622. {
  623. try
  624. {
  625. #region 正常入库
  626. ///添加库存(原条码退回,更新库存;新条码直接入库)
  627. //stirng locationcode = "";
  628. string sql = string.Empty;
  629. string locationcode = "";
  630. string newlocationcode = "";
  631. string amount = "";
  632. //string sqql = @"select a.Amount FROM ICSInventoryLot a
  633. // WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  634. //sqql = string.Format(sqql, LotNo, WorkPoint);
  635. //DataTable dtaa = DBHelper.SQlReturnData(sqql, cmd);
  636. //amount = dtaa.Rows[0]["Amount"].ToString();
  637. //string cheksql = @"select d.EATTRIBUTE1 FROM ICSInventoryLot a
  638. // INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  639. // INNER JOIN ICSInventory d on a.InvCode=d.InvCode and a.WorkPoint=d.WorkPoint
  640. // WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' and d.AmountEnable='1'";
  641. //cheksql = string.Format(cheksql, LotNo, WorkPoint);
  642. //DataTable dta = DBHelper.SQlReturnData(cheksql, cmd);
  643. //if (dta.Rows.Count > 0)
  644. //{
  645. // Quantity = (decimal.Parse(Quantity) * decimal.Parse(dta.Rows[0]["EATTRIBUTE1"].ToString())).ToString();
  646. //}
  647. if (BusinessCode != TransTypeEnum.SalesReturnBack.GetDescription<DBValue>())
  648. {
  649. if (string.IsNullOrWhiteSpace(LogID))
  650. {
  651. sql = @"IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}')
  652. BEGIN
  653. RAISERROR('" + language.GetNameByCode("WMSAPIInfo164") + @"',16,1);
  654. RETURN
  655. END ";
  656. }
  657. else
  658. {
  659. sql = @"SELECT LocationCode FROM ICSWareHouseLotInfo a WHERE LotNo='{0}' AND WorkPoint='{1}'";
  660. sql = string.Format(sql, LotNo, WorkPoint);
  661. DataTable dt = DBHelper.SQlReturnData(sql, cmd);
  662. if (dt == null || dt.Rows.Count <= 0)
  663. {
  664. throw new Exception(string.Format(language.GetNameByCode("WMSAPIInfo171"), LotNo));
  665. }
  666. locationcode = dt.Rows[0]["LocationCode"].ToString();
  667. }
  668. }
  669. if(BusinessCode == TransTypeEnum.MOIssueDocNegative.GetDescription<DBValue>())
  670. {
  671. sql = @"SELECT FromLocationCode FROM ICSWareHouseLotInfoLog a WHERE LotNo='{0}' AND WorkPoint='{1}' AND ID='{2}'";
  672. sql = string.Format(sql, LotNo, WorkPoint,LogID);
  673. DataTable dt = DBHelper.SQlReturnData(sql, cmd);
  674. if (dt == null || dt.Rows.Count <= 0)
  675. {
  676. throw new Exception(string.Format(language.GetNameByCode("WMSAPIInfo171"), LotNo));
  677. }
  678. newlocationcode = dt.Rows[0]["FromLocationCode"].ToString();
  679. sql += @" IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  680. BEGIN
  681. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  682. RETURN
  683. END
  684. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}')
  685. BEGIN
  686. IF EXISTS(SELECT a.LotNO FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND a.Quantity=0)
  687. BEGIN
  688. UPDATE a SET a.Quantity=ISNULL(a.Quantity,0)+'{3}',WarehouseCode=e.WarehouseCode,LocationCode=d.LocationCode
  689. From ICSWareHouseLotInfo a
  690. INNER JOIN ICSLocation d ON d.LocationCode='{4}' AND a.WorkPoint=d.WorkPoint
  691. INNER JOIN ICSWarehouse e ON d.WHID=e.ID AND d.WorkPoint=e.WorkPoint
  692. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  693. END
  694. ELSE IF EXISTS(SELECT a.LotNO FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND a.LocationCode='{4}')
  695. BEGIN
  696. UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)+'{3}'
  697. WHERE LotNo='{0}' AND WorkPoint='{1}'
  698. END
  699. ELSE IF('" + locationcode + @"' != '{4}')
  700. BEGIN
  701. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo395"), "{4}", locationcode) + @"', 16, 1);
  702. RETURN
  703. END
  704. END
  705. ELSE
  706. BEGIN
  707. IF EXISTS(SELECT il.InvCode FROM ICSInventoryLocation il
  708. INNER JOIN ICSInventoryLot a ON a.InvCode=il.InvCode AND a.WorkPoint=il.WorkPoint
  709. WHERE il.Enable='1' AND a.LotNo='{0}' AND a.WorkPoint='{1}')
  710. BEGIN
  711. IF NOT EXISTS(SELECT il.InvCode FROM ICSInventoryLocation il
  712. INNER JOIN ICSInventoryLot a ON a.InvCode=il.InvCode AND a.WorkPoint=il.WorkPoint
  713. WHERE il.Enable='1' AND a.LotNo='{0}' AND a.WorkPoint='{1}' AND il.LocationCode='{4}')
  714. BEGIN
  715. RAISERROR('" + language.GetNameByCode("WMSAPIInfo180") + @"',16,1);
  716. RETURN
  717. END
  718. END
  719. INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  720. SELECT NEWID(),a.LotNo ,e.WarehouseCode,d.LocationCode,a.InvCode ,'{3}',SYSDATETIME(),'0',f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint ,''
  721. FROM ICSInventoryLot a
  722. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  723. --INNER JOIN ICSOApplyNegDetail c ON b.TransCode=c.OApplyNegCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  724. INNER JOIN ICSLocation d ON d.LocationCode='{4}' AND a.WorkPoint=d.WorkPoint
  725. INNER JOIN ICSWarehouse e ON d.WHID=e.ID AND d.WorkPoint=e.WorkPoint
  726. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  727. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  728. END";
  729. sql = string.Format(sql, LotNo, WorkPoint, User, Quantity, newlocationcode);
  730. }
  731. else
  732. {
  733. sql += @" IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  734. BEGIN
  735. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  736. RETURN
  737. END
  738. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}')
  739. BEGIN
  740. IF EXISTS(SELECT a.LotNO FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND a.Quantity=0)
  741. BEGIN
  742. UPDATE a SET a.Quantity=ISNULL(a.Quantity,0)+'{3}',WarehouseCode=e.WarehouseCode,LocationCode=d.LocationCode
  743. From ICSWareHouseLotInfo a
  744. INNER JOIN ICSLocation d ON d.LocationCode='{4}' AND a.WorkPoint=d.WorkPoint
  745. INNER JOIN ICSWarehouse e ON d.WHID=e.ID AND d.WorkPoint=e.WorkPoint
  746. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  747. END
  748. ELSE IF EXISTS(SELECT a.LotNO FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND a.LocationCode='{4}')
  749. BEGIN
  750. UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)+'{3}'
  751. WHERE LotNo='{0}' AND WorkPoint='{1}'
  752. END
  753. ELSE IF('" + locationcode + @"' != '{4}')
  754. BEGIN
  755. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo395"), "{4}", locationcode) + @"', 16, 1);
  756. RETURN
  757. END
  758. END
  759. ELSE
  760. BEGIN
  761. IF EXISTS(SELECT il.InvCode FROM ICSInventoryLocation il
  762. INNER JOIN ICSInventoryLot a ON a.InvCode=il.InvCode AND a.WorkPoint=il.WorkPoint
  763. WHERE il.Enable='1' AND a.LotNo='{0}' AND a.WorkPoint='{1}')
  764. BEGIN
  765. IF NOT EXISTS(SELECT il.InvCode FROM ICSInventoryLocation il
  766. INNER JOIN ICSInventoryLot a ON a.InvCode=il.InvCode AND a.WorkPoint=il.WorkPoint
  767. WHERE il.Enable='1' AND a.LotNo='{0}' AND a.WorkPoint='{1}' AND il.LocationCode='{4}')
  768. BEGIN
  769. RAISERROR('" + language.GetNameByCode("WMSAPIInfo180") + @"',16,1);
  770. RETURN
  771. END
  772. END
  773. INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  774. SELECT NEWID(),a.LotNo ,e.WarehouseCode,d.LocationCode,a.InvCode ,'{3}',SYSDATETIME(),'0',f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint ,''
  775. FROM ICSInventoryLot a
  776. --INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  777. --INNER JOIN ICSOApplyNegDetail c ON b.TransCode=c.OApplyNegCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  778. INNER JOIN ICSLocation d ON d.LocationCode='{4}' AND a.WorkPoint=d.WorkPoint
  779. INNER JOIN ICSWarehouse e ON d.WHID=e.ID AND d.WorkPoint=e.WorkPoint
  780. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  781. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  782. END";
  783. sql = string.Format(sql, LotNo, WorkPoint, User, Quantity, LocationCode);
  784. }
  785. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  786. {
  787. throw new Exception(language.GetNameByCode("WMSAPIInfo165"));
  788. }
  789. if (BusinessCode == TransTypeEnum.MOIssueDocNegative.GetDescription<DBValue>())
  790. {
  791. ///添加日志
  792. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  793. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  794. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  795. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  796. MTIME,WorkPoint,EATTRIBUTE1,LogID)
  797. SELECT NEWID(),'{3}','{8}','{9}',a.LotNo ,a.InvCode ,
  798. '','',c.WarehouseCode,c.LocationCode,'{6}',
  799. '','0','{4}','{5}','0','',
  800. '','','',f.F_Account ,f.F_RealName ,
  801. SYSDATETIME() ,a.WorkPoint ,'','{7}'
  802. FROM ICSInventoryLot a
  803. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  804. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  805. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  806. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  807. ";
  808. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransType, BusinessCode, Quantity, LogID,TransCode,TransSequence);
  809. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  810. {
  811. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  812. }
  813. }
  814. else if (BusinessCode == TransTypeEnum.MOStockINByProduct.GetDescription<DBValue>())
  815. {
  816. ///添加日志
  817. sql = @"IF EXISTS(SELECT 1 FROM ICSInventoryLot lot WHERE lot.LotNo='{0}' AND lot.WorkPoint='{1}' AND lot.Type=19)
  818. BEGIN
  819. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  820. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  821. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  822. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  823. MTIME,WorkPoint,EATTRIBUTE1,LogID)
  824. SELECT NEWID(),'{3}','','',a.LotNo ,a.InvCode ,
  825. '','',c.WarehouseCode,c.LocationCode,'{6}',
  826. '','0','{4}','{5}','0','',
  827. '','','',f.F_Account ,f.F_RealName ,
  828. SYSDATETIME() ,a.WorkPoint ,'','{7}'
  829. FROM ICSInventoryLot a
  830. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  831. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  832. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  833. END
  834. ELSE
  835. BEGIN
  836. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  837. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  838. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  839. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  840. MTIME,WorkPoint,EATTRIBUTE1,LogID)
  841. SELECT NEWID(),'{3}',b.TransCode,b.TransSequence,a.LotNo ,a.InvCode ,
  842. '','',c.WarehouseCode,c.LocationCode,'{6}',
  843. '','0','{4}','{5}','0','',
  844. '','','',f.F_Account ,f.F_RealName ,
  845. SYSDATETIME() ,a.WorkPoint ,'','{7}'
  846. FROM ICSInventoryLot a
  847. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  848. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  849. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  850. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  851. END
  852. ";
  853. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransType, BusinessCode, Quantity, LogID);
  854. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  855. {
  856. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  857. }
  858. }
  859. else if (BusinessCode == TransTypeEnum.OOStockINByProduct.GetDescription<DBValue>())
  860. {
  861. ///添加日志
  862. sql = @"IF EXISTS(SELECT 1 FROM ICSInventoryLot lot WHERE lot.LotNo='{0}' AND lot.WorkPoint='{1}' AND lot.Type=19)
  863. BEGIN
  864. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  865. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  866. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  867. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  868. MTIME,WorkPoint,EATTRIBUTE1,LogID)
  869. SELECT NEWID(),'{3}','','',a.LotNo ,a.InvCode ,
  870. '','',c.WarehouseCode,c.LocationCode,'{6}',
  871. '','0','{4}','{5}','0','',
  872. '','','',f.F_Account ,f.F_RealName ,
  873. SYSDATETIME() ,a.WorkPoint ,'','{7}'
  874. FROM ICSInventoryLot a
  875. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  876. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  877. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  878. END
  879. ELSE
  880. BEGIN
  881. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  882. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  883. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  884. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  885. MTIME,WorkPoint,EATTRIBUTE1,LogID)
  886. SELECT NEWID(),'{3}',b.TransCode,b.TransSequence,a.LotNo ,a.InvCode ,
  887. '','',c.WarehouseCode,c.LocationCode,'{6}',
  888. '','0','{4}','{5}','0','',
  889. '','','',f.F_Account ,f.F_RealName ,
  890. SYSDATETIME() ,a.WorkPoint ,'','{7}'
  891. FROM ICSInventoryLot a
  892. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  893. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  894. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  895. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  896. END
  897. ";
  898. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransType, BusinessCode, Quantity, LogID);
  899. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  900. {
  901. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  902. }
  903. }
  904. else
  905. {
  906. ///添加日志
  907. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  908. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  909. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  910. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  911. MTIME,WorkPoint,EATTRIBUTE1,LogID)
  912. SELECT NEWID(),'{3}',b.TransCode,b.TransSequence,a.LotNo ,a.InvCode ,
  913. '','',c.WarehouseCode,c.LocationCode,'{6}',
  914. '','0','{4}','{5}','0','',
  915. '','','',f.F_Account ,f.F_RealName ,
  916. SYSDATETIME() ,a.WorkPoint ,'','{7}'
  917. FROM ICSInventoryLot a
  918. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  919. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  920. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  921. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  922. ";
  923. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransType, BusinessCode, Quantity, LogID);
  924. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  925. {
  926. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  927. }
  928. }
  929. #endregion
  930. #region 管控方式是"料品"时
  931. ControlMode mode = ICSControlModeService.GetControlMode();
  932. if (mode.itemCode.Equals("ControlMode02"))
  933. {
  934. //查询是否存在料品管控的条码
  935. string sqlStrNew = @"SELECT a.ID,
  936. con.ContainerCode,
  937. con.ContainerName,
  938. a.LotNo,
  939. a.InvCode,
  940. inv.InvName,
  941. inv.InvStd,
  942. inv.InvUnit,-- {0}
  943. inv.AmountUnit,
  944. ext.ID AS ExtensionID,
  945. ext.ProjectCode,
  946. ext.Version,
  947. ext.BatchCode,
  948. ext.Brand,
  949. ext.cFree1,
  950. ext.cFree2,
  951. ext.cFree3,
  952. ext.cFree4,
  953. ext.cFree5,
  954. ext.cFree6,
  955. ext.cFree7,
  956. ext.cFree8,
  957. ext.cFree9,
  958. ext.cFree10,
  959. a.MUSER AS [ USER ],
  960. a.MTIME AS [ MTime ]
  961. FROM
  962. ICSInventoryLot a
  963. LEFT JOIN ICSContainerLot conlot ON a.LotNo = conlot.LotNo AND a.WorkPoint = conlot.WorkPoint
  964. LEFT JOIN ICSContainer con ON conlot.ContainerID = con.ID AND conlot.WorkPoint = con.WorkPoint
  965. INNER JOIN ICSInventory inv ON a.InvCode = inv.InvCode AND a.WorkPoint = inv.WorkPoint
  966. INNER JOIN ICSExtension ext ON a.ExtensionID = ext.ID AND a.WorkPoint = ext.WorkPoint
  967. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  968. sqlStrNew = string.Format(sqlStrNew, jointLotNo, WorkPoint);
  969. DataTable table = DBHelper.SQlReturnData(sqlStrNew, cmd);
  970. string json = JsonConvert.SerializeObject(table);
  971. List<LotNoMode> modelNew = JsonConvert.DeserializeObject<List<LotNoMode>>(json);
  972. //当不存在料品管控条码时,生成新条码
  973. if (!(modelNew.Count > 0))
  974. {
  975. //获取旧条码的信息
  976. string jsonStr = ICSControlModeService.QueryLotNo(LotNo, WorkPoint);
  977. List<LotNoMode> model = JsonConvert.DeserializeObject<List<LotNoMode>>(jsonStr);
  978. //在条码表中插入一条新数据,在条码表中插入一条新数据,并在库存表中添加新数据
  979. LotNoMode lotNoMode = model[0];
  980. CreateLotNo(jointLotNo, Quantity, "", "", WorkPoint, Identification, User, lotNoMode.InvCode, BusinessCode, lotNoMode.ProjectCode, lotNoMode.BatchCode,
  981. lotNoMode.Version, lotNoMode.Brand, lotNoMode.cFree1, lotNoMode.cFree2, lotNoMode.cFree3, lotNoMode.cFree4, lotNoMode.cFree5, lotNoMode.cFree6, lotNoMode.cFree7,
  982. lotNoMode.cFree8, lotNoMode.cFree9, lotNoMode.cFree10, cmd, language, LocationCode, LotNo);
  983. }
  984. try
  985. {
  986. //合并前日志
  987. WareHouseLotInfoLog(Identification, jointLotNo, User, WorkPoint, "2",
  988. TransTypeEnum.LOTMergeBefore.GetDescription<DBValue>(), "", cmd, language);
  989. //更新目标条码库存
  990. WareHouseLotInfoMerge(Identification, jointLotNo, LotNo, Quantity, User, WorkPoint, "2",
  991. TransTypeEnum.LOTMergeAfter.GetDescription<DBValue>(), cmd, language);
  992. //合并后日志
  993. WareHouseLotInfoLog(Identification, jointLotNo, User, WorkPoint, "2",
  994. TransTypeEnum.LOTMergeAfter.GetDescription<DBValue>(), "", cmd, language);
  995. }
  996. catch (Exception)
  997. {
  998. throw;
  999. }
  1000. }
  1001. #endregion
  1002. #region 成品(生产)入库,倒冲
  1003. if (BusinessCode.Equals(TransTypeEnum.ManufactureReceiveDoc.GetDescription<DBValue>()))
  1004. {
  1005. #region sql
  1006. sql = @"-- 1.创建临时表 初始单据数据 maintemp
  1007. SELECT
  1008. c.MOCode AS TransCode,
  1009. a.MODetailID AS DetailID,
  1010. a.InvCode,
  1011. b.InvName,
  1012. b.InvStd,
  1013. a.ParentQuantity/c.Quantity*{2} AS Quantity,
  1014. a.Amount,
  1015. a.Sequence AS TransSequence,
  1016. a.IssueQuantity,
  1017. c.Sequence,
  1018. inv.InvUnit,
  1019. 0 AS LocationQty,
  1020. inv.AmountUnit,
  1021. a.ExtensionID,
  1022. a.WorkPoint,
  1023. ext.ProjectCode,
  1024. CASE WHEN ISNULL(inv.BatchEnable, '0')='1' THEN ext.BatchCode ELSE '' END AS BatchCode,
  1025. ext.Version,
  1026. ext.Brand,
  1027. ext.cFree1,
  1028. ext.cFree2,
  1029. ext.cFree3,
  1030. ext.cFree4,
  1031. ext.cFree5,
  1032. ext.cFree6,
  1033. ext.cFree7,
  1034. ext.cFree8,
  1035. ext.cFree9,
  1036. ext.cFree10
  1037. INTO #maintemp
  1038. FROM
  1039. ICSMOPick a
  1040. inner join ICSMO c on a.MODetailID=c.MODetailID and a.WorkPoint=c.WorkPoint
  1041. LEFT JOIN ICSINVENTORY b ON a.InvCode = b.InvCode AND a.WorkPoint=b.WorkPoint
  1042. INNER JOIN ICSExtension ext ON a.ExtensionID=ext.ID AND a.WorkPoint=ext.WorkPoint
  1043. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  1044. INNER JOIN (
  1045. SELECT a.MOCode,a.Sequence,a.WorkPoint
  1046. FROM ICSMO a
  1047. INNER JOIN ICSInventoryLotDetail b ON b.TransCode=a.MOCode AND b.TransSequence=a.Sequence AND b.WorkPoint=a.WorkPoint
  1048. INNER JOIN ICSInventoryLot c ON c.LotNo=b.LotNo AND c.WorkPoint=b.WorkPoint
  1049. WHERE c.LotNo='{0}' AND c.WorkPoint='{1}'
  1050. ) temp ON c.MOCode=temp.MOCode AND a.WorkPoint=temp.WorkPoint AND c.Sequence=temp.Sequence
  1051. WHERE a.SupplyType='1'
  1052. 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,
  1053. 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;
  1054. select * into #resulttemp from #maintemp
  1055. ALTER TABLE #resulttemp ADD LotNo VARCHAR(50)
  1056. delete from #resulttemp
  1057. -- 2.maintemp barcodetemp
  1058. select a.lotno,a.invcode,(a.quantity-a.lockQuantity) as quantity ,a.mtime into #barcodetemp from ICSWareHouseLotInfo a LEFT JOIN
  1059. (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
  1060. -- 3.maintemp ID barcodetemp
  1061. BEGIN
  1062. DECLARE @transSequence int;--
  1063. DECLARE @qty int;--
  1064. DECLARE @needqty int;--
  1065. DECLARE @lotno VARCHAR(50);--
  1066. DECLARE @DetailID VARCHAR(50);--ID
  1067. DECLARE tempCursor CURSOR FOR (select transSequence,DetailID from #maintemp); --tempCursor
  1068. OPEN tempCursor; --
  1069. FETCH NEXT FROM tempCursor INTO @transSequence,@DetailID; --
  1070. WHILE @@fetch_status=0
  1071. BEGIN
  1072. select @needqty=Quantity from #maintemp where transSequence = @transSequence AND DetailID = @DetailID
  1073. PRINT @transSequence
  1074. WHILE @needqty>0
  1075. BEGIN
  1076. select top 1 @qty = isnull(quantity,0),@lotno = isnull(lotno,'') from #barcodetemp a
  1077. RIGHT JOIN (select invcode from #maintemp where transSequence = @transSequence AND DetailID = @DetailID) b on a.invcode=b.invcode ORDER BY mtime
  1078. BEGIN
  1079. IF(@needqty-@qty>=0 and ISNULL(@lotno, '')<>'')
  1080. BEGIN
  1081. insert INTO #resulttemp (lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity,Quantity,
  1082. Amount,InvCode,InvName,InvStd,InvUnit,LocationQty,AmountUnit,
  1083. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint)
  1084. SELECT @lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity, Quantity,
  1085. ISNULL(Amount, 0), InvCode,InvName,ISNULL(InvStd, ''),InvUnit,@qty,ISNULL(AmountUnit, ''),
  1086. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint from #maintemp
  1087. where #maintemp.transSequence = @transSequence AND DetailID = @DetailID
  1088. delete from #barcodetemp where lotno = @lotno
  1089. SET @needqty=@needqty-@qty
  1090. END
  1091. ELSE IF(@needqty-@qty<0 and ISNULL(@lotno, '')<>'')
  1092. BEGIN
  1093. insert INTO #resulttemp (lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity,Quantity,
  1094. Amount,InvCode,InvName,InvStd,InvUnit,LocationQty,AmountUnit,
  1095. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint)
  1096. SELECT @lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity, Quantity,
  1097. ISNULL(Amount, 0),InvCode,InvName,ISNULL(InvStd, ''),InvUnit,@needqty,ISNULL(AmountUnit, ''),
  1098. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint from #maintemp
  1099. where #maintemp.transSequence = @transSequence AND DetailID = @DetailID
  1100. update #barcodetemp set quantity = @qty-@needqty where lotno = @lotno
  1101. SET @needqty=@needqty-@qty
  1102. END
  1103. ELSE
  1104. BEGIN
  1105. insert INTO #resulttemp (lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity,Quantity,
  1106. Amount,InvCode,InvName,InvStd,InvUnit,LocationQty,AmountUnit,
  1107. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint)
  1108. SELECT @lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity, Quantity,
  1109. ISNULL(Amount, 0),InvCode,InvName,ISNULL(InvStd, ''),InvUnit,0,ISNULL(AmountUnit, ''),
  1110. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint from #maintemp
  1111. where #maintemp.transSequence = @transSequence AND DetailID = @DetailID
  1112. SET @needqty=0
  1113. END
  1114. END
  1115. END
  1116. FETCH NEXT FROM tempCursor INTO @transSequence,@DetailID;
  1117. END
  1118. CLOSE tempCursor
  1119. DEALLOCATE tempCursor
  1120. END
  1121. select TransCode,LotNo,LocationQty AS Quantity,InvCode,DetailID,Sequence,TransSequence from #resulttemp
  1122. --select * from #resulttemp
  1123. DROP table #maintemp
  1124. DROP table #resulttemp
  1125. DROP table #barcodetemp";
  1126. #endregion
  1127. sql = String.Format(sql, LotNo, WorkPoint, Quantity);
  1128. DataTable table = DBHelper.SQlReturnData(sql, cmd);
  1129. string json = JsonConvert.SerializeObject(table);
  1130. List<DownItemModel> downItemModels = JsonConvert.DeserializeObject<List<DownItemModel>>(json);
  1131. foreach (DownItemModel model in downItemModels)
  1132. {
  1133. if (model != null && model.LotNo == null || "" == model.LotNo)
  1134. {
  1135. throw new Exception(language.GetNameByCode("WMSAPIInfo201"));
  1136. }
  1137. WareHouseLotInfoDown(Identification, model.TransCode, model.Sequence + "~" + model.TransSequence, model.LotNo, model.Quantity, User, WorkPoint, "12", BusinessCode, cmd, language, "", "");
  1138. //回写已领数量
  1139. sql = @"UPDATE ICSMOPick SET IssueQuantity=(ISNULL(IssueQuantity,0)+" + model.Quantity + ") WHERE MODetailID='{0}' AND Sequence='{1}' AND WorkPoint='{2}'";
  1140. sql = String.Format(sql, model.DetailID, model.TransSequence, WorkPoint);
  1141. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  1142. {
  1143. throw new Exception(language.GetNameByCode("WMSAPIInfo199"));
  1144. }
  1145. }
  1146. }
  1147. #endregion
  1148. #region 委外入库,倒冲
  1149. if (BusinessCode.Equals(TransTypeEnum.OutsourcingReceiveDoc.GetDescription<DBValue>()))
  1150. {
  1151. #region sql
  1152. sql = @"-- 1.创建临时表 初始单据数据 maintemp
  1153. SELECT
  1154. c.OOCode AS TransCode,
  1155. a.OODetailID AS DetailID,
  1156. a.InvCode,
  1157. b.InvName,
  1158. b.InvStd,
  1159. a.ParentQuantity/c.Quantity*{2} AS Quantity,
  1160. a.Amount,
  1161. a.Sequence AS TransSequence,
  1162. a.IssueQuantity,
  1163. c.Sequence,
  1164. inv.InvUnit,
  1165. 0 AS LocationQty,
  1166. inv.AmountUnit,
  1167. a.ExtensionID,
  1168. a.WorkPoint,
  1169. ext.ProjectCode,
  1170. CASE WHEN ISNULL(inv.BatchEnable, '0')='1' THEN ext.BatchCode ELSE '' END AS BatchCode,
  1171. ext.Version,
  1172. ext.Brand,
  1173. ext.cFree1,
  1174. ext.cFree2,
  1175. ext.cFree3,
  1176. ext.cFree4,
  1177. ext.cFree5,
  1178. ext.cFree6,
  1179. ext.cFree7,
  1180. ext.cFree8,
  1181. ext.cFree9,
  1182. ext.cFree10
  1183. INTO #maintemp
  1184. FROM
  1185. ICSOOPick a
  1186. inner join ICSOutsourcingOrder c on a.OODetailID=c.OODetailID and a.WorkPoint=c.WorkPoint
  1187. LEFT JOIN ICSINVENTORY b ON a.InvCode = b.InvCode AND a.WorkPoint=b.WorkPoint
  1188. INNER JOIN ICSExtension ext ON a.ExtensionID=ext.ID AND a.WorkPoint=ext.WorkPoint
  1189. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  1190. INNER JOIN (
  1191. SELECT a.OOCode,a.Sequence,a.WorkPoint
  1192. FROM ICSOutsourcingOrder a
  1193. INNER JOIN ICSInventoryLotDetail b ON b.TransCode=a.OOCode AND b.TransSequence=a.Sequence AND b.WorkPoint=a.WorkPoint
  1194. INNER JOIN ICSInventoryLot c ON c.LotNo=b.LotNo AND c.WorkPoint=b.WorkPoint
  1195. WHERE c.LotNo='{0}' AND c.WorkPoint='{1}'
  1196. ) temp ON c.OOCode=temp.OOCode AND a.WorkPoint=temp.WorkPoint AND c.Sequence=temp.Sequence
  1197. WHERE a.SupplyType='1'
  1198. 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,
  1199. 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;
  1200. select * into #resulttemp from #maintemp
  1201. ALTER TABLE #resulttemp ADD LotNo VARCHAR(50)
  1202. delete from #resulttemp
  1203. -- 2.maintemp barcodetemp
  1204. select a.lotno,a.invcode,(a.quantity-a.lockQuantity) as quantity ,a.mtime into #barcodetemp from ICSWareHouseLotInfo a LEFT JOIN
  1205. (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
  1206. -- 3.maintemp ID barcodetemp
  1207. BEGIN
  1208. DECLARE @transSequence int;--
  1209. DECLARE @qty int;--
  1210. DECLARE @needqty int;--
  1211. DECLARE @lotno VARCHAR(50);--
  1212. DECLARE @DetailID VARCHAR(50);--ID
  1213. DECLARE tempCursor CURSOR FOR (select transSequence,DetailID from #maintemp); --tempCursor
  1214. OPEN tempCursor; --
  1215. FETCH NEXT FROM tempCursor INTO @transSequence,@DetailID; --
  1216. WHILE @@fetch_status=0
  1217. BEGIN
  1218. select @needqty=Quantity from #maintemp where transSequence = @transSequence AND DetailID = @DetailID
  1219. PRINT @transSequence
  1220. WHILE @needqty>0
  1221. BEGIN
  1222. select top 1 @qty = isnull(quantity,0),@lotno = isnull(lotno,'') from #barcodetemp a
  1223. RIGHT JOIN (select invcode from #maintemp where transSequence = @transSequence AND DetailID = @DetailID) b on a.invcode=b.invcode ORDER BY mtime
  1224. BEGIN
  1225. IF(@needqty-@qty>=0 and ISNULL(@lotno, '')<>'')
  1226. BEGIN
  1227. insert INTO #resulttemp (lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity,Quantity,
  1228. Amount,InvCode,InvName,InvStd,InvUnit,LocationQty,AmountUnit,
  1229. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint)
  1230. SELECT @lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity, Quantity,
  1231. ISNULL(Amount, 0), InvCode,InvName,ISNULL(InvStd, ''),InvUnit,@qty,ISNULL(AmountUnit, ''),
  1232. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint from #maintemp
  1233. where #maintemp.transSequence = @transSequence AND DetailID = @DetailID
  1234. delete from #barcodetemp where lotno = @lotno
  1235. SET @needqty=@needqty-@qty
  1236. END
  1237. ELSE IF(@needqty-@qty<0 and ISNULL(@lotno, '')<>'')
  1238. BEGIN
  1239. insert INTO #resulttemp (lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity,Quantity,
  1240. Amount,InvCode,InvName,InvStd,InvUnit,LocationQty,AmountUnit,
  1241. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint)
  1242. SELECT @lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity, Quantity,
  1243. ISNULL(Amount, 0),InvCode,InvName,ISNULL(InvStd, ''),InvUnit,@needqty,ISNULL(AmountUnit, ''),
  1244. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint from #maintemp
  1245. where #maintemp.transSequence = @transSequence AND DetailID = @DetailID
  1246. update #barcodetemp set quantity = @qty-@needqty where lotno = @lotno
  1247. SET @needqty=@needqty-@qty
  1248. END
  1249. ELSE
  1250. BEGIN
  1251. insert INTO #resulttemp (lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity,Quantity,
  1252. Amount,InvCode,InvName,InvStd,InvUnit,LocationQty,AmountUnit,
  1253. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint)
  1254. SELECT @lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity, Quantity,
  1255. ISNULL(Amount, 0),InvCode,InvName,ISNULL(InvStd, ''),InvUnit,0,ISNULL(AmountUnit, ''),
  1256. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint from #maintemp
  1257. where #maintemp.transSequence = @transSequence AND DetailID = @DetailID
  1258. SET @needqty=0
  1259. END
  1260. END
  1261. END
  1262. FETCH NEXT FROM tempCursor INTO @transSequence,@DetailID;
  1263. END
  1264. CLOSE tempCursor
  1265. DEALLOCATE tempCursor
  1266. END
  1267. select TransCode,LotNo,LocationQty AS Quantity,InvCode,DetailID,Sequence,TransSequence from #resulttemp
  1268. --select * from #resulttemp
  1269. DROP table #maintemp
  1270. DROP table #resulttemp
  1271. DROP table #barcodetemp";
  1272. #endregion
  1273. sql = String.Format(sql, LotNo, WorkPoint, Quantity);
  1274. DataTable table = DBHelper.SQlReturnData(sql, cmd);
  1275. string json = JsonConvert.SerializeObject(table);
  1276. List<DownItemModel> downItemModels = JsonConvert.DeserializeObject<List<DownItemModel>>(json);
  1277. foreach (DownItemModel model in downItemModels)
  1278. {
  1279. if (model != null && model.LotNo == null || "" == model.LotNo)
  1280. {
  1281. throw new Exception(language.GetNameByCode("WMSAPIInfo201"));
  1282. }
  1283. WareHouseLotInfoDown(Identification, model.TransCode, model.Sequence + "~" + model.TransSequence, model.LotNo, model.Quantity, User, WorkPoint, "13", BusinessCode, cmd, language, "", "");
  1284. //回写已领数量
  1285. sql = @"UPDATE ICSOOPick SET IssueQuantity=(ISNULL(IssueQuantity,0)+" + model.Quantity + ") WHERE OODetailID='{0}' AND Sequence='{1}' AND WorkPoint='{2}'";
  1286. sql = String.Format(sql, model.DetailID, model.TransSequence, WorkPoint);
  1287. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  1288. {
  1289. throw new Exception(language.GetNameByCode("WMSAPIInfo199"));
  1290. }
  1291. }
  1292. }
  1293. #endregion
  1294. }
  1295. catch (Exception)
  1296. {
  1297. throw;
  1298. }
  1299. }
  1300. /// <summary>
  1301. /// 减少库存
  1302. /// </summary>
  1303. /// <param name="Identification"></param>
  1304. /// <param name="TransCode"></param>
  1305. /// <param name="TransSequence"></param>
  1306. /// <param name="LotNo"></param>
  1307. /// <param name="Quantity"></param>
  1308. /// <param name="User"></param>
  1309. /// <param name="WorkPoint"></param>
  1310. /// <param name="TransType"></param>
  1311. /// <param name="BusinessCode"></param>
  1312. /// <param name="cmd"></param>
  1313. public static DataTable WareHouseLotInfoDown(string Identification, string TransCode, string TransSequence, string LotNo, string Quantity, string User,
  1314. string WorkPoint, string TransType, string BusinessCode, SqlCommand cmd, Dictionary<string, string> language, string LogID, string MergeID = "")
  1315. {
  1316. decimal LotQTYYY = 0;
  1317. decimal LotQTY = 0;
  1318. string LotEnable = "";
  1319. string chekEnable = "";
  1320. string DisPrintEnable = "";
  1321. string PrintEnable = "";
  1322. string sql = "";
  1323. string lotstr = "";
  1324. int result = 0;
  1325. List<string> NewBarCodeList = new List<string>();
  1326. DataTable dtLotno = new DataTable();
  1327. DataTable lstDt = new DataTable();
  1328. DataTable ZLtable = new DataTable();
  1329. try
  1330. {
  1331. //检验是否分批
  1332. sql = @"SELECT b.LotEnable,b.PrintEnable FROM ICSInventoryLot a
  1333. LEFT JOIN ICSInventory b ON a.InvCode=b.InvCode AND a.WorkPoint=b.WorkPoint
  1334. where a.LotNo='{0}' and a.WorkPoint='{1}'
  1335. ";
  1336. sql = string.Format(sql, LotNo, WorkPoint);
  1337. DataTable dt = DBHelper.SQlReturnData(sql, cmd);
  1338. if (dt.Rows.Count == 0)
  1339. {
  1340. throw new Exception(language.GetNameByCode("WMSAPIInfo369"));
  1341. }
  1342. else
  1343. {
  1344. LotEnable = dt.Rows[0]["LotEnable"].ToString();
  1345. PrintEnable = dt.Rows[0]["PrintEnable"].ToString();
  1346. }
  1347. 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
  1348. from Sys_SRM_Items a
  1349. left join Sys_SRM_ItemsDetail b on a.F_Id=b.F_ItemId
  1350. where a.F_EnCode='TransBatch' and b.F_ItemCode='{0}' )
  1351. BEGIN
  1352. RAISERROR('" + language.GetNameByCode("WMSAPIInfo470") + @"',16,1);
  1353. RETURN
  1354. END
  1355. select b.F_ItemCode as Code ,b.F_ItemName as Name,b.F_EnabledMark AS Enable ,b.F_IsDefault AS DisPrintEnable
  1356. from Sys_SRM_Items a
  1357. left join Sys_SRM_ItemsDetail b on a.F_Id=b.F_ItemId
  1358. where a.F_EnCode='TransBatch' and b.F_ItemCode='{0}'
  1359. ";
  1360. cheksql = string.Format(cheksql, BusinessCode);
  1361. DataTable chekdt = DBHelper.SQlReturnData(cheksql, cmd);
  1362. if (chekdt.Rows.Count == 0)
  1363. {
  1364. throw new Exception(language.GetNameByCode("WMSAPIInfo369"));
  1365. }
  1366. else
  1367. {
  1368. chekEnable = chekdt.Rows[0]["Enable"].ToString();
  1369. DisPrintEnable = chekdt.Rows[0]["DisPrintEnable"].ToString();
  1370. }
  1371. sql = @"select Quantity from ICSWareHouseLotInfo
  1372. where LotNO='{0}' AND WorkPoint='{1}'";
  1373. sql = string.Format(sql, LotNo, WorkPoint);
  1374. DataTable dtt = DBHelper.SQlReturnData(sql, cmd);
  1375. LotQTYYY = Convert.ToDecimal(dtt.Rows[0]["Quantity"]);
  1376. LotQTY = Convert.ToDecimal(Quantity);
  1377. if (!LotEnable.Equals("False")&&!chekEnable.Equals("False") && LotQTYYY - LotQTY > 0)
  1378. {
  1379. ZLtable = ICSControlModeService.GetZL();
  1380. if (ZLtable == null)
  1381. {
  1382. throw new Exception(language.GetNameByCode("WMSAPIInfo471"));
  1383. }
  1384. for (int i = 0; i < ZLtable.Rows.Count; i++)
  1385. {
  1386. string zlName = ZLtable.Rows[i]["Name"].ToString();
  1387. string zlTransCode = ZLtable.Rows[i]["BusinessCode"].ToString();
  1388. string Enable = ZLtable.Rows[i]["Enable"].ToString();
  1389. if (zlTransCode.Equals(BusinessCode))
  1390. {
  1391. if (Enable.Equals("True"))
  1392. {
  1393. ///更新日志
  1394. sql = @"
  1395. IF NOT EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfoLog a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' and transtype='15')
  1396. BEGIN
  1397. RAISERROR('" + language.GetNameByCode("WMSAPIInfo472") + @"',16,1);
  1398. RETURN
  1399. END
  1400. UPDATE ICSWareHouseLotInfoLog SET EATTRIBUTE2='1' WHERE LotNo='{0}' AND WorkPoint='{1}' and transtype='15'
  1401. ";
  1402. sql = string.Format(sql, LotNo, WorkPoint, LogID);
  1403. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  1404. {
  1405. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"占料标识更新失败!");
  1406. }
  1407. ///更新库存
  1408. sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}',LockQuantity=ISNULL(LockQuantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  1409. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity-LockQuantity<0)
  1410. BEGIN
  1411. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  1412. RETURN
  1413. END";
  1414. sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  1415. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  1416. {
  1417. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  1418. }
  1419. }
  1420. else
  1421. {
  1422. ///更新库存
  1423. sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-ISNULL(LockQuantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  1424. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity-LockQuantity<0)
  1425. BEGIN
  1426. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  1427. RETURN
  1428. END";
  1429. sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  1430. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  1431. {
  1432. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  1433. }
  1434. }
  1435. }
  1436. }
  1437. ///分批前添加日志
  1438. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  1439. BEGIN
  1440. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  1441. RETURN
  1442. END
  1443. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  1444. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  1445. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  1446. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  1447. MTIME,WorkPoint,EATTRIBUTE1)
  1448. SELECT NEWID(),'{3}','{7}','{8}',a.LotNo ,a.InvCode ,
  1449. c.WarehouseCode,c.LocationCode,'','',c.Quantity+{6},
  1450. '','0','{4}','31','0','',
  1451. '','','',f.F_Account ,f.F_RealName ,
  1452. SYSDATETIME() ,a.WorkPoint ,''
  1453. FROM ICSInventoryLot a
  1454. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  1455. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  1456. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  1457. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  1458. ";
  1459. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransType, BusinessCode, Quantity, TransCode, TransSequence);
  1460. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  1461. {
  1462. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  1463. }
  1464. #region 获取分批后的条码(lotstr)
  1465. sql = @"SELECT TOP 1 LotNO FROM ICSInventoryLot WHERE EATTRIBUTE1='{0}' AND WorkPoint='{1}'
  1466. ORDER BY CAST(SUBSTRING(LotNO, (LEN(LotNO)-CHARINDEX('-',REVERSE(LotNO))+1)+1,CHARINDEX('-',REVERSE(LotNO))-1) AS INT) DESC";
  1467. sql = string.Format(sql, LotNo, WorkPoint);
  1468. dt = DBHelper.SQlReturnData(sql, cmd);
  1469. if (dt.Rows.Count == 0)
  1470. {
  1471. lotstr = LotNo + "-" + 1;
  1472. }
  1473. else
  1474. {
  1475. lotstr = LotNo + "-" + (Convert.ToInt32(dt.Rows[0]["LotNO"].ToString().Split('-')[dt.Rows[0]["LotNO"].ToString().Split('-').Length - 1]) + 1).ToString();
  1476. }
  1477. NewBarCodeList.Add(lotstr);//将分批后新条码添加到新集合
  1478. #endregion
  1479. #region 将分批后的条码记录插入条码表,库存表及日志表并将原条码库存数量清零
  1480. sql = @"INSERT INTO ICSInventoryLot(ID,LotNo,InvCode,ProductDate,ExpirationDate,
  1481. Quantity,Amount,ExtensionID,Type,PrintTimes,
  1482. LastPrintUser,LastPrintTime,MUSER,MUSERName,MTIME,
  1483. WorkPoint,EATTRIBUTE1)
  1484. SELECT TOP 1 NEWID(),'{0}',a.InvCode,a.ProductDate,a.ExpirationDate,
  1485. '{2}',a.Amount/a.Quantity*Quantity,a.ExtensionID,a.Type,a.PrintTimes,
  1486. a.LastPrintUser,a.LastPrintTime,a.MUSER ,a.MUSERName ,GETDATE(),
  1487. a.WorkPoint ,'{1}'
  1488. From ICSInventoryLot a
  1489. where a.LotNo='{1}' and a.WorkPoint='{3}'";
  1490. sql = string.Format(sql, lotstr, LotNo, Quantity, WorkPoint);
  1491. cmd.CommandText = sql;
  1492. result = cmd.ExecuteNonQuery();
  1493. if (result <= 0)
  1494. {
  1495. throw new Exception(language.GetNameByCode("WMSAPIInfo195"));//条码分批后条码表存入失败!
  1496. }
  1497. sql = @"INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  1498. select NEWID(),'{0}',WarehouseCode,LocationCode,InvCode,'0',InDate,LockQuantity
  1499. ,MUSER,MUSERName,GETDATE(),'{3}',''
  1500. from ICSWareHouseLotInfo
  1501. where LotNO='{1}' AND WorkPoint='{3}'";
  1502. sql = string.Format(sql, lotstr, LotNo, Quantity, WorkPoint);
  1503. cmd.CommandText = sql;
  1504. result = cmd.ExecuteNonQuery();
  1505. if (result <= 0)
  1506. {
  1507. throw new Exception(language.GetNameByCode("WMSAPIInfo196"));//条码分批后库存表存入失败!
  1508. }
  1509. //插入条码单据表
  1510. sql = @"INSERT INTO ICSInventoryLotDetail(LotNo,TransCode,TransSequence,MUSER,MUSERName,MTIME,WorkPoint)
  1511. SELECT '{3}',b.TransCode,b.TransSequence,f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint
  1512. FROM ICSInventoryLot a
  1513. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  1514. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  1515. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  1516. sql = string.Format(sql, LotNo, WorkPoint, User, lotstr);
  1517. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  1518. {
  1519. throw new Exception(language.GetNameByCode("WMSAPIInfo174"));//"条码单据表写入失败!");
  1520. }
  1521. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  1522. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  1523. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  1524. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  1525. MTIME,WorkPoint,EATTRIBUTE1,LogID)
  1526. SELECT NEWID(),'{3}','{4}','{5}','{10}' ,a.InvCode ,
  1527. c.WarehouseCode,c.LocationCode,'','','{6}',
  1528. '','0','{7}','{8}','0','',
  1529. '','','',f.F_Account ,f.F_RealName ,
  1530. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  1531. FROM ICSInventoryLot a
  1532. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  1533. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  1534. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  1535. ";
  1536. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID, lotstr);
  1537. cmd.CommandText = sql;
  1538. result = cmd.ExecuteNonQuery();
  1539. if (result <= 0)
  1540. {
  1541. throw new Exception(language.GetNameByCode("WMSAPIInfo197"));//条码分批后库存日志表存入失败!
  1542. }
  1543. if (PrintEnable.Equals("True")&& DisPrintEnable.Equals("True"))
  1544. {
  1545. 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
  1546. from ICSWareHouseLotInfolog A
  1547. left join ICSInventoryLot B on A.LotNO=B.LotNO and a.WorkPoint=b.WorkPoint
  1548. left join ICSWareHouseLotInfo C ON A.LotNO=C.LotNO and a.WorkPoint=c.WorkPoint
  1549. left join ICSInventory D on b.INVCODE=d.INVCODE and b.WorkPoint=d.WorkPoint
  1550. where A.lotno ='{0}' and a.workpoint='{1}' and a.BusinessCode='{2}'
  1551. ";
  1552. sql = string.Format(sql, lotstr, WorkPoint,BusinessCode);
  1553. dtLotno = DBHelper.SQlReturnData(sql, cmd);
  1554. lstDt=dtLotno;
  1555. }
  1556. ///添加日志
  1557. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  1558. BEGIN
  1559. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  1560. RETURN
  1561. END
  1562. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  1563. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  1564. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  1565. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  1566. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  1567. SELECT NEWID(),'{3}','{4}','{5}',a.LotNo ,a.InvCode ,
  1568. c.WarehouseCode,c.LocationCode,'','',c.Quantity,
  1569. '','0','{7}','32','0','',
  1570. '','','',f.F_Account ,f.F_RealName ,
  1571. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  1572. FROM ICSInventoryLot a
  1573. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  1574. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  1575. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  1576. ";
  1577. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID);
  1578. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  1579. {
  1580. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  1581. }
  1582. #endregion
  1583. }
  1584. else
  1585. {
  1586. NewBarCodeList.Add(LotNo);
  1587. ///添加日志
  1588. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  1589. BEGIN
  1590. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  1591. RETURN
  1592. END
  1593. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  1594. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  1595. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  1596. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  1597. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  1598. SELECT NEWID(),'{3}','{4}','{5}',a.LotNo ,a.InvCode ,
  1599. c.WarehouseCode,c.LocationCode,'','','{6}',
  1600. '','0','{7}','{8}','0','',
  1601. '','','',f.F_Account ,f.F_RealName ,
  1602. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  1603. FROM ICSInventoryLot a
  1604. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  1605. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  1606. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  1607. ";
  1608. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID);
  1609. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  1610. {
  1611. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  1612. }
  1613. ZLtable = ICSControlModeService.GetZL();
  1614. if (ZLtable == null)
  1615. {
  1616. throw new Exception(language.GetNameByCode("WMSAPIInfo471"));
  1617. }
  1618. for (int i = 0; i < ZLtable.Rows.Count; i++)
  1619. {
  1620. string zlTransCode = ZLtable.Rows[i]["BusinessCode"].ToString();
  1621. string Enable = ZLtable.Rows[i]["Enable"].ToString();
  1622. if (zlTransCode.Equals(BusinessCode))
  1623. {
  1624. if (Enable.Equals("True"))
  1625. {
  1626. ///更新日志
  1627. sql = @"
  1628. IF NOT EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfoLog a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' and transtype='15')
  1629. BEGIN
  1630. RAISERROR('" + language.GetNameByCode("WMSAPIInfo472") + @"',16,1);
  1631. RETURN
  1632. END
  1633. UPDATE ICSWareHouseLotInfoLog SET EATTRIBUTE2='1' WHERE LotNo='{0}' AND WorkPoint='{1}' and transtype='15'
  1634. ";
  1635. sql = string.Format(sql, LotNo, WorkPoint, LogID);
  1636. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  1637. {
  1638. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"占料标识更新失败!");
  1639. }
  1640. ///更新库存
  1641. sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}',LockQuantity=ISNULL(LockQuantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  1642. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity-LockQuantity<0)
  1643. BEGIN
  1644. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  1645. RETURN
  1646. END";
  1647. sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  1648. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  1649. {
  1650. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  1651. }
  1652. }
  1653. else
  1654. {
  1655. ///更新库存
  1656. sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  1657. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity-LockQuantity<0)
  1658. BEGIN
  1659. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  1660. RETURN
  1661. END";
  1662. sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  1663. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  1664. {
  1665. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  1666. }
  1667. }
  1668. }
  1669. }
  1670. /////更新库存
  1671. //sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  1672. // IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity<0)
  1673. // BEGIN
  1674. // RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  1675. // RETURN
  1676. // END";
  1677. //sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  1678. //if (!DBHelper.ExecuteNonQuery(sql, cmd))
  1679. //{
  1680. // throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  1681. //}
  1682. }
  1683. }
  1684. catch (Exception)
  1685. {
  1686. throw;
  1687. }
  1688. return lstDt;
  1689. }
  1690. /// <summary>
  1691. /// 减少库存(奥美专用)
  1692. /// </summary>
  1693. /// <param name="Identification"></param>
  1694. /// <param name="TransCode"></param>
  1695. /// <param name="TransSequence"></param>
  1696. /// <param name="LotNo"></param>
  1697. /// <param name="Quantity"></param>
  1698. /// <param name="User"></param>
  1699. /// <param name="WorkPoint"></param>
  1700. /// <param name="TransType"></param>
  1701. /// <param name="BusinessCode"></param>
  1702. /// <param name="cmd"></param>
  1703. public static DataTable AMWareHouseLotInfoDown(string Identification, string TransCode, string TransSequence, string LotNo, string Quantity, string User,
  1704. string WorkPoint, string TransType, string BusinessCode, SqlCommand cmd, Dictionary<string, string> language, string LogID, string MergeID = "")
  1705. {
  1706. decimal LotQTYYY = 0;
  1707. decimal LotQTY = 0;
  1708. string LotEnable = "";
  1709. string chekEnable = "";
  1710. string DisPrintEnable = "";
  1711. string PrintEnable = "";
  1712. string sql = "";
  1713. string lotstr = "";
  1714. int result = 0;
  1715. List<string> NewBarCodeList = new List<string>();
  1716. DataTable dtLotno = new DataTable();
  1717. DataTable lstDt = new DataTable();
  1718. DataTable ZLtable = new DataTable();
  1719. try
  1720. {
  1721. string amount = "";
  1722. //string sqql = @"select a.Amount FROM ICSInventoryLot a
  1723. // WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  1724. //sqql = string.Format(sqql, LotNo, WorkPoint);
  1725. //DataTable dtaa = DBHelper.SQlReturnData(sqql, cmd);
  1726. //amount = dtaa.Rows[0]["Amount"].ToString();
  1727. //string chekksql = @"select c.EATTRIBUTE1 FROM ICSMOPick a
  1728. // INNER JOIN ICSMO b ON a.MODetailID=b.MODetailID AND a.WorkPoint=b.WorkPoint
  1729. // INNER JOIN ICSInventory c on a.InvCode=c.InvCode and a.WorkPoint=c.WorkPoint
  1730. // WHERE b.MOCode='{0}' AND b.Sequence+'~'+a.Sequence='{3}' AND a.WorkPoint='{1}' and c.AmountEnable='1'";
  1731. //chekksql = string.Format(chekksql, TransCode, WorkPoint, Quantity, TransSequence);
  1732. //DataTable dta = DBHelper.SQlReturnData(chekksql, cmd);
  1733. //if (dta.Rows.Count > 0)
  1734. //{
  1735. // Quantity = (decimal.Parse(Quantity) * decimal.Parse(dta.Rows[0]["EATTRIBUTE1"].ToString())).ToString();
  1736. //}
  1737. //检验是否分批
  1738. sql = @"SELECT b.LotEnable,b.PrintEnable FROM ICSInventoryLot a
  1739. LEFT JOIN ICSInventory b ON a.InvCode=b.InvCode AND a.WorkPoint=b.WorkPoint
  1740. where a.LotNo='{0}' and a.WorkPoint='{1}'
  1741. ";
  1742. sql = string.Format(sql, LotNo, WorkPoint);
  1743. DataTable dt = DBHelper.SQlReturnData(sql, cmd);
  1744. if (dt.Rows.Count == 0)
  1745. {
  1746. throw new Exception(language.GetNameByCode("WMSAPIInfo369"));
  1747. }
  1748. else
  1749. {
  1750. LotEnable = dt.Rows[0]["LotEnable"].ToString();
  1751. PrintEnable = dt.Rows[0]["PrintEnable"].ToString();
  1752. }
  1753. 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
  1754. from Sys_SRM_Items a
  1755. left join Sys_SRM_ItemsDetail b on a.F_Id=b.F_ItemId
  1756. where a.F_EnCode='TransBatch' and b.F_ItemCode='{0}' )
  1757. BEGIN
  1758. RAISERROR('" + language.GetNameByCode("WMSAPIInfo470") + @"',16,1);
  1759. RETURN
  1760. END
  1761. select b.F_ItemCode as Code ,b.F_ItemName as Name,b.F_EnabledMark AS Enable ,b.F_IsDefault AS DisPrintEnable
  1762. from Sys_SRM_Items a
  1763. left join Sys_SRM_ItemsDetail b on a.F_Id=b.F_ItemId
  1764. where a.F_EnCode='TransBatch' and b.F_ItemCode='{0}'
  1765. ";
  1766. cheksql = string.Format(cheksql, BusinessCode);
  1767. DataTable chekdt = DBHelper.SQlReturnData(cheksql, cmd);
  1768. if (chekdt.Rows.Count == 0)
  1769. {
  1770. throw new Exception(language.GetNameByCode("WMSAPIInfo369"));
  1771. }
  1772. else
  1773. {
  1774. chekEnable = chekdt.Rows[0]["Enable"].ToString();
  1775. DisPrintEnable = chekdt.Rows[0]["DisPrintEnable"].ToString();
  1776. }
  1777. sql = @"select Quantity from ICSWareHouseLotInfo
  1778. where LotNO='{0}' AND WorkPoint='{1}'";
  1779. sql = string.Format(sql, LotNo, WorkPoint);
  1780. DataTable dtt = DBHelper.SQlReturnData(sql, cmd);
  1781. LotQTYYY = Convert.ToDecimal(dtt.Rows[0]["Quantity"]);
  1782. LotQTY = Convert.ToDecimal(Quantity);
  1783. if (!LotEnable.Equals("False") && !chekEnable.Equals("False") && LotQTYYY - LotQTY > 0)
  1784. {
  1785. ZLtable = ICSControlModeService.GetZL();
  1786. if (ZLtable == null)
  1787. {
  1788. throw new Exception(language.GetNameByCode("WMSAPIInfo471"));
  1789. }
  1790. for (int i = 0; i < ZLtable.Rows.Count; i++)
  1791. {
  1792. string zlName = ZLtable.Rows[i]["Name"].ToString();
  1793. string zlTransCode = ZLtable.Rows[i]["BusinessCode"].ToString();
  1794. string Enable = ZLtable.Rows[i]["Enable"].ToString();
  1795. if (zlTransCode.Equals(BusinessCode))
  1796. {
  1797. if (Enable.Equals("True"))
  1798. {
  1799. ///更新日志
  1800. sql = @"
  1801. IF NOT EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfoLog a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' and transtype='15')
  1802. BEGIN
  1803. RAISERROR('" + language.GetNameByCode("WMSAPIInfo472") + @"',16,1);
  1804. RETURN
  1805. END
  1806. UPDATE ICSWareHouseLotInfoLog SET EATTRIBUTE2='1' WHERE LotNo='{0}' AND WorkPoint='{1}' and transtype='15'
  1807. ";
  1808. sql = string.Format(sql, LotNo, WorkPoint, LogID);
  1809. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  1810. {
  1811. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"占料标识更新失败!");
  1812. }
  1813. ///更新库存
  1814. sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}',LockQuantity=ISNULL(LockQuantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  1815. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity-LockQuantity<0)
  1816. BEGIN
  1817. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  1818. RETURN
  1819. END";
  1820. sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  1821. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  1822. {
  1823. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  1824. }
  1825. }
  1826. else
  1827. {
  1828. ///更新库存
  1829. sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-ISNULL(LockQuantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  1830. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity-LockQuantity<0)
  1831. BEGIN
  1832. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  1833. RETURN
  1834. END";
  1835. sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  1836. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  1837. {
  1838. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  1839. }
  1840. }
  1841. }
  1842. }
  1843. ///分批前添加日志
  1844. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  1845. BEGIN
  1846. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  1847. RETURN
  1848. END
  1849. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  1850. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  1851. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  1852. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  1853. MTIME,WorkPoint,EATTRIBUTE1)
  1854. SELECT NEWID(),'{3}','{7}','{8}',a.LotNo ,a.InvCode ,
  1855. c.WarehouseCode,c.LocationCode,'','',c.Quantity+{6},
  1856. '','0','{4}','31','0','',
  1857. '','','',f.F_Account ,f.F_RealName ,
  1858. SYSDATETIME() ,a.WorkPoint ,''
  1859. FROM ICSInventoryLot a
  1860. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  1861. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  1862. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  1863. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  1864. ";
  1865. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransType, BusinessCode, Quantity, TransCode, TransSequence);
  1866. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  1867. {
  1868. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  1869. }
  1870. #region 获取分批后的条码(lotstr)
  1871. sql = @"SELECT TOP 1 LotNO FROM ICSInventoryLot WHERE EATTRIBUTE1='{0}' AND WorkPoint='{1}'
  1872. ORDER BY CAST(SUBSTRING(LotNO, (LEN(LotNO)-CHARINDEX('-',REVERSE(LotNO))+1)+1,CHARINDEX('-',REVERSE(LotNO))-1) AS INT) DESC";
  1873. sql = string.Format(sql, LotNo, WorkPoint);
  1874. dt = DBHelper.SQlReturnData(sql, cmd);
  1875. if (dt.Rows.Count == 0)
  1876. {
  1877. lotstr = LotNo + "-" + 1;
  1878. }
  1879. else
  1880. {
  1881. lotstr = LotNo + "-" + (Convert.ToInt32(dt.Rows[0]["LotNO"].ToString().Split('-')[dt.Rows[0]["LotNO"].ToString().Split('-').Length - 1]) + 1).ToString();
  1882. }
  1883. NewBarCodeList.Add(lotstr);//将分批后新条码添加到新集合
  1884. #endregion
  1885. #region 将分批后的条码记录插入条码表,库存表及日志表并将原条码库存数量清零
  1886. sql = @"INSERT INTO ICSInventoryLot(ID,LotNo,InvCode,ProductDate,ExpirationDate,
  1887. Quantity,Amount,ExtensionID,Type,PrintTimes,
  1888. LastPrintUser,LastPrintTime,MUSER,MUSERName,MTIME,
  1889. WorkPoint,EATTRIBUTE1)
  1890. SELECT TOP 1 NEWID(),'{0}',a.InvCode,a.ProductDate,a.ExpirationDate,
  1891. '{2}',a.Amount/a.Quantity*Quantity,a.ExtensionID,a.Type,a.PrintTimes,
  1892. a.LastPrintUser,a.LastPrintTime,a.MUSER ,a.MUSERName ,GETDATE(),
  1893. a.WorkPoint ,'{1}'
  1894. From ICSInventoryLot a
  1895. where a.LotNo='{1}' and a.WorkPoint='{3}'";
  1896. sql = string.Format(sql, lotstr, LotNo, Quantity, WorkPoint);
  1897. cmd.CommandText = sql;
  1898. result = cmd.ExecuteNonQuery();
  1899. if (result <= 0)
  1900. {
  1901. throw new Exception(language.GetNameByCode("WMSAPIInfo195"));//条码分批后条码表存入失败!
  1902. }
  1903. sql = @"INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  1904. select NEWID(),'{0}',WarehouseCode,LocationCode,InvCode,'0',InDate,LockQuantity
  1905. ,MUSER,MUSERName,GETDATE(),'{3}',''
  1906. from ICSWareHouseLotInfo
  1907. where LotNO='{1}' AND WorkPoint='{3}'";
  1908. sql = string.Format(sql, lotstr, LotNo, Quantity, WorkPoint);
  1909. cmd.CommandText = sql;
  1910. result = cmd.ExecuteNonQuery();
  1911. if (result <= 0)
  1912. {
  1913. throw new Exception(language.GetNameByCode("WMSAPIInfo196"));//条码分批后库存表存入失败!
  1914. }
  1915. //插入条码单据表
  1916. sql = @"INSERT INTO ICSInventoryLotDetail(LotNo,TransCode,TransSequence,MUSER,MUSERName,MTIME,WorkPoint)
  1917. SELECT '{3}',b.TransCode,b.TransSequence,f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint
  1918. FROM ICSInventoryLot a
  1919. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  1920. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  1921. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  1922. sql = string.Format(sql, LotNo, WorkPoint, User, lotstr);
  1923. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  1924. {
  1925. throw new Exception(language.GetNameByCode("WMSAPIInfo174"));//"条码单据表写入失败!");
  1926. }
  1927. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  1928. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  1929. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  1930. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  1931. MTIME,WorkPoint,EATTRIBUTE1,LogID)
  1932. SELECT NEWID(),'{3}','{4}','{5}','{10}' ,a.InvCode ,
  1933. c.WarehouseCode,c.LocationCode,'','','{6}',
  1934. '','0','{7}','{8}','0','',
  1935. '','','',f.F_Account ,f.F_RealName ,
  1936. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  1937. FROM ICSInventoryLot a
  1938. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  1939. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  1940. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  1941. ";
  1942. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID, lotstr);
  1943. cmd.CommandText = sql;
  1944. result = cmd.ExecuteNonQuery();
  1945. if (result <= 0)
  1946. {
  1947. throw new Exception(language.GetNameByCode("WMSAPIInfo197"));//条码分批后库存日志表存入失败!
  1948. }
  1949. if (PrintEnable.Equals("True") && DisPrintEnable.Equals("True"))
  1950. {
  1951. 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
  1952. from ICSWareHouseLotInfolog A
  1953. left join ICSInventoryLot B on A.LotNO=B.LotNO and a.WorkPoint=b.WorkPoint
  1954. left join ICSWareHouseLotInfo C ON A.LotNO=C.LotNO and a.WorkPoint=c.WorkPoint
  1955. left join ICSInventory D on b.INVCODE=d.INVCODE and b.WorkPoint=d.WorkPoint
  1956. where A.lotno ='{0}' and a.workpoint='{1}' and a.BusinessCode='{2}'
  1957. ";
  1958. sql = string.Format(sql, lotstr, WorkPoint, BusinessCode);
  1959. dtLotno = DBHelper.SQlReturnData(sql, cmd);
  1960. lstDt = dtLotno;
  1961. }
  1962. ///添加日志
  1963. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  1964. BEGIN
  1965. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  1966. RETURN
  1967. END
  1968. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  1969. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  1970. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  1971. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  1972. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  1973. SELECT NEWID(),'{3}','{4}','{5}',a.LotNo ,a.InvCode ,
  1974. c.WarehouseCode,c.LocationCode,'','',c.Quantity,
  1975. '','0','{7}','32','0','',
  1976. '','','',f.F_Account ,f.F_RealName ,
  1977. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  1978. FROM ICSInventoryLot a
  1979. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  1980. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  1981. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  1982. ";
  1983. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID);
  1984. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  1985. {
  1986. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  1987. }
  1988. #endregion
  1989. }
  1990. else
  1991. {
  1992. NewBarCodeList.Add(LotNo);
  1993. ///添加日志
  1994. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  1995. BEGIN
  1996. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  1997. RETURN
  1998. END
  1999. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  2000. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  2001. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  2002. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  2003. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  2004. SELECT NEWID(),'{3}','{4}','{5}',a.LotNo ,a.InvCode ,
  2005. c.WarehouseCode,c.LocationCode,'','','{6}',
  2006. '','0','{7}','{8}','0','',
  2007. '','','',f.F_Account ,f.F_RealName ,
  2008. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  2009. FROM ICSInventoryLot a
  2010. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  2011. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  2012. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  2013. ";
  2014. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID);
  2015. log.Debug("出库增加日志:" + sql);
  2016. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2017. {
  2018. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  2019. }
  2020. ZLtable = ICSControlModeService.GetZL();
  2021. if (ZLtable == null)
  2022. {
  2023. throw new Exception(language.GetNameByCode("WMSAPIInfo471"));
  2024. }
  2025. for (int i = 0; i < ZLtable.Rows.Count; i++)
  2026. {
  2027. string zlTransCode = ZLtable.Rows[i]["BusinessCode"].ToString();
  2028. string Enable = ZLtable.Rows[i]["Enable"].ToString();
  2029. if (zlTransCode.Equals(BusinessCode))
  2030. {
  2031. if (Enable.Equals("True"))
  2032. {
  2033. ///更新日志
  2034. sql = @"
  2035. IF NOT EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfoLog a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' and transtype='15')
  2036. BEGIN
  2037. RAISERROR('" + language.GetNameByCode("WMSAPIInfo472") + @"',16,1);
  2038. RETURN
  2039. END
  2040. UPDATE ICSWareHouseLotInfoLog SET EATTRIBUTE2='1' WHERE LotNo='{0}' AND WorkPoint='{1}' and transtype='15'
  2041. ";
  2042. sql = string.Format(sql, LotNo, WorkPoint, LogID);
  2043. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2044. {
  2045. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"占料标识更新失败!");
  2046. }
  2047. ///更新库存
  2048. sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}',LockQuantity=ISNULL(LockQuantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  2049. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity-LockQuantity<0)
  2050. BEGIN
  2051. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  2052. RETURN
  2053. END";
  2054. sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  2055. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2056. {
  2057. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  2058. }
  2059. }
  2060. else
  2061. {
  2062. ///更新库存
  2063. sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  2064. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity-LockQuantity<0)
  2065. BEGIN
  2066. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  2067. RETURN
  2068. END";
  2069. sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  2070. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2071. {
  2072. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  2073. }
  2074. }
  2075. }
  2076. }
  2077. /////更新库存
  2078. //sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  2079. // IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity<0)
  2080. // BEGIN
  2081. // RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  2082. // RETURN
  2083. // END";
  2084. //sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  2085. //if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2086. //{
  2087. // throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  2088. //}
  2089. }
  2090. }
  2091. catch (Exception)
  2092. {
  2093. throw;
  2094. }
  2095. return lstDt;
  2096. }
  2097. /// <summary>
  2098. /// 无源头调拨
  2099. /// </summary>
  2100. /// <param name="LocationCode"></param>
  2101. /// <param name="LotNo"></param>
  2102. /// <param name="Quantity"></param>
  2103. /// <param name="User"></param>
  2104. /// <param name="WorkPoint"></param>
  2105. /// <param name="TransType"></param>
  2106. /// <param name="BusinessCode"></param>
  2107. /// <param name="cmd"></param>
  2108. public static DataTable WareHouseLotInfoNoTransfer(string Identification, string WarehouseCode, string LocationCode,
  2109. string LotNo, string Quantity, string User, string WorkPoint, string TransType, string BusinessCode, SqlCommand cmd, Dictionary<string, string> language, string MergeID)
  2110. {
  2111. decimal LotQTYYY = 0;
  2112. decimal LotQTY = 0;
  2113. String LotEnable = "";
  2114. String PrintEnable = "";
  2115. String ToWareHouseCode = "";
  2116. String ToLocationCode = "";
  2117. string lotstr = "";
  2118. int result = 0;
  2119. DataTable dtLotno = new DataTable();
  2120. DataTable lstDt = new DataTable();
  2121. List<string> NewBarCodeList = new List<string>();
  2122. try
  2123. {
  2124. //检验是否分批
  2125. string sql = @"SELECT b.LotEnable,b.PrintEnable FROM ICSInventoryLot a
  2126. LEFT JOIN ICSInventory b ON a.InvCode=b.InvCode AND a.WorkPoint=b.WorkPoint
  2127. where a.LotNo='{0}' and a.WorkPoint='{1}'
  2128. ";
  2129. sql = string.Format(sql, LotNo, WorkPoint);
  2130. DataTable dt = DBHelper.SQlReturnData(sql, cmd);
  2131. if (dt.Rows.Count == 0)
  2132. {
  2133. throw new Exception(language.GetNameByCode("WMSAPIInfo369"));
  2134. }
  2135. else
  2136. {
  2137. LotEnable = dt.Rows[0]["LotEnable"].ToString();
  2138. PrintEnable = dt.Rows[0]["PrintEnable"].ToString();
  2139. }
  2140. sql = @"select Quantity from ICSWareHouseLotInfo
  2141. where LotNO='{0}' AND WorkPoint='{1}'";
  2142. sql = string.Format(sql, LotNo, WorkPoint);
  2143. DataTable dtt = DBHelper.SQlReturnData(sql, cmd);
  2144. LotQTYYY = Convert.ToDecimal(dtt.Rows[0]["Quantity"]);
  2145. LotQTY = Convert.ToDecimal(Quantity);
  2146. if (!LotEnable.Equals("False") && LotQTYYY - LotQTY > 0)
  2147. {
  2148. ///更新库存
  2149. sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  2150. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity<0)
  2151. BEGIN
  2152. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  2153. RETURN
  2154. END";
  2155. sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  2156. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2157. {
  2158. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  2159. }
  2160. ///分批前添加日志
  2161. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  2162. BEGIN
  2163. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  2164. RETURN
  2165. END
  2166. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  2167. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  2168. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  2169. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  2170. MTIME,WorkPoint,EATTRIBUTE1)
  2171. SELECT NEWID(),'{3}','','',a.LotNo ,a.InvCode ,
  2172. c.WarehouseCode,c.LocationCode,'','',c.Quantity+{6},
  2173. '','0','{4}','31','0','',
  2174. '','','',f.F_Account ,f.F_RealName ,
  2175. SYSDATETIME() ,a.WorkPoint ,''
  2176. FROM ICSInventoryLot a
  2177. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  2178. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  2179. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  2180. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  2181. ";
  2182. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransType, BusinessCode, Quantity);
  2183. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2184. {
  2185. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  2186. }
  2187. #region 获取分批后的条码(lotstr)
  2188. sql = @"SELECT TOP 1 LotNO FROM ICSInventoryLot WHERE EATTRIBUTE1='{0}' AND WorkPoint='{1}'
  2189. ORDER BY CAST(SUBSTRING(LotNO, (LEN(LotNO)-CHARINDEX('-',REVERSE(LotNO))+1)+1,CHARINDEX('-',REVERSE(LotNO))-1) AS INT) DESC";
  2190. sql = string.Format(sql, LotNo, WorkPoint);
  2191. dt = DBHelper.SQlReturnData(sql, cmd);
  2192. if (dt.Rows.Count == 0)
  2193. {
  2194. lotstr = LotNo + "-" + 1;
  2195. }
  2196. else
  2197. {
  2198. lotstr = LotNo + "-" + (Convert.ToInt32(dt.Rows[0]["LotNO"].ToString().Split('-')[dt.Rows[0]["LotNO"].ToString().Split('-').Length - 1]) + 1).ToString();
  2199. }
  2200. NewBarCodeList.Add(lotstr);//将分批后新条码添加到新集合
  2201. #endregion
  2202. #region 将分批后的条码记录插入条码表,库存表及日志表并将原条码库存数量清零
  2203. sql = @"INSERT INTO ICSInventoryLot(ID,LotNo,InvCode,ProductDate,ExpirationDate,
  2204. Quantity,Amount,ExtensionID,Type,PrintTimes,
  2205. LastPrintUser,LastPrintTime,MUSER,MUSERName,MTIME,
  2206. WorkPoint,EATTRIBUTE1)
  2207. SELECT TOP 1 NEWID(),'{0}',a.InvCode,a.ProductDate,a.ExpirationDate,
  2208. '{2}',a.Amount,a.ExtensionID,a.Type,a.PrintTimes,
  2209. a.LastPrintUser,a.LastPrintTime,a.MUSER ,a.MUSERName ,GETDATE(),
  2210. a.WorkPoint ,'{1}'
  2211. From ICSInventoryLot a
  2212. where a.LotNo='{1}' and a.WorkPoint='{3}'";
  2213. sql = string.Format(sql, lotstr, LotNo, Quantity, WorkPoint);
  2214. cmd.CommandText = sql;
  2215. result = cmd.ExecuteNonQuery();
  2216. if (result <= 0)
  2217. {
  2218. throw new Exception(language.GetNameByCode("WMSAPIInfo195"));//条码分批后条码表存入失败!
  2219. }
  2220. #endregion
  2221. sql = @"INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  2222. select NEWID(),'{0}','{4}','{5}',InvCode,'{2}',InDate,LockQuantity
  2223. ,MUSER,MUSERName,GETDATE(),'{3}',''
  2224. from ICSWareHouseLotInfo
  2225. where LotNO='{1}' AND WorkPoint='{3}'";
  2226. sql = string.Format(sql, lotstr, LotNo, Quantity, WorkPoint, WarehouseCode, LocationCode);
  2227. cmd.CommandText = sql;
  2228. result = cmd.ExecuteNonQuery();
  2229. if (result <= 0)
  2230. {
  2231. throw new Exception(language.GetNameByCode("WMSAPIInfo196"));//条码分批后库存表存入失败!
  2232. }
  2233. //插入条码单据表
  2234. sql = @"INSERT INTO ICSInventoryLotDetail(LotNo,TransCode,TransSequence,MUSER,MUSERName,MTIME,WorkPoint)
  2235. SELECT '{3}',b.TransCode,b.TransSequence,f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint
  2236. FROM ICSInventoryLot a
  2237. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  2238. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  2239. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  2240. sql = string.Format(sql, LotNo, WorkPoint, User, lotstr);
  2241. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2242. {
  2243. throw new Exception(language.GetNameByCode("WMSAPIInfo174"));//"条码单据表写入失败!");
  2244. }
  2245. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  2246. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  2247. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  2248. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  2249. MTIME,WorkPoint,EATTRIBUTE1,LogID)
  2250. SELECT NEWID(),'{3}','','','{8}' ,a.InvCode ,
  2251. c.WarehouseCode,c.LocationCode,'{9}','{10}','{4}',
  2252. '','0','{5}','{6}','0','',
  2253. '','','',f.F_Account ,f.F_RealName ,
  2254. SYSDATETIME() ,a.WorkPoint ,'','{7}'
  2255. FROM ICSInventoryLot a
  2256. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  2257. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  2258. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  2259. ";
  2260. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, Quantity, TransType, BusinessCode, MergeID, lotstr, WarehouseCode, LocationCode);
  2261. cmd.CommandText = sql;
  2262. result = cmd.ExecuteNonQuery();
  2263. if (result <= 0)
  2264. {
  2265. throw new Exception(language.GetNameByCode("WMSAPIInfo197"));//条码分批后库存日志表存入失败!
  2266. }
  2267. ///添加日志
  2268. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  2269. BEGIN
  2270. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  2271. RETURN
  2272. END
  2273. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  2274. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  2275. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  2276. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  2277. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  2278. SELECT NEWID(),'{3}','','',a.LotNo ,a.InvCode ,
  2279. c.WarehouseCode,c.LocationCode,'','',c.Quantity,
  2280. '','0','{5}','32','0','',
  2281. '','','',f.F_Account ,f.F_RealName ,
  2282. SYSDATETIME() ,a.WorkPoint ,'','{7}'
  2283. FROM ICSInventoryLot a
  2284. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  2285. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  2286. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  2287. ";
  2288. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, Quantity, TransType, BusinessCode, MergeID);
  2289. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2290. {
  2291. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  2292. }
  2293. if (PrintEnable.Equals("True"))
  2294. {
  2295. 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
  2296. from ICSWareHouseLotInfolog A
  2297. left join ICSInventoryLot B on A.LotNO=B.LotNO and a.WorkPoint=b.WorkPoint
  2298. left join ICSWareHouseLotInfo C ON A.LotNO=C.LotNO and a.WorkPoint=c.WorkPoint
  2299. left join ICSInventory D on b.INVCODE=d.INVCODE and b.WorkPoint=d.WorkPoint
  2300. where a.BusinessCode ='105'
  2301. and A.lotno like'{0}%' and a.workpoint='{1}'
  2302. ";
  2303. sql = string.Format(sql, LotNo, WorkPoint);
  2304. dtLotno = DBHelper.SQlReturnData(sql, cmd);
  2305. lstDt = dtLotno;
  2306. }
  2307. }
  2308. else
  2309. {
  2310. ///添加日志
  2311. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  2312. BEGIN
  2313. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  2314. RETURN
  2315. END
  2316. IF EXISTS(SELECT id FROM ICSWareHouseLotInfo WHERE WarehouseCode='{7}' AND LocationCode='{8}' AND WorkPoint='{1}' AND LotNo = '{0}')
  2317. BEGIN
  2318. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo355")) + @"',16,1);
  2319. RETURN
  2320. END
  2321. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  2322. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  2323. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  2324. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  2325. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  2326. SELECT NEWID(),'{3}','','',a.LotNo ,a.InvCode ,
  2327. c.WarehouseCode,c.LocationCode,'{7}','{8}',{4},
  2328. '','0','{5}','{6}','0','',
  2329. '','','',f.F_Account ,f.F_RealName ,
  2330. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  2331. FROM ICSInventoryLot a
  2332. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  2333. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  2334. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  2335. ";
  2336. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, Quantity, TransType, BusinessCode, WarehouseCode, LocationCode, MergeID);
  2337. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2338. {
  2339. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  2340. }
  2341. ///更新库存
  2342. sql = @"UPDATE ICSWareHouseLotInfo SET WareHouseCode='{2}',LocationCode='{3}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  2343. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity<0)
  2344. BEGIN
  2345. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  2346. RETURN
  2347. END";
  2348. sql = string.Format(sql, LotNo, WorkPoint, WarehouseCode, LocationCode);
  2349. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2350. {
  2351. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  2352. }
  2353. }
  2354. }
  2355. catch (Exception)
  2356. {
  2357. throw;
  2358. }
  2359. return lstDt;
  2360. }
  2361. /// <summary>
  2362. /// 修改库存
  2363. /// </summary>
  2364. /// <param name="Identification"></param>
  2365. /// <param name="TransCode"></param>
  2366. /// <param name="TransSequence"></param>
  2367. /// <param name="LotNo"></param>
  2368. /// <param name="Quantity"></param>
  2369. /// <param name="User"></param>
  2370. /// <param name="WorkPoint"></param>
  2371. /// <param name="TransType"></param>
  2372. /// <param name="cmd"></param>
  2373. public static void WareHouseLotInfoUpdate(string Identification, string TransCode, string TransSequence, string LotNo, string Quantity, string User,
  2374. string WorkPoint, string TransType,string CheckKind, SqlCommand cmd, Dictionary<string, string> language)
  2375. {
  2376. try
  2377. {
  2378. ///添加日志
  2379. string sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  2380. BEGIN
  2381. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  2382. RETURN
  2383. END
  2384. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  2385. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  2386. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  2387. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  2388. MTIME,WorkPoint,EATTRIBUTE1)
  2389. SELECT NEWID(),'{3}','{4}','{5}',a.LotNo ,a.InvCode ,
  2390. a.WarehouseCode,a.LocationCode,'','',a.Quantity,
  2391. '{8}','0','{6}','{7}','0','',
  2392. '','','',f.F_Account ,f.F_RealName ,
  2393. SYSDATETIME() ,a.WorkPoint ,''
  2394. FROM ICSWareHouseLotInfo a
  2395. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  2396. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  2397. ";
  2398. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, TransType, TransTypeEnum.LOTCheckBefore.GetDescription<DBValue>(), CheckKind);
  2399. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2400. {
  2401. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  2402. }
  2403. ///更新库存
  2404. sql = @"UPDATE ICSWareHouseLotInfo SET Quantity='{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'";
  2405. sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  2406. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2407. {
  2408. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  2409. }
  2410. ///添加日志
  2411. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  2412. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  2413. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  2414. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  2415. MTIME,WorkPoint,EATTRIBUTE1)
  2416. SELECT NEWID(),'{3}','{4}','{5}',a.LotNo ,a.InvCode ,
  2417. a.WarehouseCode,a.LocationCode,'','',a.Quantity,
  2418. '{8}','0','{6}','{7}','0','',
  2419. '','','',f.F_Account ,f.F_RealName ,
  2420. SYSDATETIME() ,a.WorkPoint ,''
  2421. FROM ICSWareHouseLotInfo a
  2422. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  2423. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  2424. ";
  2425. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, TransType, TransTypeEnum.LOTCheckAfter.GetDescription<DBValue>(), CheckKind);
  2426. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2427. {
  2428. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  2429. }
  2430. }
  2431. catch (Exception)
  2432. {
  2433. throw;
  2434. }
  2435. }
  2436. /// <summary>
  2437. /// 调拨
  2438. /// </summary>
  2439. /// <param name="LocationCode"></param>
  2440. /// <param name="LotNo"></param>
  2441. /// <param name="Quantity"></param>
  2442. /// <param name="User"></param>
  2443. /// <param name="WorkPoint"></param>
  2444. /// <param name="TransType"></param>
  2445. /// <param name="BusinessCode"></param>
  2446. /// <param name="cmd"></param>
  2447. public static DataTable WareHouseLotInfoTransfer(string Identification, string TransCode, string TransSequence, string WarehouseCode, string LocationCode,
  2448. string LotNo, string Quantity, string User, string WorkPoint, string TransType, string BusinessCode, SqlCommand cmd, Dictionary<string, string> language, string MergeID)
  2449. {
  2450. decimal LotQTYYY = 0;
  2451. decimal LotQTY = 0;
  2452. String LotEnable = "";
  2453. String PrintEnable = "";
  2454. string lotstr = "";
  2455. int result = 0;
  2456. DataTable dtLotno = new DataTable();
  2457. DataTable lstDt = new DataTable();
  2458. List<string> NewBarCodeList = new List<string>();
  2459. try
  2460. {
  2461. //检验是否分批
  2462. string sql = @"SELECT b.LotEnable,b.PrintEnable FROM ICSInventoryLot a
  2463. LEFT JOIN ICSInventory b ON a.InvCode=b.InvCode AND a.WorkPoint=b.WorkPoint
  2464. where a.LotNo='{0}' and a.WorkPoint='{1}'
  2465. ";
  2466. sql = string.Format(sql, LotNo, WorkPoint);
  2467. DataTable dt = DBHelper.SQlReturnData(sql, cmd);
  2468. if (dt.Rows.Count == 0)
  2469. {
  2470. throw new Exception(language.GetNameByCode("WMSAPIInfo369"));
  2471. }
  2472. else
  2473. {
  2474. LotEnable = dt.Rows[0]["LotEnable"].ToString();
  2475. PrintEnable = dt.Rows[0]["PrintEnable"].ToString();
  2476. }
  2477. sql = @"select Quantity from ICSWareHouseLotInfo
  2478. where LotNO='{0}' AND WorkPoint='{1}'";
  2479. sql = string.Format(sql, LotNo, WorkPoint);
  2480. DataTable dtt = DBHelper.SQlReturnData(sql, cmd);
  2481. LotQTYYY = Convert.ToDecimal(dtt.Rows[0]["Quantity"]);
  2482. LotQTY = Convert.ToDecimal(Quantity);
  2483. if (!LotEnable.Equals("False") && LotQTYYY - LotQTY > 0)//增加数量判断
  2484. {
  2485. ///更新库存
  2486. sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  2487. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity<0)
  2488. BEGIN
  2489. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  2490. RETURN
  2491. END";
  2492. sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  2493. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2494. {
  2495. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  2496. }
  2497. ///分批前添加日志
  2498. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  2499. BEGIN
  2500. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  2501. RETURN
  2502. END
  2503. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  2504. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  2505. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  2506. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  2507. MTIME,WorkPoint,EATTRIBUTE1)
  2508. SELECT NEWID(),'{3}','{7}','{8}',a.LotNo ,a.InvCode ,
  2509. c.WarehouseCode,c.LocationCode,'','',c.Quantity+{6},
  2510. '','0','{4}','31','0','',
  2511. '','','',f.F_Account ,f.F_RealName ,
  2512. SYSDATETIME() ,a.WorkPoint ,''
  2513. FROM ICSInventoryLot a
  2514. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  2515. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  2516. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  2517. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  2518. ";
  2519. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransType, BusinessCode, Quantity, TransCode, TransSequence);
  2520. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2521. {
  2522. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  2523. }
  2524. #region 获取分批后的条码(lotstr)
  2525. sql = @"SELECT TOP 1 LotNO FROM ICSInventoryLot WHERE EATTRIBUTE1='{0}' AND WorkPoint='{1}'
  2526. ORDER BY CAST(SUBSTRING(LotNO, (LEN(LotNO)-CHARINDEX('-',REVERSE(LotNO))+1)+1,CHARINDEX('-',REVERSE(LotNO))-1) AS INT) DESC";
  2527. sql = string.Format(sql, LotNo, WorkPoint);
  2528. dt = DBHelper.SQlReturnData(sql, cmd);
  2529. if (dt.Rows.Count == 0)
  2530. {
  2531. lotstr = LotNo + "-" + 1;
  2532. }
  2533. else
  2534. {
  2535. lotstr = LotNo + "-" + (Convert.ToInt32(dt.Rows[0]["LotNO"].ToString().Split('-')[dt.Rows[0]["LotNO"].ToString().Split('-').Length - 1]) + 1).ToString();
  2536. }
  2537. NewBarCodeList.Add(lotstr);//将分批后新条码添加到新集合
  2538. #endregion
  2539. #region 将分批后的条码记录插入条码表,库存表及日志表并将原条码库存数量清零
  2540. sql = @"INSERT INTO ICSInventoryLot(ID,LotNo,InvCode,ProductDate,ExpirationDate,
  2541. Quantity,Amount,ExtensionID,Type,PrintTimes,
  2542. LastPrintUser,LastPrintTime,MUSER,MUSERName,MTIME,
  2543. WorkPoint,EATTRIBUTE1)
  2544. SELECT TOP 1 NEWID(),'{0}',a.InvCode,a.ProductDate,a.ExpirationDate,
  2545. '{2}',a.Amount,a.ExtensionID,a.Type,a.PrintTimes,
  2546. a.LastPrintUser,a.LastPrintTime,a.MUSER ,a.MUSERName ,GETDATE(),
  2547. a.WorkPoint ,'{1}'
  2548. From ICSInventoryLot a
  2549. where a.LotNo='{1}' and a.WorkPoint='{3}'";
  2550. sql = string.Format(sql, lotstr, LotNo, Quantity, WorkPoint);
  2551. cmd.CommandText = sql;
  2552. result = cmd.ExecuteNonQuery();
  2553. if (result <= 0)
  2554. {
  2555. throw new Exception(language.GetNameByCode("WMSAPIInfo195"));//条码分批后条码表存入失败!
  2556. }
  2557. #endregion
  2558. sql = @"INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  2559. select NEWID(),'{0}','{4}','{5}',InvCode,'{2}',InDate,LockQuantity
  2560. ,MUSER,MUSERName,GETDATE(),'{3}',''
  2561. from ICSWareHouseLotInfo
  2562. where LotNO='{1}' AND WorkPoint='{3}'";
  2563. sql = string.Format(sql, lotstr, LotNo, Quantity, WorkPoint,WarehouseCode,LocationCode);
  2564. cmd.CommandText = sql;
  2565. result = cmd.ExecuteNonQuery();
  2566. if (result <= 0)
  2567. {
  2568. throw new Exception(language.GetNameByCode("WMSAPIInfo196"));//条码分批后库存表存入失败!
  2569. }
  2570. //插入条码单据表
  2571. sql = @"INSERT INTO ICSInventoryLotDetail(LotNo,TransCode,TransSequence,MUSER,MUSERName,MTIME,WorkPoint)
  2572. SELECT '{3}',b.TransCode,b.TransSequence,f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint
  2573. FROM ICSInventoryLot a
  2574. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  2575. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  2576. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  2577. sql = string.Format(sql, LotNo, WorkPoint, User, lotstr);
  2578. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2579. {
  2580. throw new Exception(language.GetNameByCode("WMSAPIInfo174"));//"条码单据表写入失败!");
  2581. }
  2582. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  2583. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  2584. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  2585. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  2586. MTIME,WorkPoint,EATTRIBUTE1,LogID)
  2587. SELECT NEWID(),'{3}','{4}','{5}','{10}' ,a.InvCode ,
  2588. c.WarehouseCode,c.LocationCode,'{11}','{12}','{6}',
  2589. '','0','{7}','{8}','0','',
  2590. '','','',f.F_Account ,f.F_RealName ,
  2591. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  2592. FROM ICSInventoryLot a
  2593. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  2594. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  2595. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  2596. ";
  2597. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID, lotstr, WarehouseCode, LocationCode);
  2598. cmd.CommandText = sql;
  2599. result = cmd.ExecuteNonQuery();
  2600. if (result <= 0)
  2601. {
  2602. throw new Exception(language.GetNameByCode("WMSAPIInfo197"));//条码分批后库存日志表存入失败!
  2603. }
  2604. ///添加日志
  2605. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  2606. BEGIN
  2607. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  2608. RETURN
  2609. END
  2610. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  2611. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  2612. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  2613. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  2614. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  2615. SELECT NEWID(),'{3}','{4}','{5}',a.LotNo ,a.InvCode ,
  2616. c.WarehouseCode,c.LocationCode,'','',c.Quantity,
  2617. '','0','{7}','32','0','',
  2618. '','','',f.F_Account ,f.F_RealName ,
  2619. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  2620. FROM ICSInventoryLot a
  2621. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  2622. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  2623. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  2624. ";
  2625. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID);
  2626. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2627. {
  2628. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  2629. }
  2630. if (PrintEnable.Equals("True"))
  2631. {
  2632. 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
  2633. from ICSWareHouseLotInfolog A
  2634. left join ICSInventoryLot B on A.LotNO=B.LotNO and a.WorkPoint=b.WorkPoint
  2635. left join ICSWareHouseLotInfo C ON A.LotNO=C.LotNO and a.WorkPoint=c.WorkPoint
  2636. left join ICSInventory D on b.INVCODE=d.INVCODE and b.WorkPoint=d.WorkPoint
  2637. where A.lotno ='{0}' and a.workpoint='{1}' and a.BusinessCode='{2}'
  2638. ";
  2639. sql = string.Format(sql, lotstr, WorkPoint, BusinessCode);
  2640. dtLotno = DBHelper.SQlReturnData(sql, cmd);
  2641. lstDt = dtLotno;
  2642. }
  2643. }
  2644. else
  2645. {
  2646. ///添加日志
  2647. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  2648. BEGIN
  2649. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  2650. RETURN
  2651. END
  2652. IF EXISTS(SELECT id FROM ICSWareHouseLotInfo WHERE WarehouseCode='{9}' AND LocationCode='{10}' AND WorkPoint='{1}' AND LotNo = '{0}')
  2653. BEGIN
  2654. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo355")) + @"',16,1);
  2655. RETURN
  2656. END
  2657. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  2658. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  2659. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  2660. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  2661. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  2662. SELECT NEWID(),'{3}','{4}','{5}',a.LotNo ,a.InvCode ,
  2663. c.WarehouseCode,c.LocationCode,'{9}','{10}',{6},
  2664. '','0','{7}','{8}','0','',
  2665. '','','',f.F_Account ,f.F_RealName ,
  2666. SYSDATETIME() ,a.WorkPoint ,'','{11}'
  2667. FROM ICSInventoryLot a
  2668. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  2669. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  2670. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  2671. ";
  2672. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, WarehouseCode, LocationCode, MergeID);
  2673. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2674. {
  2675. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  2676. }
  2677. ///更新库存
  2678. sql = @"UPDATE ICSWareHouseLotInfo SET WareHouseCode='{2}',LocationCode='{3}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  2679. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity<0)
  2680. BEGIN
  2681. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  2682. RETURN
  2683. END";
  2684. sql = string.Format(sql, LotNo, WorkPoint, WarehouseCode, LocationCode);
  2685. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2686. {
  2687. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  2688. }
  2689. }
  2690. DateTime now = DateTime.Now;
  2691. sql = @"select 1 from ICSContainerLot
  2692. where LotNo='{0}' and WorkPoint='{1}'
  2693. ";
  2694. sql = string.Format(sql, LotNo, WorkPoint);
  2695. log.Debug("查询容器条码关联表是否存在");
  2696. DataTable dttte = DBHelper.SQlReturnData(sql, cmd);
  2697. if (dttte.Rows.Count > 0)
  2698. {
  2699. ///删除条码关联表数据
  2700. sql = @"DELETE FROM ICSContainerLot
  2701. where LotNo='{0}' and WorkPoint='{1}'
  2702. ";
  2703. sql = string.Format(sql, LotNo, WorkPoint);
  2704. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2705. {
  2706. throw new Exception(language.GetNameByCode("容器条码关联表数据删除失败"));
  2707. }
  2708. }
  2709. }
  2710. catch (Exception)
  2711. {
  2712. throw;
  2713. }
  2714. return lstDt;
  2715. }
  2716. /// <summary>
  2717. /// 移库
  2718. /// </summary>
  2719. /// <param name="LocationCode"></param>
  2720. /// <param name="LotNo"></param>
  2721. /// <param name="Quantity"></param>
  2722. /// <param name="User"></param>
  2723. /// <param name="WorkPoint"></param>
  2724. /// <param name="TransType"></param>
  2725. /// <param name="BusinessCode"></param>
  2726. /// <param name="cmd"></param>
  2727. public static void WareHouseLotInfoLibrary(string Identification, string TransCode, string TransSequence, string WarehouseCode, string LocationCode,
  2728. string LotNo, string User, string WorkPoint, string TransType, string BusinessCode, SqlCommand cmd, Dictionary<string, string> language)
  2729. {
  2730. try
  2731. {
  2732. string sql = @"SELECT WarehouseCode FROM ICSWareHouseLotInfo a WHERE LotNo='{0}' AND WorkPoint='{1}'";
  2733. sql = string.Format(sql, LotNo,WorkPoint);
  2734. DataTable dt = DBHelper.SQlReturnData(sql, cmd);
  2735. if (dt == null || dt.Rows.Count <= 0)
  2736. {
  2737. throw new Exception(string.Format(language.GetNameByCode("WMSAPIInfo171"), LotNo));
  2738. }
  2739. string whcode = dt.Rows[0]["WarehouseCode"].ToString();
  2740. ///添加日志
  2741. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  2742. BEGIN
  2743. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  2744. RETURN
  2745. END
  2746. IF('" + whcode + @"' != '{8}')
  2747. BEGIN
  2748. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo394"), "{8}", whcode) + @"', 16, 1);
  2749. RETURN
  2750. END
  2751. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  2752. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  2753. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  2754. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  2755. MTIME,WorkPoint,EATTRIBUTE1 )
  2756. SELECT NEWID(),'{3}','{4}','{5}',a.LotNo ,a.InvCode ,
  2757. c.WarehouseCode,c.LocationCode,'{8}','{9}',c.Quantity,
  2758. '','0','{6}','{7}','0','',
  2759. '','','',f.F_Account ,f.F_RealName ,
  2760. SYSDATETIME() ,a.WorkPoint ,''
  2761. FROM ICSInventoryLot a
  2762. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  2763. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  2764. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  2765. ";
  2766. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, TransType, BusinessCode, WarehouseCode, LocationCode);
  2767. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2768. {
  2769. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  2770. }
  2771. ///添加库存
  2772. sql = @"IF NOT EXISTS(SELECT a.ID FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity>0)
  2773. BEGIN
  2774. RAISERROR('" + language.GetNameByCode("WMSAPIInfo038") + @"',16,1);
  2775. RETURN
  2776. END
  2777. IF NOT EXISTS(SELECT a.ID FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND a.WarehouseCode='{2}')
  2778. BEGIN
  2779. RAISERROR('" + language.GetNameByCode("WMSAPIInfo038") + @"',16,1);
  2780. RETURN
  2781. END
  2782. UPDATE ICSWareHouseLotInfo SET WarehouseCode='{2}',LocationCode='{3}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  2783. ";
  2784. sql = string.Format(sql, LotNo, WorkPoint, WarehouseCode, LocationCode);
  2785. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2786. {
  2787. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存表更新失败!");
  2788. }
  2789. DateTime now = DateTime.Now;
  2790. sql = @"select 1 from ICSContainerLot
  2791. where LotNo='{0}' and WorkPoint='{1}'
  2792. ";
  2793. sql = string.Format(sql, LotNo, WorkPoint);
  2794. log.Debug("查询容器条码关联表是否存在");
  2795. DataTable dttte = DBHelper.SQlReturnData(sql, cmd);
  2796. if (dttte.Rows.Count > 0)
  2797. {
  2798. ///删除条码关联表数据
  2799. sql = @"DELETE FROM ICSContainerLot
  2800. where LotNo='{0}' and WorkPoint='{1}'
  2801. ";
  2802. sql = string.Format(sql, LotNo, WorkPoint);
  2803. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2804. {
  2805. throw new Exception(language.GetNameByCode("容器条码关联表数据删除失败"));
  2806. }
  2807. }
  2808. }
  2809. catch (Exception)
  2810. {
  2811. throw;
  2812. }
  2813. }
  2814. /// <summary>
  2815. /// 两步调入
  2816. /// </summary>
  2817. /// <param name="LocationCode"></param>
  2818. /// <param name="LotNo"></param>
  2819. /// <param name="Quantity"></param>
  2820. /// <param name="User"></param>
  2821. /// <param name="WorkPoint"></param>
  2822. /// <param name="TransType"></param>
  2823. /// <param name="BusinessCode"></param>
  2824. /// <param name="cmd"></param>
  2825. public static void WareHouseLotInfoTwoStepTransferDocIn(string Identification, string TransCode, string TransSequence, string WarehouseCode,
  2826. string LocationCode, string LotNo, string Quantity, string User, string WorkPoint, string TransType, string BusinessCode, SqlCommand cmd, Dictionary<string, string> language)
  2827. {
  2828. try
  2829. {
  2830. ///添加日志
  2831. string sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  2832. BEGIN
  2833. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  2834. RETURN
  2835. END
  2836. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  2837. ToWarehouseCode,ToLocationCode,Quantity,
  2838. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  2839. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  2840. MTIME,WorkPoint,EATTRIBUTE1)
  2841. SELECT NEWID(),'{3}','{4}','{5}',a.LotNo ,a.InvCode ,
  2842. '{9}','{10}','{6}',
  2843. '','0','{7}','{8}','0','',
  2844. '','','',f.F_Account ,f.F_RealName ,
  2845. SYSDATETIME() ,a.WorkPoint ,''
  2846. FROM ICSInventoryLot a
  2847. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  2848. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  2849. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  2850. ";
  2851. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, WarehouseCode, LocationCode);
  2852. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2853. {
  2854. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  2855. }
  2856. ///添加库存
  2857. sql = @"IF NOT EXISTS(SELECT a.ID FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}')
  2858. BEGIN
  2859. RAISERROR('" + language.GetNameByCode("WMSAPIInfo171") + @"',16,1);
  2860. RETURN
  2861. END
  2862. UPDATE ICSWareHouseLotInfo SET WarehouseCode='{2}',LocationCode='{3}',Quantity=Quantity+'{4}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  2863. ";
  2864. sql = string.Format(sql, LotNo, WorkPoint, WarehouseCode, LocationCode, Quantity);
  2865. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2866. {
  2867. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存表更新失败!");
  2868. }
  2869. }
  2870. catch (Exception)
  2871. {
  2872. throw;
  2873. }
  2874. }
  2875. /// <summary>
  2876. /// 合并日志
  2877. /// </summary>
  2878. /// <param name="Identification"></param>
  2879. /// <param name="LotNo"></param>
  2880. /// <param name="User"></param>
  2881. /// <param name="WorkPoint"></param>
  2882. /// <param name="TransType"></param>
  2883. /// <param name="BusinessCode"></param>
  2884. /// <param name="cmd"></param>
  2885. public static DataTable WareHouseLotInfoLogMerge(string Identification, string LotNo, string User, string WorkPoint, string TransType, string BusinessCode, string newLotno, SqlCommand cmd, Dictionary<string, string> language)
  2886. {
  2887. String LotEnable = "";
  2888. String PrintEnable = "";
  2889. DataTable dtLotno = new DataTable();
  2890. DataTable lstDt = new DataTable();
  2891. try
  2892. {
  2893. //检验是否分批
  2894. string sql = @"SELECT b.LotEnable,b.PrintEnable FROM ICSInventoryLot a
  2895. LEFT JOIN ICSInventory b ON a.InvCode=b.InvCode AND a.WorkPoint=b.WorkPoint
  2896. where a.LotNo='{0}' and a.WorkPoint='{1}'
  2897. ";
  2898. sql = string.Format(sql, LotNo, WorkPoint);
  2899. DataTable dt = DBHelper.SQlReturnData(sql, cmd);
  2900. if (dt.Rows.Count == 0)
  2901. {
  2902. throw new Exception(language.GetNameByCode("WMSAPIInfo369"));
  2903. }
  2904. else
  2905. {
  2906. LotEnable = dt.Rows[0]["LotEnable"].ToString();
  2907. PrintEnable = dt.Rows[0]["PrintEnable"].ToString();
  2908. }
  2909. ///添加日志
  2910. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  2911. BEGIN
  2912. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  2913. RETURN
  2914. END
  2915. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  2916. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  2917. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  2918. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  2919. MTIME,WorkPoint,EATTRIBUTE1)
  2920. SELECT NEWID(),'{3}',b.TransCode,b.TransSequence,a.LotNo ,a.InvCode ,
  2921. '','',c.WarehouseCode,c.LocationCode,c.Quantity,
  2922. '','0','{4}','{5}','0','',
  2923. '','','',f.F_Account ,f.F_RealName ,
  2924. SYSDATETIME() ,a.WorkPoint ,''
  2925. FROM ICSInventoryLot a
  2926. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  2927. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  2928. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  2929. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  2930. ";
  2931. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransType, BusinessCode);
  2932. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2933. {
  2934. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  2935. }
  2936. if (PrintEnable.Equals("True"))
  2937. {
  2938. sql = @"select A.LotNO , B.Quantity AS OLDLotQty, C.Quantity AS LotQty ,b.InvCode,d.INVSTD,d.INVNAME,b.MTIME,A.TransCode
  2939. from ICSWareHouseLotInfolog A
  2940. left join ICSInventoryLot B on A.LotNO=B.LotNO and a.WorkPoint=b.WorkPoint
  2941. left join ICSWareHouseLotInfo C ON A.LotNO=C.LotNO and a.WorkPoint=c.WorkPoint
  2942. left join ICSInventory D on b.INVCODE=d.INVCODE and b.WorkPoint=d.WorkPoint
  2943. where a.BusinessCode='34'
  2944. and A.lotno = '{0}' and a.workpoint='{1}'
  2945. ";
  2946. sql = string.Format(sql, LotNo, WorkPoint, BusinessCode, newLotno);
  2947. dtLotno = DBHelper.SQlReturnData(sql, cmd);
  2948. lstDt = dtLotno;
  2949. }
  2950. }
  2951. catch (Exception)
  2952. {
  2953. throw;
  2954. }
  2955. return lstDt;
  2956. }
  2957. /// <summary>
  2958. /// 拆分、合并日志
  2959. /// </summary>
  2960. /// <param name="Identification"></param>
  2961. /// <param name="LotNo"></param>
  2962. /// <param name="User"></param>
  2963. /// <param name="WorkPoint"></param>
  2964. /// <param name="TransType"></param>
  2965. /// <param name="BusinessCode"></param>
  2966. /// <param name="cmd"></param>
  2967. public static DataTable WareHouseLotInfoLog(string Identification, string LotNo, string User, string WorkPoint, string TransType, string BusinessCode,string newLotno, SqlCommand cmd, Dictionary<string, string> language)
  2968. {
  2969. String LotEnable = "";
  2970. String PrintEnable = "";
  2971. DataTable dtLotno = new DataTable();
  2972. DataTable lstDt = new DataTable();
  2973. try{
  2974. //检验是否分批
  2975. string sql = @"SELECT b.LotEnable,b.PrintEnable FROM ICSInventoryLot a
  2976. LEFT JOIN ICSInventory b ON a.InvCode=b.InvCode AND a.WorkPoint=b.WorkPoint
  2977. where a.LotNo='{0}' and a.WorkPoint='{1}'
  2978. ";
  2979. sql = string.Format(sql, LotNo, WorkPoint);
  2980. DataTable dt = DBHelper.SQlReturnData(sql, cmd);
  2981. if (dt.Rows.Count == 0)
  2982. {
  2983. throw new Exception(language.GetNameByCode("WMSAPIInfo369"));
  2984. }
  2985. else
  2986. {
  2987. LotEnable = dt.Rows[0]["LotEnable"].ToString();
  2988. PrintEnable = dt.Rows[0]["PrintEnable"].ToString();
  2989. }
  2990. ///添加日志
  2991. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  2992. BEGIN
  2993. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  2994. RETURN
  2995. END
  2996. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  2997. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  2998. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  2999. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  3000. MTIME,WorkPoint,EATTRIBUTE1)
  3001. SELECT NEWID(),'{3}',b.TransCode,b.TransSequence,a.LotNo ,a.InvCode ,
  3002. '','',c.WarehouseCode,c.LocationCode,c.Quantity,
  3003. '','0','{4}','{5}','0','',
  3004. '','','',f.F_Account ,f.F_RealName ,
  3005. SYSDATETIME() ,a.WorkPoint ,''
  3006. FROM ICSInventoryLot a
  3007. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  3008. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  3009. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  3010. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  3011. ";
  3012. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransType, BusinessCode);
  3013. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3014. {
  3015. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  3016. }
  3017. if (PrintEnable.Equals("True"))
  3018. {
  3019. 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
  3020. from ICSWareHouseLotInfolog A
  3021. left join ICSInventoryLot B on A.LotNO=B.LotNO and a.WorkPoint=b.WorkPoint
  3022. left join ICSWareHouseLotInfo C ON A.LotNO=C.LotNO and a.WorkPoint=c.WorkPoint
  3023. left join ICSInventory D on b.INVCODE=d.INVCODE and b.WorkPoint=d.WorkPoint
  3024. left JOIN ICSExtension f on b.ExtensionID=f.id and b.WorkPoint=f.WorkPoint
  3025. where a.BusinessCode='32'
  3026. and A.lotno = '{3}' and a.workpoint='{1}'
  3027. ";
  3028. sql = string.Format(sql, LotNo, WorkPoint, BusinessCode,newLotno);
  3029. dtLotno = DBHelper.SQlReturnData(sql, cmd);
  3030. lstDt = dtLotno;
  3031. }
  3032. }
  3033. catch (Exception)
  3034. {
  3035. throw;
  3036. }
  3037. return lstDt;
  3038. }
  3039. /// <summary>
  3040. /// 合并
  3041. /// </summary>
  3042. /// <param name="Identification"></param>
  3043. /// <param name="LotNo"></param>
  3044. /// <param name="User"></param>
  3045. /// <param name="WorkPoint"></param>
  3046. /// <param name="TransType"></param>
  3047. /// <param name="BusinessCode"></param>
  3048. /// <param name="cmd"></param>
  3049. public static void WareHouseLotInfoMerge(string Identification, string LotNo, string CurrentLotNo, string Quantity, string User, string WorkPoint, string TransType,
  3050. string BusinessCode, SqlCommand cmd, Dictionary<string, string> language)
  3051. {
  3052. try
  3053. {
  3054. ///更新目标条码库存
  3055. string sql = @"IF NOT EXISTS(SELECT a.LotNo FROM ICSInventoryLot a
  3056. INNER JOIN ICSInventoryLot b ON b.LotNo='{3}' AND a.InvCode=b.InvCode AND a.WorkPoint=b.WorkPoint
  3057. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}')
  3058. BEGIN
  3059. RAISERROR('" + language.GetNameByCode("WMSAPIInfo170") + @"',16,1);
  3060. RETURN
  3061. END
  3062. IF NOT EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}')
  3063. BEGIN
  3064. RAISERROR('" + language.GetNameByCode("WMSAPIInfo171") + @"',16,1);
  3065. RETURN
  3066. END
  3067. IF EXISTS(
  3068. SELECT * FROM ICSWareHouseLotInfo a
  3069. INNER JOIN ICSInventoryLot c on a.LotNo=c.LotNo and a.WorkPoint=c.WorkPoint
  3070. INNER JOIN ICSInventory d on c.invcode=d.invcode and c.WorkPoint=d.WorkPoint
  3071. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' and d.BatchEnable='1'
  3072. )
  3073. BEGIN
  3074. IF NOT EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a
  3075. INNER JOIN ICSWareHouseLotInfo b ON b.LotNo='{3}' AND a.WarehouseCode=b.WarehouseCode AND a.WorkPoint=b.WorkPoint
  3076. INNER JOIN ICSInventoryLot c on a.LotNo=c.LotNo and a.WorkPoint=c.WorkPoint
  3077. INNER JOIN ICSInventoryLot d on b.LotNo=d.LotNo and b.WorkPoint=d.WorkPoint
  3078. INNER JOIN ICSExtension e on c.ExtensionID=e.ID and c.WorkPoint=e.WorkPoint
  3079. INNER JOIN ICSExtension f on d.ExtensionID=f.id and d.WorkPoint=f.WorkPoint
  3080. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' and e.ID=f.ID)
  3081. BEGIN
  3082. RAISERROR('/',16,1);
  3083. RETURN
  3084. END
  3085. END
  3086. IF NOT EXISTS(
  3087. SELECT * FROM ICSWareHouseLotInfo a
  3088. INNER JOIN ICSInventoryLot c on a.LotNo=c.LotNo and a.WorkPoint=c.WorkPoint
  3089. INNER JOIN ICSInventory d on c.invcode=d.invcode and c.WorkPoint=d.WorkPoint
  3090. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' and d.BatchEnable='1'
  3091. )
  3092. BEGIN
  3093. IF NOT EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a
  3094. INNER JOIN ICSWareHouseLotInfo b ON b.LotNo='{3}' AND a.WarehouseCode=b.WarehouseCode AND a.WorkPoint=b.WorkPoint
  3095. INNER JOIN ICSInventoryLot c on a.LotNo=c.LotNo and a.WorkPoint=c.WorkPoint
  3096. INNER JOIN ICSInventoryLot d on b.LotNo=d.LotNo and b.WorkPoint=d.WorkPoint
  3097. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}')
  3098. BEGIN
  3099. RAISERROR('/',16,1);
  3100. RETURN
  3101. END
  3102. END
  3103. UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)+'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  3104. UPDATE ICSInventoryLot SET Amount=(ISNULL(Amount,0)+(select Amount from
  3105. ICSInventoryLot where LotNo='{3}' AND WorkPoint='{1}')) WHERE LotNo='{0}' AND WorkPoint='{1}'
  3106. ";
  3107. sql = string.Format(sql, LotNo, WorkPoint, Quantity, CurrentLotNo);
  3108. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3109. {
  3110. throw new Exception(language.GetNameByCode("WMSAPIInfo169"));//"目标条码库存更新失败!");
  3111. }
  3112. ///更新原条码库存
  3113. sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  3114. UPDATE ICSInventoryLot SET Amount=(ISNULL(Amount,0)-(select Amount from
  3115. ICSInventoryLot where LotNo='{0}' AND WorkPoint='{1}')) WHERE LotNo='{0}' AND WorkPoint='{1}'
  3116. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity<0)
  3117. BEGIN
  3118. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  3119. RETURN
  3120. END";
  3121. sql = string.Format(sql, CurrentLotNo, WorkPoint, Quantity);
  3122. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3123. {
  3124. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  3125. }
  3126. ///添加日志
  3127. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  3128. BEGIN
  3129. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  3130. RETURN
  3131. END
  3132. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  3133. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  3134. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  3135. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  3136. MTIME,WorkPoint,EATTRIBUTE1)
  3137. SELECT NEWID(),'{3}',b.TransCode,b.TransSequence,a.LotNo ,a.InvCode ,
  3138. '','',c.WarehouseCode,c.LocationCode,c.Quantity,
  3139. '','0','{4}','{5}','0','',
  3140. '','','',f.F_Account ,f.F_RealName ,
  3141. SYSDATETIME() ,a.WorkPoint ,''
  3142. FROM ICSInventoryLot a
  3143. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  3144. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  3145. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  3146. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  3147. ";
  3148. sql = string.Format(sql, CurrentLotNo, WorkPoint, User, Identification, TransType, BusinessCode);
  3149. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3150. {
  3151. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  3152. }
  3153. }
  3154. catch (Exception)
  3155. {
  3156. throw;
  3157. }
  3158. }
  3159. /// <summary>
  3160. /// 拆分
  3161. /// </summary>
  3162. /// <param name="Identification"></param>
  3163. /// <param name="LotNo"></param>
  3164. /// <param name="User"></param>
  3165. /// <param name="WorkPoint"></param>
  3166. /// <param name="TransType"></param>
  3167. /// <param name="BusinessCode"></param>
  3168. /// <param name="cmd"></param>
  3169. public static void WareHouseLotInfoSplit(string Identification, string LotNo, string CurrentLotNo, string Quantity, string User, string WorkPoint, string TransType,
  3170. string BusinessCode, SqlCommand cmd, Dictionary<string, string> language)
  3171. {
  3172. try
  3173. {
  3174. ///更新库存
  3175. string sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  3176. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity<0)
  3177. BEGIN
  3178. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  3179. RETURN
  3180. END";
  3181. sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  3182. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3183. {
  3184. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  3185. }
  3186. #region 添加库存
  3187. //插入条码表
  3188. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  3189. BEGIN
  3190. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  3191. RETURN
  3192. END
  3193. IF EXISTS(SELECT a.LotNo FROM ICSInventoryLot a WHERE a.LotNo='{4}' AND a.WorkPoint='{1}')
  3194. BEGIN
  3195. RAISERROR('" + language.GetNameByCode("WMSAPIInfo172") + @"',16,1);
  3196. RETURN
  3197. END
  3198. INSERT INTO ICSInventoryLot(ID,LotNo,InvCode,ProductDate,ExpirationDate,Quantity,Amount,ExtensionID,Type,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  3199. 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
  3200. FROM ICSInventoryLot a
  3201. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  3202. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  3203. sql = string.Format(sql, LotNo, WorkPoint, User, Quantity, CurrentLotNo);
  3204. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3205. {
  3206. throw new Exception(language.GetNameByCode("WMSAPIInfo173"));//"条码表写入失败!");
  3207. }
  3208. //插入条码单据表
  3209. sql = @"INSERT INTO ICSInventoryLotDetail(LotNo,TransCode,TransSequence,MUSER,MUSERName,MTIME,WorkPoint)
  3210. SELECT '{3}',b.TransCode,b.TransSequence,f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint
  3211. FROM ICSInventoryLot a
  3212. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  3213. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  3214. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  3215. sql = string.Format(sql, LotNo, WorkPoint, User, CurrentLotNo);
  3216. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3217. {
  3218. throw new Exception(language.GetNameByCode("WMSAPIInfo174"));//"条码单据表写入失败!");
  3219. }
  3220. ///添加库存
  3221. sql = @"IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}')
  3222. BEGIN
  3223. RAISERROR('" + language.GetNameByCode("WMSAPIInfo164") + @"',16,1);
  3224. RETURN
  3225. END
  3226. INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  3227. SELECT NEWID(),a.LotNo ,d.WarehouseCode,d.LocationCode,a.InvCode ,'{3}',SYSDATETIME(),'0',f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint ,''
  3228. FROM ICSInventoryLot a
  3229. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  3230. INNER JOIN ICSWareHouseLotInfo d ON a.EATTRIBUTE1=d.LotNo AND a.WorkPoint=d.WorkPoint
  3231. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  3232. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  3233. sql = string.Format(sql, CurrentLotNo, WorkPoint, User, Quantity);
  3234. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3235. {
  3236. throw new Exception(language.GetNameByCode("WMSAPIInfo165"));
  3237. }
  3238. ///添加日志
  3239. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  3240. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  3241. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  3242. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  3243. MTIME,WorkPoint,EATTRIBUTE1)
  3244. SELECT NEWID(),'{3}',b.TransCode,b.TransSequence,a.LotNo ,a.InvCode ,
  3245. '','',c.WarehouseCode,c.LocationCode,c.Quantity,
  3246. '','0','{4}','{5}','0','',
  3247. '','','',f.F_Account ,f.F_RealName ,
  3248. SYSDATETIME() ,a.WorkPoint ,''
  3249. FROM ICSInventoryLot a
  3250. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  3251. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  3252. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  3253. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  3254. ";
  3255. sql = string.Format(sql, CurrentLotNo, WorkPoint, User, Identification, TransType, BusinessCode);
  3256. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3257. {
  3258. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  3259. }
  3260. #endregion
  3261. }
  3262. catch (Exception)
  3263. {
  3264. throw;
  3265. }
  3266. }
  3267. /// <summary>
  3268. /// 拆分(奥美)
  3269. /// </summary>
  3270. /// <param name="Identification"></param>
  3271. /// <param name="LotNo"></param>
  3272. /// <param name="User"></param>
  3273. /// <param name="WorkPoint"></param>
  3274. /// <param name="TransType"></param>
  3275. /// <param name="BusinessCode"></param>
  3276. /// <param name="cmd"></param>
  3277. public static void AMWareHouseLotInfoSplit(string Identification, string LotNo, string CurrentLotNo, string Quantity, string User, string WorkPoint, string TransType,
  3278. string BusinessCode, SqlCommand cmd, Dictionary<string, string> language)
  3279. {
  3280. try
  3281. {
  3282. string amount = "";
  3283. //string sqql = @"select a.Amount FROM ICSInventoryLot a
  3284. // WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  3285. //sqql = string.Format(sqql, LotNo, WorkPoint);
  3286. //DataTable dtaa = DBHelper.SQlReturnData(sqql, cmd);
  3287. //amount = dtaa.Rows[0]["Amount"].ToString();
  3288. string cheksql = @"select d.EATTRIBUTE1 FROM ICSInventoryLot a
  3289. INNER JOIN ICSWareHouseLotInfo b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  3290. INNER JOIN ICSInventory d on a.InvCode=d.InvCode and a.WorkPoint=d.WorkPoint
  3291. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' and d.AmountEnable='1'";
  3292. cheksql = string.Format(cheksql, LotNo, WorkPoint);
  3293. DataTable dta = DBHelper.SQlReturnData(cheksql, cmd);
  3294. if (dta.Rows.Count > 0)
  3295. {
  3296. Quantity = (decimal.Parse(Quantity) * decimal.Parse(dta.Rows[0]["EATTRIBUTE1"].ToString())).ToString();
  3297. }
  3298. ///更新库存
  3299. string sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  3300. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity<0)
  3301. BEGIN
  3302. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  3303. RETURN
  3304. END";
  3305. sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  3306. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3307. {
  3308. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  3309. }
  3310. #region 添加库存
  3311. //插入条码表
  3312. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  3313. BEGIN
  3314. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  3315. RETURN
  3316. END
  3317. IF EXISTS(SELECT a.LotNo FROM ICSInventoryLot a WHERE a.LotNo='{4}' AND a.WorkPoint='{1}')
  3318. BEGIN
  3319. RAISERROR('" + language.GetNameByCode("WMSAPIInfo172") + @"',16,1);
  3320. RETURN
  3321. END
  3322. INSERT INTO ICSInventoryLot(ID,LotNo,InvCode,ProductDate,ExpirationDate,Quantity,Amount,ExtensionID,Type,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  3323. 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
  3324. FROM ICSInventoryLot a
  3325. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  3326. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  3327. sql = string.Format(sql, LotNo, WorkPoint, User, Quantity, CurrentLotNo);
  3328. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3329. {
  3330. throw new Exception(language.GetNameByCode("WMSAPIInfo173"));//"条码表写入失败!");
  3331. }
  3332. //插入条码单据表
  3333. sql = @"INSERT INTO ICSInventoryLotDetail(LotNo,TransCode,TransSequence,MUSER,MUSERName,MTIME,WorkPoint)
  3334. SELECT '{3}',b.TransCode,b.TransSequence,f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint
  3335. FROM ICSInventoryLot a
  3336. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  3337. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  3338. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  3339. sql = string.Format(sql, LotNo, WorkPoint, User, CurrentLotNo);
  3340. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3341. {
  3342. throw new Exception(language.GetNameByCode("WMSAPIInfo174"));//"条码单据表写入失败!");
  3343. }
  3344. ///添加库存
  3345. sql = @"IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}')
  3346. BEGIN
  3347. RAISERROR('" + language.GetNameByCode("WMSAPIInfo164") + @"',16,1);
  3348. RETURN
  3349. END
  3350. INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  3351. SELECT NEWID(),a.LotNo ,d.WarehouseCode,d.LocationCode,a.InvCode ,'{3}',SYSDATETIME(),'0',f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint ,''
  3352. FROM ICSInventoryLot a
  3353. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  3354. INNER JOIN ICSWareHouseLotInfo d ON a.EATTRIBUTE1=d.LotNo AND a.WorkPoint=d.WorkPoint
  3355. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  3356. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  3357. sql = string.Format(sql, CurrentLotNo, WorkPoint, User, Quantity);
  3358. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3359. {
  3360. throw new Exception(language.GetNameByCode("WMSAPIInfo165"));
  3361. }
  3362. ///添加日志
  3363. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  3364. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  3365. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  3366. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  3367. MTIME,WorkPoint,EATTRIBUTE1)
  3368. SELECT NEWID(),'{3}',b.TransCode,b.TransSequence,a.LotNo ,a.InvCode ,
  3369. '','',c.WarehouseCode,c.LocationCode,c.Quantity,
  3370. '','0','{4}','{5}','0','',
  3371. '','','',f.F_Account ,f.F_RealName ,
  3372. SYSDATETIME() ,a.WorkPoint ,''
  3373. FROM ICSInventoryLot a
  3374. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  3375. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  3376. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  3377. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  3378. ";
  3379. sql = string.Format(sql, CurrentLotNo, WorkPoint, User, Identification, TransType, BusinessCode);
  3380. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3381. {
  3382. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  3383. }
  3384. #endregion
  3385. }
  3386. catch (Exception)
  3387. {
  3388. throw;
  3389. }
  3390. }
  3391. /// <summary>
  3392. /// 回写ERP ID
  3393. /// </summary>
  3394. /// <param name="TransType"></param>
  3395. /// <param name="SourceDetailID"></param>
  3396. /// <param name="Identification"></param>
  3397. /// <param name="ID"></param>
  3398. /// <param name="DetailID"></param>
  3399. /// <param name="Code"></param>
  3400. /// <param name="Sequence"></param>
  3401. /// <param name="cmd"></param>
  3402. 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)
  3403. {
  3404. string ERPupdate = string.Empty;
  3405. string NewERPupdate = string.Empty;
  3406. try
  3407. {
  3408. //采购入库
  3409. if (TransType == TransTypeEnum.PurchaseReceiveDoc.GetDescription())
  3410. {
  3411. ERPupdate = @"SELECT a.id
  3412. INTO #NewTempERP
  3413. FROM ICSWareHouseLotInfoLog a
  3414. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  3415. INNER JOIN ICSPurchaseOrder c ON b.TransCode=c.POCode AND b.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  3416. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  3417. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  3418. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  3419. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.ToWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  3420. WHERE c.PODetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  3421. 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, '') +
  3422. 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}'
  3423. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  3424. where ID in (select id from #NewTempERP)
  3425. DROP TABLE #NewTempERP";
  3426. }
  3427. //审核的到货单
  3428. else if (TransType == TransTypeEnum.DeliveryNotice.GetDescription())
  3429. {
  3430. ERPupdate = @"SELECT a.id
  3431. INTO #NewTempERP
  3432. FROM ICSWareHouseLotInfoLog a
  3433. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  3434. INNER JOIN ICSDeliveryNotice c ON b.TransCode=c.DNCode AND b.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  3435. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  3436. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  3437. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  3438. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.ToWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  3439. WHERE c.DNDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  3440. 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, '') +
  3441. 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}'
  3442. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  3443. where ID in (select id from #NewTempERP)
  3444. DROP TABLE #NewTempERP
  3445. ";
  3446. }
  3447. //采购拒收
  3448. else if (TransType == TransTypeEnum.PurchaseRejectDoc.GetDescription())
  3449. {
  3450. ERPupdate = @"SELECT a.id
  3451. INTO #NewTempERP
  3452. FROM ICSWareHouseLotInfoLog a
  3453. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  3454. INNER JOIN ICSDeliveryNotice c ON b.TransCode=c.DNCode AND b.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  3455. WHERE c.DNDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  3456. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  3457. where ID in (select id from #NewTempERP)
  3458. DROP TABLE #NewTempERP
  3459. ";
  3460. }
  3461. //审核的委外到货单
  3462. else if (TransType == TransTypeEnum.ODeliveryNotice.GetDescription())
  3463. {
  3464. ERPupdate = @"SELECT a.id
  3465. INTO #NewTempERP
  3466. FROM ICSWareHouseLotInfoLog a
  3467. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  3468. INNER JOIN ICSODeliveryNotice c ON b.TransCode=c.ODNCode AND b.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  3469. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  3470. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  3471. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  3472. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  3473. WHERE c.ODNDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  3474. 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, '') +
  3475. 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}'
  3476. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  3477. where ID in (select id from #NewTempERP)
  3478. DROP TABLE #NewTempERP
  3479. ";
  3480. }
  3481. //委外拒收
  3482. else if (TransType == TransTypeEnum.OutsourcingRejectDoc.GetDescription())
  3483. {
  3484. ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  3485. FROM ICSWareHouseLotInfoLog a
  3486. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  3487. INNER JOIN ICSODeliveryNotice c ON b.TransCode=c.ODNCode AND b.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  3488. ";
  3489. }
  3490. //采购退货
  3491. else if (TransType == TransTypeEnum.PurchaseReceiveDoctNegative.GetDescription())
  3492. {
  3493. ERPupdate = @"SELECT a.id
  3494. INTO #NewTempERP
  3495. FROM ICSWareHouseLotInfoLog a
  3496. INNER JOIN ICSDeliveryNotice c ON a.TransCode=c.DNCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  3497. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  3498. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  3499. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  3500. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.ToWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  3501. WHERE c.DNDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND c.DNType='2' AND a.BusinessCode ='{7}'
  3502. 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, '') +
  3503. 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}'
  3504. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  3505. where ID in (select id from #NewTempERP)
  3506. DROP TABLE #NewTempERP
  3507. ";
  3508. }
  3509. //委外发料
  3510. else if (TransType == TransTypeEnum.OutsourcingIssueDoc.GetDescription())
  3511. {
  3512. ERPupdate = @"SELECT a.id
  3513. INTO #NewTempERP
  3514. FROM ICSWareHouseLotInfoLog a
  3515. INNER JOIN ICSOutsourcingOrder y ON a.TransCode=y.OOCode AND a.WorkPoint=y.WorkPoint
  3516. INNER JOIN ICSOOPick x ON x.OODetailID=y.OODetailID AND a.TransSequence=y.Sequence+'~'+x.Sequence AND x.WorkPoint=y.WorkPoint
  3517. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  3518. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  3519. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  3520. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  3521. WHERE x.PickID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  3522. 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, '') +
  3523. 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}'
  3524. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  3525. where ID in (select id from #NewTempERP)
  3526. DROP TABLE #NewTempERP
  3527. ";
  3528. }
  3529. //委外退料
  3530. else if (TransType == TransTypeEnum.ICSOutsourcingIssueDoNegative.GetDescription()
  3531. || TransType == TransTypeEnum.ICSOutsourcingIssueDoNegativeApply.GetDescription()
  3532. || TransType == TransTypeEnum.ICSOutsourcingIssueDoNegativeIssue.GetDescription())
  3533. {
  3534. ERPupdate = @"--根据退料单退料
  3535. UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  3536. FROM ICSWareHouseLotInfoLog a
  3537. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  3538. INNER JOIN ICSOApplyNegDetail c ON b.TransCode=c.OApplyNegCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  3539. INNER JOIN ICSOApplyNeg d ON c.OApplyNegCode=d.OApplyNegCode AND c.WorkPoint=d.WorkPoint
  3540. Left JOIN ICSOIssue m ON (CASE WHEN d.Type='3' THEN c.SourceDetailID ELSE 0 END)=m.IssueDetailID AND c.WorkPoint=m.WorkPoint
  3541. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  3542. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  3543. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  3544. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  3545. WHERE ISNULL(m.ApplyDetailID,ISNULL(m.PickID, c.SourceDetailID))='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  3546. 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, '') +
  3547. 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}'
  3548. --退-
  3549. UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  3550. FROM ICSWareHouseLotInfoLog a
  3551. INNER JOIN ICSWareHouseLotInfoLog b ON a.LogID=b.ID AND a.WorkPoint=b.WorkPoint
  3552. INNER JOIN ICSOutsourcingOrder y ON b.TransCode=y.OOCode AND b.WorkPoint=y.WorkPoint
  3553. INNER JOIN ICSOOPick x ON x.OODetailID=y.OODetailID AND x.WorkPoint=y.WorkPoint AND b.TransSequence = y.Sequence + '~' + x.Sequence
  3554. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  3555. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  3556. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  3557. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  3558. WHERE x.PickID='{0}' AND a.Identification='{1}' AND a.ERPUpload='0' AND a.BusinessCode ='{7}'
  3559. 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, '') +
  3560. 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}'
  3561. --退-
  3562. UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  3563. FROM ICSWareHouseLotInfoLog a
  3564. INNER JOIN ICSWareHouseLotInfoLog b ON a.LogID=b.ID AND a.WorkPoint=b.WorkPoint
  3565. INNER JOIN ICSOApply z ON b.TransCode=z.ApplyCode AND b.TransSequence=z.Sequence AND b.WorkPoint=z.WorkPoint
  3566. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  3567. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  3568. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  3569. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  3570. WHERE z.ApplyDetailID='{0}' AND a.Identification='{1}' AND a.ERPUpload='0' AND a.BusinessCode ='{7}'
  3571. 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, '') +
  3572. 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}'
  3573. --退-
  3574. UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  3575. FROM ICSWareHouseLotInfoLog a
  3576. INNER JOIN ICSWareHouseLotInfoLog b ON a.LogID=b.ID AND a.WorkPoint=b.WorkPoint
  3577. INNER JOIN ICSOIssue m ON b.TransCode=m.IssueCode AND b.TransSequence=m.Sequence AND b.WorkPoint=m.WorkPoint
  3578. LEFT JOIN ICSOOPick x ON m.PickID=x.PickID AND m.WorkPoint=x.WorkPoint
  3579. LEFT JOIN ICSOutsourcingOrder y ON x.OODetailID=y.OODetailID AND x.WorkPoint=y.WorkPoint
  3580. LEFT JOIN ICSOApply z ON m.ApplyDetailID=z.ApplyDetailID AND m.WorkPoint=z.WorkPoint
  3581. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  3582. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  3583. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  3584. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  3585. WHERE ISNULL(m.ApplyDetailID, m.PickID)='{0}' AND a.Identification='{1}' AND a.ERPUpload='0' AND a.BusinessCode ='{7}'
  3586. 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, '') +
  3587. 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}'
  3588. ";
  3589. }
  3590. //委外入库
  3591. else if (TransType == TransTypeEnum.OutsourcingReceiveDoc.GetDescription())
  3592. {
  3593. ERPupdate = @"SELECT a.id
  3594. INTO #NewTempERP
  3595. FROM ICSWareHouseLotInfoLog a
  3596. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  3597. INNER JOIN ICSOutsourcingOrder c ON b.TransCode=c.OOCode AND b.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  3598. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  3599. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  3600. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  3601. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  3602. WHERE c.OODetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  3603. 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, '') +
  3604. 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}'
  3605. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  3606. where ID in (select id from #NewTempERP)
  3607. DROP TABLE #NewTempERP";
  3608. }
  3609. //委外退货
  3610. else if (TransType == TransTypeEnum.OutsourcingReturnBack.GetDescription())
  3611. {
  3612. ERPupdate = @"SELECT a.id
  3613. INTO #NewTempERP
  3614. FROM ICSWareHouseLotInfoLog a
  3615. INNER JOIN ICSODeliveryNotice c ON a.TransCode=c.ODNCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  3616. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  3617. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  3618. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  3619. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  3620. WHERE c.ODNDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND c.ODNType='2' AND a.BusinessCode ='{7}'
  3621. 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, '') +
  3622. 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}'
  3623. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  3624. where ID in (select id from #NewTempERP)
  3625. DROP TABLE #NewTempERP
  3626. ";
  3627. }
  3628. //生产发料
  3629. else if (TransType == TransTypeEnum.MOIssueDoc.GetDescription())
  3630. {
  3631. //ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  3632. // FROM ICSWareHouseLotInfoLog a
  3633. // INNER JOIN ICSMO y ON a.TransCode=y.MOCode AND a.WorkPoint=y.WorkPoint
  3634. // INNER JOIN ICSMOPick x ON x.MODetailID=y.MODetailID AND a.TransSequence=y.Sequence+'~'+x.Sequence AND x.WorkPoint=y.WorkPoint
  3635. // INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  3636. // INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  3637. // INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  3638. // LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  3639. // WHERE x.PickID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  3640. // 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, '') +
  3641. // 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}'
  3642. // ";
  3643. ERPupdate = @"SELECT a.id
  3644. INTO #NewTempERP
  3645. FROM ICSWareHouseLotInfoLog a
  3646. INNER JOIN ICSMO y ON a.TransCode=y.MOCode AND a.WorkPoint=y.WorkPoint
  3647. INNER JOIN ICSMOPick x ON x.MODetailID=y.MODetailID AND a.TransSequence=y.Sequence+'~'+x.Sequence AND x.WorkPoint=y.WorkPoint
  3648. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  3649. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  3650. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  3651. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  3652. WHERE x.PickID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  3653. 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, '') +
  3654. 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}'
  3655. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  3656. where ID in (select id from #NewTempERP)
  3657. DROP TABLE #NewTempERP";
  3658. }
  3659. //生产退料
  3660. else if (TransType == TransTypeEnum.MOIssueDocNegative.GetDescription()
  3661. || TransType == TransTypeEnum.MOIssueDocNegativeApply.GetDescription()
  3662. || TransType == TransTypeEnum.MOIssueDocNegativeIssue.GetDescription())
  3663. {
  3664. ERPupdate = @"--根据退料单退料
  3665. UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  3666. FROM ICSWareHouseLotInfoLog a
  3667. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  3668. INNER JOIN ICSMOApplyNegDetail c ON b.TransCode=c.ApplyNegCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  3669. INNER JOIN ICSMOApplyNeg d ON c.ApplyNegCode=d.ApplyNegCode AND c.WorkPoint=d.WorkPoint
  3670. left JOIN ICSMOIssue m ON (CASE WHEN d.Type='3' THEN c.SourceDetailID ELSE 0 END)=m.IssueDetailID AND c.WorkPoint=m.WorkPoint
  3671. WHERE ISNULL(m.ApplyDetailID, ISNULL(m.PickID, c.SourceDetailID))='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  3672. --退-
  3673. UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  3674. FROM ICSWareHouseLotInfoLog a
  3675. INNER JOIN ICSWareHouseLotInfoLog b ON a.LogID=b.ID AND a.WorkPoint=b.WorkPoint
  3676. INNER JOIN ICSMO y ON b.TransCode=y.MOCode AND b.WorkPoint=y.WorkPoint
  3677. INNER JOIN ICSMOPick x ON x.MODetailID=y.MODetailID AND x.WorkPoint=y.WorkPoint AND b.TransSequence = y.Sequence + '~' + x.Sequence
  3678. WHERE x.PickID='{0}' AND a.Identification='{1}' AND a.ERPUpload='0' AND a.BusinessCode ='{7}'
  3679. --退-
  3680. UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  3681. FROM ICSWareHouseLotInfoLog a
  3682. INNER JOIN ICSWareHouseLotInfoLog b ON a.LogID=b.ID AND a.WorkPoint=b.WorkPoint
  3683. INNER JOIN ICSMOApply z ON b.TransCode=z.ApplyCode AND b.TransSequence=z.Sequence AND b.WorkPoint=z.WorkPoint
  3684. WHERE z.ApplyDetailID='{0}' AND a.Identification='{1}' AND a.ERPUpload='0' AND a.BusinessCode ='{7}'
  3685. --退-
  3686. UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  3687. FROM ICSWareHouseLotInfoLog a
  3688. INNER JOIN ICSWareHouseLotInfoLog b ON a.LogID=b.ID AND a.WorkPoint=b.WorkPoint
  3689. INNER JOIN ICSMOIssue m ON b.TransCode=m.IssueCode AND b.TransSequence=m.Sequence AND b.WorkPoint=m.WorkPoint
  3690. LEFT JOIN ICSMOPick x ON m.PickID=x.PickID AND m.WorkPoint=x.WorkPoint
  3691. LEFT JOIN ICSMO y ON x.MODetailID=y.MODetailID AND x.WorkPoint=y.WorkPoint
  3692. LEFT JOIN ICSMOApply z ON m.ApplyDetailID=z.ApplyDetailID AND m.WorkPoint=z.WorkPoint
  3693. WHERE ISNULL(m.ApplyDetailID, m.PickID)='{0}' AND a.Identification='{1}' AND a.ERPUpload='0' AND a.BusinessCode ='{7}'
  3694. ";
  3695. }
  3696. //生产入库
  3697. else if (TransType == TransTypeEnum.ManufactureReceiveDoc.GetDescription())
  3698. {
  3699. //ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  3700. // FROM ICSWareHouseLotInfoLog a
  3701. // INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  3702. // INNER JOIN ICSMO c ON b.TransCode=c.MOCode AND b.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  3703. // INNER JOIN ICSExtension docext ON docext.ID=c.ExtensionID AND docext.WorkPoint=c.WorkPoint
  3704. // INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  3705. // INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  3706. // INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  3707. // LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  3708. // WHERE c.MODetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  3709. // and (ISNULL(a.fromwarehousecode, '')
  3710. // + CASE WHEN ISNULL(docext.ProjectCode,'')!='' Then ISNULL(ext.ProjectCode, '') ELSE '' END
  3711. // + CASE WHEN (invBat.BatchEnable IS NULL AND ISNULL(inv.BatchEnable, '0')='1') OR ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END
  3712. // + CASE WHEN ISNULL(docext.Version,'')!='' Then ISNULL(ext.Version, '') ELSE '' END
  3713. // + CASE WHEN ISNULL(docext.Brand,'')!='' THEN ISNULL(ext.Brand, '') ELSE '' END
  3714. // + CASE WHEN ISNULL(docext.cFree1,'')!='' THEN ISNULL(ext.cFree1, '') ELSE '' END
  3715. // + CASE WHEN ISNULL(docext.cFree2,'')!='' THEN ISNULL(ext.cFree2, '') ELSE '' END
  3716. // + CASE WHEN ISNULL(docext.cFree3,'')!='' THEN ISNULL(ext.cFree3, '') ELSE '' END
  3717. // + CASE WHEN ISNULL(docext.cFree4,'')!='' THEN ISNULL(ext.cFree4, '') ELSE '' END
  3718. // + CASE WHEN ISNULL(docext.cFree5,'')!='' THEN ISNULL(ext.cFree5, '') ELSE '' END
  3719. // + CASE WHEN ISNULL(docext.cFree6,'')!='' THEN ISNULL(ext.cFree6, '') ELSE '' END
  3720. // + CASE WHEN ISNULL(docext.cFree7,'')!='' THEN ISNULL(ext.cFree7, '') ELSE '' END
  3721. // + CASE WHEN ISNULL(docext.cFree8,'')!='' THEN ISNULL(ext.cFree8, '') ELSE '' END
  3722. // + CASE WHEN ISNULL(docext.cFree9,'')!='' THEN ISNULL(ext.cFree9, '') ELSE '' END
  3723. // + CASE WHEN ISNULL(docext.cFree10,'')!='' THEN ISNULL(ext.cFree10, '') ELSE '' END)='{6}'
  3724. //";
  3725. ERPupdate = @"SELECT a.id
  3726. INTO #NewTempERP
  3727. FROM ICSWareHouseLotInfoLog a
  3728. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  3729. INNER JOIN ICSMO c ON b.TransCode=c.MOCode AND b.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  3730. INNER JOIN ICSExtension docext ON docext.ID=c.ExtensionID AND docext.WorkPoint=c.WorkPoint
  3731. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  3732. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  3733. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  3734. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  3735. WHERE c.MODetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  3736. and (ISNULL(a.fromwarehousecode, '')
  3737. + CASE WHEN ISNULL(docext.ProjectCode,'')!='' Then ISNULL(ext.ProjectCode, '') ELSE '' END
  3738. + CASE WHEN (invBat.BatchEnable IS NULL AND ISNULL(inv.BatchEnable, '0')='1') OR ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END
  3739. + CASE WHEN ISNULL(docext.Version,'')!='' Then ISNULL(ext.Version, '') ELSE '' END
  3740. + CASE WHEN ISNULL(docext.Brand,'')!='' THEN ISNULL(ext.Brand, '') ELSE '' END
  3741. + CASE WHEN ISNULL(docext.cFree1,'')!='' THEN ISNULL(ext.cFree1, '') ELSE '' END
  3742. + CASE WHEN ISNULL(docext.cFree2,'')!='' THEN ISNULL(ext.cFree2, '') ELSE '' END
  3743. + CASE WHEN ISNULL(docext.cFree3,'')!='' THEN ISNULL(ext.cFree3, '') ELSE '' END
  3744. + CASE WHEN ISNULL(docext.cFree4,'')!='' THEN ISNULL(ext.cFree4, '') ELSE '' END
  3745. + CASE WHEN ISNULL(docext.cFree5,'')!='' THEN ISNULL(ext.cFree5, '') ELSE '' END
  3746. + CASE WHEN ISNULL(docext.cFree6,'')!='' THEN ISNULL(ext.cFree6, '') ELSE '' END
  3747. + CASE WHEN ISNULL(docext.cFree7,'')!='' THEN ISNULL(ext.cFree7, '') ELSE '' END
  3748. + CASE WHEN ISNULL(docext.cFree8,'')!='' THEN ISNULL(ext.cFree8, '') ELSE '' END
  3749. + CASE WHEN ISNULL(docext.cFree9,'')!='' THEN ISNULL(ext.cFree9, '') ELSE '' END
  3750. + CASE WHEN ISNULL(docext.cFree10,'')!='' THEN ISNULL(ext.cFree10, '') ELSE '' END)='{6}'
  3751. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  3752. where ID in (select id from #NewTempERP)
  3753. DROP TABLE #NewTempERP
  3754. ";
  3755. }
  3756. //开立的生产入库单
  3757. else if (TransType == TransTypeEnum.ManufactureReceive.GetDescription())
  3758. {
  3759. ERPupdate = @"SELECT a.id
  3760. INTO #NewTempERP
  3761. FROM ICSWareHouseLotInfoLog a
  3762. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  3763. INNER JOIN ICSManufactureReceive c ON b.TransCode=c.RCVCode AND b.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  3764. WHERE c.RCVID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND c.Type='1' AND a.BusinessCode ='{7}'
  3765. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  3766. where ID in (select id from #NewTempERP)
  3767. DROP TABLE #NewTempERP
  3768. ";
  3769. }
  3770. //销售出库
  3771. else if (TransType == TransTypeEnum.SalesShipmentDoc.GetDescription())
  3772. {
  3773. ERPupdate = @"SELECT a.id
  3774. INTO #NewTempERP
  3775. FROM ICSWareHouseLotInfoLog a
  3776. INNER JOIN ICSSDN c ON a.TransCode=c.SDNCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  3777. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  3778. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  3779. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  3780. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  3781. WHERE c.SDNDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND c.Type='1' AND a.BusinessCode ='{7}'
  3782. 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, '') +
  3783. 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}'
  3784. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  3785. where ID in (select id from #NewTempERP)
  3786. DROP TABLE #NewTempERP
  3787. ";
  3788. }
  3789. //销售退货
  3790. else if (TransType == TransTypeEnum.SalesShipmentDocNegative.GetDescription())
  3791. {
  3792. ERPupdate = @"SELECT a.id
  3793. INTO #NewTempERP
  3794. FROM ICSWareHouseLotInfoLog a
  3795. INNER JOIN ICSSDN c ON a.TransCode=c.SDNCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  3796. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  3797. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  3798. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  3799. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  3800. WHERE c.SDNDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND c.Type='2' AND a.BusinessCode ='{7}'
  3801. 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, '') +
  3802. 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}'
  3803. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  3804. where ID in (select id from #NewTempERP)
  3805. DROP TABLE #NewTempERP";
  3806. }
  3807. //返工工单
  3808. else if (TransType == TransTypeEnum.ReWorkReceiveMo.GetDescription())
  3809. {
  3810. ERPupdate = @"SELECT a.id
  3811. INTO #NewTempERP
  3812. FROM ICSWareHouseLotInfoLog a
  3813. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  3814. INNER JOIN ICSMO c ON b.TransCode=c.MOCode AND b.WorkPoint=c.WorkPoint
  3815. INNER JOIN ICSMOPick d ON d.MODetailID=c.MODetailID AND d.WorkPoint=c.WorkPoint and b.TransSequence=c.Sequence+'-'+d.Sequence
  3816. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  3817. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  3818. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  3819. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  3820. WHERE d.PickID='{3}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  3821. 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, '') +
  3822. 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}'
  3823. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  3824. where ID in (select id from #NewTempERP)
  3825. DROP TABLE #NewTempERP
  3826. ";
  3827. }
  3828. //一步调拨
  3829. else if (TransType == TransTypeEnum.OneStepTransferDocIn.GetDescription())
  3830. {
  3831. ERPupdate = @"SELECT a.id
  3832. INTO #NewTempERP
  3833. FROM ICSWareHouseLotInfoLog a
  3834. INNER JOIN ICSTransfer c ON a.TransCode=c.TransferNO AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  3835. WHERE c.TransferID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND c.Type='1' AND a.BusinessCode ='{7}'
  3836. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  3837. where ID in (select id from #NewTempERP)
  3838. DROP TABLE #NewTempERP
  3839. ";
  3840. }
  3841. //调拨
  3842. else if (TransType == TransTypeEnum.OneStepTransferDocIn.GetDescription())
  3843. {
  3844. ERPupdate = @"SELECT a.id
  3845. INTO #NewTempERP
  3846. FROM ICSWareHouseLotInfoLog a
  3847. INNER JOIN ICSTransfer c ON a.TransCode=c.TransferNO AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  3848. WHERE c.TransferID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND c.Type='1' AND a.BusinessCode ='{7}'
  3849. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  3850. where ID in (select id from #NewTempERP)
  3851. DROP TABLE #NewTempERP
  3852. ";
  3853. }
  3854. //无源头调拨
  3855. else if (TransType == TransTypeEnum.StepNoTransferDocIn.GetDescription())
  3856. {
  3857. ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  3858. FROM ICSWareHouseLotInfoLog a
  3859. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  3860. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  3861. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  3862. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  3863. WHERE a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode='70'
  3864. 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, '') +
  3865. 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}'
  3866. ";
  3867. }
  3868. //两步调出
  3869. else if (TransType == TransTypeEnum.TwoStepTransferDocOut.GetDescription())
  3870. {
  3871. ERPupdate = @"SELECT a.id
  3872. INTO #NewTempERP
  3873. FROM ICSWareHouseLotInfoLog a
  3874. INNER JOIN ICSOtherOut c ON a.TransCode=c.OutCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  3875. INNER JOIN ICSTransfer d ON c.TransferDetailID=d.TransferDetailID AND c.WorkPoint=d.WorkPoint
  3876. WHERE c.OutID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  3877. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  3878. where ID in (select id from #NewTempERP)
  3879. DROP TABLE #NewTempERP
  3880. ";
  3881. }
  3882. //两步调入
  3883. else if (TransType == TransTypeEnum.TwoStepTransferDocIn.GetDescription())
  3884. {
  3885. ERPupdate = @"SELECT a.id
  3886. INTO #NewTempERP
  3887. FROM ICSWareHouseLotInfoLog a
  3888. INNER JOIN ICSOtherIn b ON a.TransCode=b.InCode AND a.TransSequence=b.Sequence AND a.WorkPoint=b.WorkPoint
  3889. INNER JOIN ICSTransfer c ON b.TransferDetailID=c.TransferDetailID AND b.WorkPoint=c.WorkPoint
  3890. WHERE b.InID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  3891. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  3892. where ID in (select id from #NewTempERP)
  3893. DROP TABLE #NewTempERP
  3894. ";
  3895. }
  3896. //销售退货-原条码
  3897. else if (TransType == TransTypeEnum.SalesReturnBack.GetDescription())
  3898. {
  3899. ERPupdate = @"SELECT a.id
  3900. INTO #NewTempERP
  3901. FROM ICSWareHouseLotInfoLog a
  3902. INNER JOIN ICSSDN c ON a.TransCode=c.SDNCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  3903. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  3904. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  3905. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  3906. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  3907. WHERE c.SDNDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND c.Type='2' AND a.BusinessCode ='{7}'
  3908. 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, '') +
  3909. 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}'
  3910. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  3911. where ID in (select id from #NewTempERP)
  3912. DROP TABLE #NewTempERP";
  3913. }
  3914. //其他出库
  3915. else if (TransType == TransTypeEnum.OtherOutDoc.GetDescription())
  3916. {
  3917. ERPupdate = @"SELECT a.id
  3918. INTO #NewTempERP
  3919. FROM ICSWareHouseLotInfoLog a
  3920. INNER JOIN ICSOtherOut c ON a.TransCode=c.OutCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  3921. WHERE c.OutID='{0}' AND a.Identification='{1}' AND a.ERPUpload='0' AND a.BusinessCode ='{7}'
  3922. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  3923. where ID in (select id from #NewTempERP)
  3924. DROP TABLE #NewTempERP
  3925. ";
  3926. }
  3927. //其他入库
  3928. else if (TransType == TransTypeEnum.OtherInDoc.GetDescription())
  3929. {
  3930. ERPupdate = @"SELECT a.id
  3931. INTO #NewTempERP
  3932. FROM ICSWareHouseLotInfoLog a
  3933. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  3934. INNER JOIN ICSOtherIn c ON b.TransCode=c.InCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  3935. WHERE c.InID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  3936. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  3937. where ID in (select id from #NewTempERP)
  3938. DROP TABLE #NewTempERP
  3939. ";
  3940. }
  3941. //拆卸单
  3942. else if (TransType == TransTypeEnum.DisassemblyDoc.GetDescription())
  3943. {
  3944. ERPupdate = @"UPDATE d set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  3945. FROM ICSWareHouseLotInfoLog a
  3946. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  3947. INNER JOIN ICSDisassemblyDoc c ON b.TransCode=c.DABDOCCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  3948. INNER JOIN ICSWareHouseLotInfoLog d ON b.TransCode=d.TransCode AND d.TransSequence='1' AND b.WorkPoint=d.WorkPoint
  3949. WHERE c.DABDOCID='{0}' AND a.Identification='{1}' AND d.ERPUpload='0' AND a.BusinessCode ='{7}'
  3950. UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  3951. FROM ICSWareHouseLotInfoLog a
  3952. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  3953. INNER JOIN ICSDisassemblyDoc c ON b.TransCode=c.DABDOCCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  3954. WHERE c.DABDOCID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND c.DABDOCType='2' AND a.BusinessCode ='{7}'
  3955. ";
  3956. }
  3957. //领料申请单
  3958. else if (TransType == TransTypeEnum.MOApply.GetDescription())
  3959. {
  3960. //ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  3961. // FROM ICSWareHouseLotInfoLog a
  3962. // INNER JOIN ICSMOApply c ON a.TransCode=c.ApplyCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  3963. // INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  3964. // INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  3965. // INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  3966. // LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  3967. // WHERE c.ApplyDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  3968. // 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, '') +
  3969. // 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}'
  3970. // ";
  3971. ERPupdate = @"SELECT a.id
  3972. INTO #NewTempERP
  3973. FROM ICSWareHouseLotInfoLog a
  3974. INNER JOIN ICSMOApply c ON a.TransCode=c.ApplyCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  3975. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  3976. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  3977. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  3978. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  3979. WHERE c.ApplyDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  3980. 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, '') +
  3981. 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}'
  3982. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  3983. where ID in (select id from #NewTempERP)
  3984. DROP TABLE #NewTempERP
  3985. ";
  3986. }
  3987. //补料申请单
  3988. else if (TransType == TransTypeEnum.MOReplenishment.GetDescription())
  3989. {
  3990. //ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  3991. // FROM ICSWareHouseLotInfoLog a
  3992. // INNER JOIN ICSMOApply c ON a.TransCode=c.ApplyCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  3993. // INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  3994. // INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  3995. // INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  3996. // LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  3997. // WHERE c.ApplyDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  3998. // 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, '') +
  3999. // 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}'
  4000. // ";
  4001. ERPupdate = @"SELECT a.id
  4002. INTO #NewTempERP
  4003. FROM ICSWareHouseLotInfoLog a
  4004. INNER JOIN ICSMOReplenishment c ON a.TransCode=c.ReplenishmentCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  4005. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  4006. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  4007. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  4008. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  4009. WHERE c.ReplenishmentDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  4010. 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, '') +
  4011. 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}'
  4012. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  4013. where ID in (select id from #NewTempERP)
  4014. DROP TABLE #NewTempERP
  4015. ";
  4016. }
  4017. //委外领料申请单
  4018. else if (TransType == TransTypeEnum.OOApply.GetDescription())
  4019. {
  4020. //ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  4021. // FROM ICSWareHouseLotInfoLog a
  4022. // INNER JOIN ICSOApply c ON a.TransCode=c.ApplyCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  4023. // INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  4024. // INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  4025. // INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  4026. // LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  4027. // WHERE c.ApplyDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  4028. // 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, '') +
  4029. // 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}'
  4030. // ";
  4031. ERPupdate = @"SELECT a.id
  4032. INTO #NewTempERP
  4033. FROM ICSWareHouseLotInfoLog a
  4034. INNER JOIN ICSOApply c ON a.TransCode=c.ApplyCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  4035. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  4036. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  4037. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  4038. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  4039. WHERE c.ApplyDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  4040. 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, '') +
  4041. 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}'
  4042. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  4043. where ID in (select id from #NewTempERP)
  4044. DROP TABLE #NewTempERP
  4045. ";
  4046. }
  4047. //开立材料出库
  4048. else if (TransType == TransTypeEnum.MOIssue.GetDescription())
  4049. {
  4050. ERPupdate = @"SELECT a.id
  4051. INTO #NewTempERP
  4052. FROM ICSWareHouseLotInfoLog a
  4053. INNER JOIN ICSMOIssue c ON a.TransCode=c.IssueCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  4054. WHERE c.IssueID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  4055. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  4056. where ID in (select id from #NewTempERP)
  4057. DROP TABLE #NewTempERP
  4058. ";
  4059. }
  4060. //开立委外材料出库
  4061. else if (TransType == TransTypeEnum.OOIssue.GetDescription())
  4062. {
  4063. ERPupdate = @"SELECT a.id
  4064. INTO #NewTempERP
  4065. FROM ICSWareHouseLotInfoLog a
  4066. INNER JOIN ICSMOIssue c ON a.TransCode=c.IssueCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  4067. WHERE c.IssueID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  4068. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  4069. where ID in (select id from #NewTempERP)
  4070. DROP TABLE #NewTempERP
  4071. ";
  4072. }
  4073. //开立红字入库单
  4074. else if (TransType == TransTypeEnum.PurchaseReceive.GetDescription())
  4075. {
  4076. ERPupdate = @"SELECT a.id
  4077. INTO #NewTempERP
  4078. FROM ICSWareHouseLotInfoLog a
  4079. INNER JOIN ICSPurchaseReceive c ON a.TransCode=c.RCVCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  4080. WHERE c.RCVID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND c.Type='2' AND a.BusinessCode ='{7}'
  4081. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  4082. where ID in (select id from #NewTempERP)
  4083. DROP TABLE #NewTempERP
  4084. ";
  4085. }
  4086. //开立委外红字入库单
  4087. else if (TransType == TransTypeEnum.OutsourcingReceiveDocNegative.GetDescription())
  4088. {
  4089. ERPupdate = @"SELECT a.id
  4090. INTO #NewTempERP
  4091. FROM ICSWareHouseLotInfoLog a
  4092. INNER JOIN ICSOutsourcingReceive c ON a.TransCode=c.RCVCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  4093. WHERE c.RCVID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND c.Type='2' AND a.BusinessCode ='{7}'
  4094. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  4095. where ID in (select id from #NewTempERP)
  4096. DROP TABLE #NewTempERP
  4097. ";
  4098. }
  4099. //借用
  4100. else if (TransType == TransTypeEnum.BrrowDoc.GetDescription())
  4101. {
  4102. ERPupdate = @"SELECT a.id
  4103. INTO #NewTempERP
  4104. FROM ICSWareHouseLotInfoLog a
  4105. INNER JOIN ICSBrrow c ON a.TransCode=c.BrrowCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  4106. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  4107. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  4108. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  4109. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  4110. WHERE c.BrrowDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  4111. 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, '') +
  4112. 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}'
  4113. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  4114. where ID in (select id from #NewTempERP)
  4115. DROP TABLE #NewTempERP";
  4116. }
  4117. //归还
  4118. else if (TransType == TransTypeEnum.ReturnDoc.GetDescription())
  4119. {
  4120. ERPupdate = @"SELECT a.id
  4121. INTO #NewTempERP
  4122. FROM ICSWareHouseLotInfoLog a
  4123. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  4124. INNER JOIN ICSReturn c ON b.TransCode=c.ReturnCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  4125. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  4126. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  4127. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  4128. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  4129. WHERE c.ReturnDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  4130. 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, '') +
  4131. 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}'
  4132. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  4133. where ID in (select id from #NewTempERP)
  4134. DROP TABLE #NewTempERP";
  4135. }
  4136. ERPupdate = string.Format(ERPupdate, SourceDetailID, Identification, ID, DetailID, Code, Sequence, col, BusinessCode);
  4137. if (!DBHelper.ExecuteNonQuery(ERPupdate, cmd))
  4138. {
  4139. throw new Exception(TransType + language.GetNameByCode("WMSAPIInfo175"));//"回写日志失败!");
  4140. }
  4141. }
  4142. catch (Exception ex)
  4143. {
  4144. log.Debug(ex.ToString());
  4145. log.Debug(TransType + Environment.NewLine + ERPupdate);
  4146. throw;
  4147. }
  4148. }
  4149. /// <summary>
  4150. /// 倒冲时子件已领数量回写
  4151. /// </summary>
  4152. public static void DetailQTYUpdate()
  4153. {
  4154. }
  4155. /// <summary>
  4156. /// 生成条码
  4157. /// </summary>
  4158. /// <param name="LotNo"></param>
  4159. /// <param name="Quantity"></param>
  4160. /// <param name="TransCode"></param>
  4161. /// <param name="TransSequence"></param>
  4162. /// <param name="WorkPoint"></param>
  4163. /// <param name="Identification"></param>
  4164. /// <param name="User"></param>
  4165. /// <param name="InvCode"></param>
  4166. /// <param name="BusinessCode"></param>
  4167. /// <param name="ProjectCode"></param>
  4168. /// <param name="BatchCode"></param>
  4169. /// <param name="Version"></param>
  4170. /// <param name="Brand"></param>
  4171. /// <param name="cFree1"></param>
  4172. /// <param name="cFree2"></param>
  4173. /// <param name="cFree3"></param>
  4174. /// <param name="cFree4"></param>
  4175. /// <param name="cFree5"></param>
  4176. /// <param name="cFree6"></param>
  4177. /// <param name="cFree7"></param>
  4178. /// <param name="cFree8"></param>
  4179. /// <param name="cFree9"></param>
  4180. /// <param name="cFree10"></param>
  4181. /// <param name="cmd"></param>
  4182. /// <param name="language"></param>
  4183. public static void CreateLotNo(string LotNo, string Quantity, string TransCode, string TransSequence, string WorkPoint, string Identification, string User, string InvCode, string BusinessCode,
  4184. 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)
  4185. {
  4186. try
  4187. {
  4188. String EffectiveEnable = "";
  4189. String Colspan = "";
  4190. String IDD = "";
  4191. int EffectiveDays = 0;
  4192. String Time = "";
  4193. int EffectiveDayss = 0;
  4194. DateTime dtt;
  4195. DateTime now = DateTime.Now;
  4196. string sql = string.Empty;
  4197. //string sql = @"select EffectiveEnable,EffectiveDays from ICSInventory a
  4198. // Left Join ICSMO b ON a.InvCode=b.InvCode and a.WorkPoint = b.WorkPoint
  4199. // where b.MoCode='{0}' and b.WorkPoint='{1}'";
  4200. //sql = string.Format(sql, TransCode, WorkPoint);
  4201. //DataTable dt = DBHelper.SQlReturnData(sql, cmd);
  4202. //if (dt.Rows.Count == 0)
  4203. //{
  4204. // throw new Exception(language.GetNameByCode("WMSAPIInfo366"));
  4205. //}
  4206. //else
  4207. //{
  4208. // EffectiveEnable = dt.Rows[0]["EffectiveEnable"].ToString();
  4209. //EffectiveDays = Convert.ToInt32(dt.Rows[0]["EffectiveDays"]);
  4210. //}
  4211. //EffectiveDayss = Convert.ToInt32(EffectiveDays);
  4212. //if (!EffectiveEnable.Equals("False"))
  4213. //{
  4214. int year = now.Year;
  4215. int month = now.Month;
  4216. int day = now.Day;
  4217. int n = DateTime.DaysInMonth(year, month);
  4218. int k = day + EffectiveDays;
  4219. if (k > n)
  4220. {
  4221. day = EffectiveDays - (n - day);
  4222. month = month + 1;
  4223. if (month > 12)
  4224. {
  4225. month = 1;
  4226. year = year + 1;
  4227. }
  4228. }
  4229. else
  4230. {
  4231. day = day + EffectiveDays;
  4232. }
  4233. Time = year + "-" + month + "-" + day;
  4234. //}
  4235. //else
  4236. //{
  4237. // Time = "2999-12-31 00:00:00.000";
  4238. //}
  4239. dtt = Convert.ToDateTime(Time);
  4240. //检验自由项
  4241. Colspan = ProjectCode + "~" + BatchCode + "~" + Version
  4242. + "~" + Brand + "~" + cFree1
  4243. + "~" + cFree2 + "~" + cFree3 + "~" + cFree4
  4244. + "~" + cFree5 + "~" + cFree6 + "~" + cFree7
  4245. + "~" + cFree8 + "~" + cFree9 + "~" + cFree10;
  4246. sql = @"select ID,Colspan from ICSExtension a
  4247. where Colspan='{0}' and WorkPoint='{1}'";
  4248. sql = string.Format(sql, Colspan, WorkPoint);
  4249. DataTable dttt = DBHelper.SQlReturnData(sql, cmd);
  4250. if (dttt.Rows.Count == 0)
  4251. {
  4252. IDD = Guid.NewGuid().ToString();
  4253. sql = @"Insert into ICSExtension(ID, Colspan, ProjectCode, BatchCode, Version, Brand, cFree1, cFree2, cFree3, cFree4, cFree5, cFree6, cFree7, cFree8, cFree9, cFree10, MTIME, MUSER, MUSERName, WorkPoint)
  4254. 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}'";
  4255. sql = string.Format(sql, Colspan, ProjectCode, BatchCode, Version, Brand, cFree1, cFree2, cFree3, cFree4, cFree5, cFree6, cFree7, cFree8, cFree9, cFree10, User, WorkPoint, IDD);
  4256. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4257. {
  4258. throw new Exception(language.GetNameByCode("WMSAPIInfo366"));
  4259. }
  4260. }
  4261. else
  4262. {
  4263. IDD = dttt.Rows[0]["ID"].ToString();
  4264. }
  4265. //存入条码表
  4266. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{4}')
  4267. BEGIN
  4268. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  4269. RETURN
  4270. END
  4271. INSERT INTO ICSInventoryLot(ID,LotNo,InvCode,ProductDate,ExpirationDate,
  4272. Quantity,Amount,ExtensionID,Type,PrintTimes,
  4273. LastPrintUser,LastPrintTime,MUSER,MUSERName,MTIME,
  4274. WorkPoint,EATTRIBUTE1)
  4275. SELECT TOP 1 NEWID(),'{0}','{8}',GETDATE(),'{6}',
  4276. '{1}','0','{7}','16',null,
  4277. null,null,'{2}' ,f.F_RealName ,GETDATE(),
  4278. '{4}' ,''
  4279. FROM Sys_SRM_User f
  4280. where f.F_Account='{2}' and f.F_Location='{4}'
  4281. ";
  4282. sql = string.Format(sql, LotNo, Quantity, User, TransCode, WorkPoint, TransSequence, dtt, IDD,InvCode);
  4283. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4284. {
  4285. throw new Exception(language.GetNameByCode("WMSAPIInfo366"));
  4286. }
  4287. ///存入条码关联表
  4288. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{3}')
  4289. BEGIN
  4290. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  4291. RETURN
  4292. END
  4293. INSERT INTO ICSInventoryLotDetail(LotNo,TransCode,TransSequence,MUSER,MUSERName,MTIME,
  4294. WorkPoint,EATTRIBUTE1)
  4295. SELECT '{4}','{0}','{1}',f.F_Account ,f.F_RealName,GETDATE(),
  4296. a.WorkPoint,''
  4297. FROM ICSInventoryLot a
  4298. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  4299. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  4300. WHERE a.LotNo='{5}' AND a.WorkPoint='{3}'
  4301. ";
  4302. sql = string.Format(sql, TransCode, TransSequence, User, WorkPoint, LotNo, OLDLotNo);
  4303. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4304. {
  4305. throw new Exception(language.GetNameByCode("WMSAPIInfo367"));
  4306. }
  4307. //存入库存表
  4308. sql = @"INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  4309. SELECT NEWID(),a.LotNo ,e.WarehouseCode,d.LocationCode,a.InvCode ,'0',SYSDATETIME(),'0',f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint ,''
  4310. FROM ICSInventoryLot a
  4311. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  4312. --INNER JOIN ICSOApplyNegDetail c ON b.TransCode=c.OApplyNegCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  4313. INNER JOIN ICSLocation d ON d.LocationCode='{4}' AND a.WorkPoint=d.WorkPoint
  4314. INNER JOIN ICSWarehouse e ON d.WHID=e.ID AND d.WorkPoint=e.WorkPoint
  4315. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  4316. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  4317. sql = string.Format(sql, LotNo, WorkPoint, User, Quantity, LocationCode);
  4318. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4319. {
  4320. throw new Exception(language.GetNameByCode("WMSAPIInfo165"));
  4321. }
  4322. }
  4323. catch (Exception)
  4324. {
  4325. throw;
  4326. }
  4327. }
  4328. }
  4329. }