@ -978,6 +978,267 @@ namespace ICSSoft.DataProject
return lstDt ;
}
/// <summary>
/// 减少库存(货柜)
/// </summary>
/// <param name="Identification"></param>
/// <param name="TransCode"></param>
/// <param name="TransSequence"></param>
/// <param name="LotNo"></param>
/// <param name="Quantity"></param>
/// <param name="User"></param>
/// <param name="WorkPoint"></param>
/// <param name="TransType"></param>
/// <param name="BusinessCode"></param>
/// <param name="cmd"></param>
public static DataTable WareHouseLotInfoDownHG ( string Identification , string TransCode , string User ,
string WorkPoint , string TransType , string BusinessCode , SqlCommand cmd , Dictionary < string , string > language , string MergeID = "" )
{
String LotEnable = "" ;
String PrintEnable = "" ;
string lotstr = "" ;
int result = 0 ;
List < string > NewBarCodeList = new List < string > ( ) ;
DataTable dtLotno = new DataTable ( ) ;
DataTable lstDt = new DataTable ( ) ;
try
{
///更新库存
string sql = @ "UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
IF EXISTS ( SELECT a . LotNo FROM ICSWareHouseLotInfo a WHERE a . LotNo = ' { 0 } ' AND a . WorkPoint = ' { 1 } ' AND Quantity < 0 )
BEGIN
RAISERROR ( ' " + language.GetNameByCode(" WMSAPIInfo167 ") + @" ' , 1 6 , 1 ) ;
RETURN
END ";
sql = string . Format ( sql , LotNo , WorkPoint , Quantity ) ;
if ( ! DBHelper . ExecuteNonQuery ( sql , cmd ) )
{
throw new Exception ( language . GetNameByCode ( "WMSAPIInfo168" ) ) ; //"库存更新失败!");
}
//出库后取消占料
sql = @ "update A SET A.LockQuantity-=B.Quantity FROM ICSWareHouseLotInfo A
LEFT JOIN ICSWareHouseLotInfoLog B ON B . LotNo = A . LotNo AND B . TransType = ' 1 5 ' AND B . WorkPoint = A . WorkPoint
WHERE A . LotNo = ' { 0 } ' AND B . TransCode = ' { 1 } ' AND B . TransSequence = ' { 2 } ' AND A . WorkPoint = ' { 3 } '
DELETE FROM ICSWareHouseLotInfoLog
WHERE LotNo = ' { 0 } ' AND TransCode = ' { 1 } ' AND TransSequence = ' { 2 } ' AND WorkPoint = ' { 3 } ' AND TransType = ' 1 5 ' ";
sql = string . Format ( sql , LotNo , TransCode , TransSequence , WorkPoint ) ;
if ( ! DBHelper . ExecuteNonQuery ( sql , cmd ) )
{
throw new Exception ( "占料信息解除失败!" ) ; //"库存更新失败!");
}
//检验是否分批
sql = @ "SELECT b.LotEnable,b.PrintEnable FROM ICSInventoryLot a
LEFT JOIN ICSInventory b ON a . InvCode = b . InvCode AND a . WorkPoint = b . WorkPoint
where a . LotNo = ' { 0 } ' and a . WorkPoint = ' { 1 } '
";
sql = string . Format ( sql , LotNo , WorkPoint ) ;
DataTable dt = DBHelper . SQlReturnData ( sql , cmd ) ;
if ( dt . Rows . Count = = 0 )
{
throw new Exception ( language . GetNameByCode ( "WMSAPIInfo369" ) ) ;
}
else
{
LotEnable = dt . Rows [ 0 ] [ "LotEnable" ] . ToString ( ) ;
PrintEnable = dt . Rows [ 0 ] [ "PrintEnable" ] . ToString ( ) ;
}
if ( LotEnable . Equals ( "True" ) )
{
///分批前添加日志
sql = @ "IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
BEGIN
RAISERROR ( ' " + string.Format(language.GetNameByCode(" WMSAPIInfo060 "), " { 2 } ") + @" ' , 1 6 , 1 ) ;
RETURN
END
INSERT INTO ICSWareHouseLotInfoLog ( ID , Identification , TransCode , TransSequence , LotNo , InvCode ,
FromWarehouseCode , FromLocationCode , ToWarehouseCode , ToLocationCode , Quantity ,
Memo , Lock , TransType , BusinessCode , ERPUpload , ERPID ,
ERPDetailID , ERPCode , ERPSequence , MUSER , MUSERName ,
MTIME , WorkPoint , EATTRIBUTE1 )
SELECT NEWID ( ) , ' { 3 } ',' { 7 } ',' { 8 } ' , a . LotNo , a . InvCode ,
c . WarehouseCode , c . LocationCode , ' ',' ' , c . Quantity + { 6 } ,
' ',' 0 ',' { 4 } ',' 3 1 ',' 0 ',' ' ,
' ',' ',' ' , f . F_Account , f . F_RealName ,
SYSDATETIME ( ) , a . WorkPoint , ' '
FROM ICSInventoryLot a
INNER JOIN ICSInventoryLotDetail b ON a . LotNo = b . LotNo AND a . WorkPoint = b . WorkPoint
INNER JOIN ICSWareHouseLotInfo c ON a . LotNo = c . LotNo AND a . WorkPoint = c . WorkPoint
INNER JOIN Sys_SRM_User f ON f . F_Account = ' { 2 } ' AND a . WorkPoint = f . F_Location
WHERE a . LotNo = ' { 0 } ' AND a . WorkPoint = ' { 1 } '
";
sql = string . Format ( sql , LotNo , WorkPoint , User , Identification , TransType , BusinessCode , Quantity , TransCode , TransSequence ) ;
if ( ! DBHelper . ExecuteNonQuery ( sql , cmd ) )
{
throw new Exception ( language . GetNameByCode ( "WMSAPIInfo166" ) ) ;
}
#region 获取分批后的条码(lotstr)
sql = @ "SELECT TOP 1 LotNO FROM ICSInventoryLot WHERE EATTRIBUTE1='{0}' AND WorkPoint='{1}'
ORDER BY CAST ( SUBSTRING ( LotNO , ( LEN ( LotNO ) - CHARINDEX ( '-' , REVERSE ( LotNO ) ) + 1 ) + 1 , CHARINDEX ( '-' , REVERSE ( LotNO ) ) - 1 ) AS INT ) DESC ";
sql = string . Format ( sql , LotNo , WorkPoint ) ;
dt = DBHelper . SQlReturnData ( sql , cmd ) ;
if ( dt . Rows . Count = = 0 )
{
lotstr = LotNo + "-" + 1 ;
}
else
{
lotstr = LotNo + "-" + ( Convert . ToInt32 ( dt . Rows [ 0 ] [ "LotNO" ] . ToString ( ) . Split ( '-' ) [ dt . Rows [ 0 ] [ "LotNO" ] . ToString ( ) . Split ( '-' ) . Length - 1 ] ) + 1 ) . ToString ( ) ;
}
NewBarCodeList . Add ( lotstr ) ; //将分批后新条码添加到新集合
#endregion
#region 将分批后的条码记录插入条码表,库存表及日志表并将原条码库存数量清零
sql = @ "INSERT INTO ICSInventoryLot(ID,LotNo,InvCode,ProductDate,ExpirationDate,
Quantity , Amount , ExtensionID , Type , PrintTimes ,
LastPrintUser , LastPrintTime , MUSER , MUSERName , MTIME ,
WorkPoint , EATTRIBUTE1 )
SELECT TOP 1 NEWID ( ) , ' { 0 } ' , a . InvCode , a . ProductDate , a . ExpirationDate ,
' { 2 } ' , a . Amount , a . ExtensionID , a . Type , a . PrintTimes ,
a . LastPrintUser , a . LastPrintTime , a . MUSER , a . MUSERName , GETDATE ( ) ,
a . WorkPoint , ' { 1 } '
From ICSInventoryLot a
where a . LotNo = ' { 1 } ' and a . WorkPoint = ' { 3 } ' ";
sql = string . Format ( sql , lotstr , LotNo , Quantity , WorkPoint ) ;
cmd . CommandText = sql ;
result = cmd . ExecuteNonQuery ( ) ;
if ( result < = 0 )
{
throw new Exception ( language . GetNameByCode ( "WMSAPIInfo195" ) ) ; //条码分批后条码表存入失败!
}
sql = @ "INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
select NEWID ( ) , ' { 0 } ' , WarehouseCode , LocationCode , InvCode , '0' , InDate , LockQuantity
, MUSER , MUSERName , GETDATE ( ) , ' { 3 } ',' '
from ICSWareHouseLotInfo
where LotNO = ' { 1 } ' AND WorkPoint = ' { 3 } ' ";
sql = string . Format ( sql , lotstr , LotNo , Quantity , WorkPoint ) ;
cmd . CommandText = sql ;
result = cmd . ExecuteNonQuery ( ) ;
if ( result < = 0 )
{
throw new Exception ( language . GetNameByCode ( "WMSAPIInfo196" ) ) ; //条码分批后库存表存入失败!
}
//插入条码单据表
sql = @ "INSERT INTO ICSInventoryLotDetail(LotNo,TransCode,TransSequence,MUSER,MUSERName,MTIME,WorkPoint)
SELECT ' { 3 } ' , b . TransCode , b . TransSequence , f . F_Account , f . F_RealName , SYSDATETIME ( ) , a . WorkPoint
FROM ICSInventoryLot a
INNER JOIN ICSInventoryLotDetail b ON a . LotNo = b . LotNo AND a . WorkPoint = b . WorkPoint
INNER JOIN Sys_SRM_User f ON f . F_Account = ' { 2 } ' AND a . WorkPoint = f . F_Location
WHERE a . LotNo = ' { 0 } ' AND a . WorkPoint = ' { 1 } ' ";
sql = string . Format ( sql , LotNo , WorkPoint , User , lotstr ) ;
if ( ! DBHelper . ExecuteNonQuery ( sql , cmd ) )
{
throw new Exception ( language . GetNameByCode ( "WMSAPIInfo174" ) ) ; //"条码单据表写入失败!");
}
sql = @ "INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
FromWarehouseCode , FromLocationCode , ToWarehouseCode , ToLocationCode , Quantity ,
Memo , Lock , TransType , BusinessCode , ERPUpload , ERPID ,
ERPDetailID , ERPCode , ERPSequence , MUSER , MUSERName ,
MTIME , WorkPoint , EATTRIBUTE1 , LogID )
SELECT NEWID ( ) , ' { 3 } ',' { 4 } ',' { 5 } ',' { 1 0 } ' , a . InvCode ,
c . WarehouseCode , c . LocationCode , ' ',' ',' { 6 } ' ,
' ',' 0 ',' { 7 } ',' { 8 } ',' 0 ',' ' ,
' ',' ',' ' , f . F_Account , f . F_RealName ,
SYSDATETIME ( ) , a . WorkPoint , ' ',' { 9 } '
FROM ICSInventoryLot a
INNER JOIN ICSWareHouseLotInfo c ON a . LotNo = c . LotNo AND a . WorkPoint = c . WorkPoint
INNER JOIN Sys_SRM_User f ON f . F_Account = ' { 2 } ' AND a . WorkPoint = f . F_Location
WHERE a . LotNo = ' { 0 } ' AND a . WorkPoint = ' { 1 } '
";
sql = string . Format ( sql , LotNo , WorkPoint , User , Identification , TransCode , TransSequence , Quantity , TransType , BusinessCode , MergeID , lotstr ) ;
cmd . CommandText = sql ;
result = cmd . ExecuteNonQuery ( ) ;
if ( result < = 0 )
{
throw new Exception ( language . GetNameByCode ( "WMSAPIInfo197" ) ) ; //条码分批后库存日志表存入失败!
}
if ( PrintEnable . Equals ( "True" ) )
{
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
from ICSWareHouseLotInfolog A
left join ICSInventoryLot B on A . LotNO = B . LotNO and a . WorkPoint = b . WorkPoint
left join ICSWareHouseLotInfo C ON A . LotNO = C . LotNO and a . WorkPoint = c . WorkPoint
left join ICSInventory D on b . INVCODE = d . INVCODE and b . WorkPoint = d . WorkPoint
where A . lotno like ' { 0 } % ' and a . workpoint = ' { 1 } '
";
sql = string . Format ( sql , LotNo , WorkPoint ) ;
dtLotno = DBHelper . SQlReturnData ( sql , cmd ) ;
lstDt = dtLotno ;
}
///添加日志
sql = @ "IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
BEGIN
RAISERROR ( ' " + string.Format(language.GetNameByCode(" WMSAPIInfo060 "), " { 2 } ") + @" ' , 1 6 , 1 ) ;
RETURN
END
INSERT INTO ICSWareHouseLotInfoLog ( ID , Identification , TransCode , TransSequence , LotNo , InvCode ,
FromWarehouseCode , FromLocationCode , ToWarehouseCode , ToLocationCode , Quantity ,
Memo , Lock , TransType , BusinessCode , ERPUpload , ERPID ,
ERPDetailID , ERPCode , ERPSequence , MUSER , MUSERName ,
MTIME , WorkPoint , EATTRIBUTE1 , MergeID )
SELECT NEWID ( ) , ' { 3 } ',' { 4 } ',' { 5 } ' , a . LotNo , a . InvCode ,
c . WarehouseCode , c . LocationCode , ' ',' ' , c . Quantity ,
' ',' 0 ',' { 7 } ',' 3 2 ',' 0 ',' ' ,
' ',' ',' ' , f . F_Account , f . F_RealName ,
SYSDATETIME ( ) , a . WorkPoint , ' ',' { 9 } '
FROM ICSInventoryLot a
INNER JOIN ICSWareHouseLotInfo c ON a . LotNo = c . LotNo AND a . WorkPoint = c . WorkPoint
INNER JOIN Sys_SRM_User f ON f . F_Account = ' { 2 } ' AND a . WorkPoint = f . F_Location
WHERE a . LotNo = ' { 0 } ' AND a . WorkPoint = ' { 1 } '
";
sql = string . Format ( sql , LotNo , WorkPoint , User , Identification , TransCode , TransSequence , Quantity , TransType , BusinessCode , MergeID ) ;
if ( ! DBHelper . ExecuteNonQuery ( sql , cmd ) )
{
throw new Exception ( language . GetNameByCode ( "WMSAPIInfo166" ) ) ;
}
#endregion
}
else
{
NewBarCodeList . Add ( LotNo ) ;
///添加日志
sql = @ "INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
FromWarehouseCode , FromLocationCode , ToWarehouseCode , ToLocationCode , Quantity ,
Memo , Lock , TransType , BusinessCode , ERPUpload , ERPID ,
ERPDetailID , ERPCode , ERPSequence , MUSER , MUSERName ,
MTIME , WorkPoint , EATTRIBUTE1 , MergeID )
SELECT NEWID ( ) , ' { 3 } ',' { 4 } ',' { 5 } ' , a . LotNo , a . InvCode ,
c . WarehouseCode , c . LocationCode , ' ',' ',' { 6 } ' ,
' ',' 0 ',' { 7 } ',' { 8 } ',' 0 ',' ' ,
' ',' ',' ',' { 2 } ',' { 2 } ' ,
SYSDATETIME ( ) , a . WorkPoint , ' ',' { 9 } '
FROM ICSInventoryLot a
INNER JOIN ICSWareHouseLotInfo c ON a . LotNo = c . LotNo AND a . WorkPoint = c . WorkPoint
- - INNER JOIN Sys_SRM_User f ON f . F_Account = ' { 2 } ' AND a . WorkPoint = f . F_Location
WHERE a . LotNo = ' { 0 } ' AND a . WorkPoint = ' { 1 } '
";
sql = string . Format ( sql , LotNo , WorkPoint , User , Identification , TransCode , TransSequence , Quantity , TransType , BusinessCode , MergeID ) ;
if ( ! DBHelper . ExecuteNonQuery ( sql , cmd ) )
{
throw new Exception ( language . GetNameByCode ( "WMSAPIInfo166" ) ) ;
}
}
}
catch ( Exception )
{
throw ;
}
return lstDt ;
}
/// <summary>
/// 减少库存(无条码领料)
/// </summary>
xxxxxxxxxx