SAP Business One 9.2: 系统存储过程之二

SAP Bysiness one 9.2在 示例 系统里 SQL Server 数据库名称: sap560 ,

以下是部分存储过程代码:

 

use sap560
go

CREATE PROCEDURE _TmSp_BinLocationListCRPrint
	@type int,
	@binSublevels nvarchar(500),-- (sublevel1From|sublevel1To|sublevel2From|sublevel2To|...)
	@binAttributes nvarchar(500),-- (attr1From|attr1To|attr2From|attr2To|...)
	@binCodeFromTo nvarchar(500),-- (binLocationFrom|binLocationTo|)
	@itemCodeFromTo nvarchar(110),
	@itemGroups nvarchar(max),
	@batchFromTo nvarchar(300),
	@serialFromTo nvarchar(300),
	@binAbsSet nvarchar(max),
	@batchAbs nvarchar(100),
	@serialAbs nvarchar(100),
	@whsCodeFromTo nvarchar(100), -- (warehouseIncludingFrom|warehouseIncludingTo|warehouseExcludingFrom|warehouseExcludingTo|)
	@flag int
	
	AS
	DECLARE
		@displayInactiveBin nvarchar(1),
		@T_SQL nvarchar(max),
		
		@ADD_RANGE_COND_STR nvarchar(max) = 
		N'IF @from_value <> '''' 
			SET @T_SQL = @T_SQL + '' AND '' + @table_alias + ''.'' + @table_field + ''>=(N'''''' + @from_value + '''''')''
		IF @to_value <> ''''
			SET @T_SQL = @T_SQL + '' AND '' + @table_alias + ''.'' + @table_field + ''<=(N'''''' + @to_value + '''''')''',
			
		@ADD_BIN_SUBLEVEL_COND nvarchar(max) = 
		N'SET @table_alias = @T_OBIN
		SET @table_field = ''SL1Code''
		SET @from_value = @binSbl1From
		SET @to_value = @binSbl1To
		$ADD_RANGE_COND_STR
		
		SET @table_field = ''SL2Code''
		SET @from_value = @binSbl2From
		SET @to_value = @binSbl2To
		$ADD_RANGE_COND_STR
		
		SET @table_field = ''SL3Code''
		SET @from_value = @binSbl3From
		SET @to_value = @binSbl3To
		$ADD_RANGE_COND_STR
		
		SET @table_field = ''SL4Code''
		SET @from_value = @binSbl4From
		SET @to_value = @binSbl4To
		$ADD_RANGE_COND_STR',
		
		@ADD_BIN_ATTR_COND nvarchar(max) =
		N'SET @table_alias = @T_OBIN
		SET @table_field = ''Attr1Val''
		SET @from_value = @binAttr1From
		SET @to_value = @binAttr1To
		$ADD_RANGE_COND_STR
		
		SET @table_field = ''Attr2Val''
		SET @from_value = @binAttr2From
		SET @to_value = @binAttr2To
		$ADD_RANGE_COND_STR
		
		SET @table_field = ''Attr3Val''
		SET @from_value = @binAttr3From
		SET @to_value = @binAttr3To
		$ADD_RANGE_COND_STR
		
		SET @table_field = ''Attr4Val''
		SET @from_value = @binAttr4From
		SET @to_value = @binAttr4To
		$ADD_RANGE_COND_STR
		
		SET @table_field = ''Attr5Val''
		SET @from_value = @binAttr5From
		SET @to_value = @binAttr5To
		$ADD_RANGE_COND_STR
		
		SET @table_field = ''Attr6Val''
		SET @from_value = @binAttr6From
		SET @to_value = @binAttr6To
		$ADD_RANGE_COND_STR
		
		SET @table_field = ''Attr7Val''
		SET @from_value = @binAttr7From
		SET @to_value = @binAttr7To
		$ADD_RANGE_COND_STR
		
		SET @table_field = ''Attr8Val''
		SET @from_value = @binAttr8From
		SET @to_value = @binAttr8To
		$ADD_RANGE_COND_STR
		
		SET @table_field = ''Attr9Val''
		SET @from_value = @binAttr9From
		SET @to_value = @binAttr9To
		$ADD_RANGE_COND_STR
		
		SET @table_field = ''Attr10Val''
		SET @from_value = @binAttr10From
		SET @to_value = @binAttr10To
		$ADD_RANGE_COND_STR',
		
		@ADD_BIN_CODE_COND nvarchar(max) =
		N'SET @table_alias = @T_OBIN
		SET @table_field = ''BinCode''
		SET @from_value = @binLocCodeFrom
		SET @to_value = @binLocCodeTo
		$ADD_RANGE_COND_STR',
		
		@ADD_WHS_INCLUD_COND nvarchar(max) =
		N'SET @table_alias = @T_OBIN
		SET @table_field = ''WhsCode''
		SET @from_value = @whsIncludingFrom
		SET @to_value = @whsIncludingTo
		$ADD_RANGE_COND_STR',
		
		@ADD_WHS_EXCLUD_COND nvarchar(max) =
		N'SET @table_alias = @T_OBIN
		SET @table_field = ''WhsCode''
		SET @from_value = @whsExcludingFrom
		SET @to_value = @whsExcludingTo
		IF @from_value <> '''' OR @to_value <> ''''
			BEGIN
				SET @T_SQL = @T_SQL + '' AND (''
				IF @from_value <> ''''
					SET @T_SQL = @T_SQL + @table_alias + ''.'' + @table_field + ''<(N'''''' + @from_value + '''''')''
				IF @to_value <> ''''
					BEGIN
						IF @from_value <> ''''
							SET @T_SQL = @T_SQL + '' OR '' + @table_alias + ''.'' + @table_field + ''>(N'''''' + @to_value + '''''')''
						ELSE
					
		SET @T_SQL = @T_SQL + @table_alias + ''.'' + @table_field + ''>(N'''''' + @to_value + '''''')''
					END
				SET @T_SQL = @T_SQL + '') ''
			END',
		
		@ADD_INACTIVE_BIN_COND nvarchar(max) =
		N'IF @displayInactiveBin = ''N''
			SET @T_SQL = @T_SQL + '' AND '' + @T_OBIN + ''.Disabled = ''''N'''' ''',
		
		@ParmDefinition nvarchar(max) =
		N'
		@binSublevels nvarchar(500),
		@binAttributes nvarchar(500),
		@binCodeFromTo nvarchar(500),
		@itemCodeFromTo nvarchar(110),
		@itemGroups nvarchar(max),
		@batchFromTo nvarchar(300),
		@serialFromTo nvarchar(300),
		@binAbsSet nvarchar(max),
		@batchAbs nvarchar(100),
		@serialAbs nvarchar(100),
		@whsCodeFromTo nvarchar(100),
		@displayInactiveBin nvarchar(1),
	
		@T_SQL nvarchar(max) = N'''',
		
		@BIN_SUBLEVEL_LENGTH int = 50,
		@BIN_ATTR_LENGTH int = 20,
		@BIN_LOC_CODE_LENGTH int = 228,
		@ITEM_CODE_LENGTH int = 50,
		@SNB_NUMBER_LENGTH int = 36,
		@SNB_ATTR_LENGTH int = 32,
		@WHS_CODE_LENGTH int = 8,
		
		@BIN_SUBLEVEL_COUNT int = 4,
		@BIN_ATTR_COUNT int = 10,
		
		@T_OBIN nvarchar(4) = N''OBIN'',
		@T_OIBQ nvarchar(4) = N''OIBQ'',
		@T_OBBQ nvarchar(4) = N''OBBQ'',
		@T_OSBQ nvarchar(4) = N''OSBQ'',
		@T_OITM nvarchar(4) = N''OITM'',
		@T_OBTN nvarchar(4) = N''OBTN'',
		@T_OSRN nvarchar(4) = N''OSRN'',
		@T_OITB nvarchar(4) = N''OITB'',
		@T_ITM_RTRICT nvarchar(10) = N''ITM_RTRICT'',
		@T_BATCH_RTRICT nvarchar(12) = N''BATCH_RTRICT'',
		@T_REPLENISH_QTY nvarchar(20) = N''REPLENISH_QTY'',
		
		@ITM_RTRICT_SPC_ITM nvarchar(4) = N''1'',
		@ITM_RTRICT_SNG_ITM nvarchar(4) = N''2'',
		@ITM_RTRICT_SPC_ITM_GROUP nvarchar(4) = N''3'',
		@ITM_RTRICT_SNG_ITM_GROUP nvarchar(4) = N''4'',

		@binSbl1From nvarchar(50) = N'''',
		@binSbl1To nvarchar(50) = N'''',
		@binSbl2From nvarchar(50) = N'''',
		@binSbl2To nvarchar(50) = N'''',
		@binSbl3From nvarchar(50) = N'''',
		@binSbl3To nvarchar(50) = N'''',		
		@binSbl4From nvarchar(50) = N'''',
		@binSbl4To nvarchar(50) = N'''',
		
		@binAttr1From nvarchar(20) = N'''',
		@binAttr1To nvarchar(20) = N'''',
		@binAttr2From nvarchar(20) = N'''',
		@binAttr2To nvarchar(20) = N'''',
		@binAttr3From nvarchar(20) = N'''',
		@binAttr3To nvarchar(20) = N'''',
		@binAttr4From nvarchar(20) = N'''',
		@binAttr4To nvarchar(20) = N'''',
		@binAttr5From nvarchar(20) = N'''',
		@binAttr5To nvarchar(20) = N'''',
		@binAttr6From nvarchar(20) = N'''',
		@binAttr6To nvarchar(20) = N'''',
		@binAttr7From nvarchar(20) = N'''',
		@binAttr7To nvarchar(20) = N'''',
		@binAttr8From nvarchar(20) = N'''',
		@binAttr8To nvarchar(20) = N'''',
		@binAttr9From nvarchar(20) = N'''',
		@binAttr9To nvarchar(20) = N'''',
		@binAttr10From nvarchar(20) = N'''',
		@binAttr10To nvarchar(20) = N'''',
		
		@binLocCodeFrom nvarchar(228) = N'''',
		@binLocCodeTo nvarchar(228) = N'''',
		
		@itemCodeFrom nvarchar(50) = N'''',
		@itemCodeTo nvarchar(50) = N'''',
		
		@batchNumberFrom nvarchar(36) = N'''',
		@batchNumberTo nvarchar(36) = N'''',
		@batchAttr1From nvarchar(32) = N'''',
		@batchAttr1To nvarchar(32) = N'''',
		@batchAttr2From nvarchar(32) = N'''',
		@batchAttr2To nvarchar(32) = N'''',
		
		@serialNumberFrom nvarchar(36) = N'''',
		@serialNumberTo nvarchar(36) = N'''',
		@mfrSerialNumberFrom nvarchar(32) = N'''',
		@mfrSerialNumberTo nvarchar(32) = N'''',
		@lotNumberFrom nvarchar(32) = N'''',
		@lotNumberTo nvarchar(32) = N'''',
		
		@whsIncludingFrom nvarchar(8) = N'''',
		@whsIncludingTo nvarchar(8) = N'''',
		
		@whsExcludingFrom nvarchar(8) = N'''',
		@whsExcludingTo nvarchar(8) = N'''',
		
		@displayInactiveItem nvarchar(1) = N'''',
		
		@T_SQL_ITEM_RTRICT nvarchar(max) = N'''',
		@T_SQL_BATCH_RTRICT nvarchar(max) = N'''',
		@T_SQL_REPLENISH_QTY nvarchar(max) = N'''',
		
		@V_INT int = 0,
		@table_alias nvarchar(10) = N'''',
		@table_field nvarchar(20) = N'''',
		@from_value nvarchar(250) = N'''',
		@to_value nvarchar(250) = N'''',
		
		@COMMA nvarchar(1) = N'','',
		
		@BIN_LOC_TABLE_BASE_FIELD nvarchar(max) = N'''' ',
		
		@PREPARE_SQL nvarchar(max) =
		N'IF @binSublevels <> ''''
			BEGIN
				SET @V_INT = 1
				SET @binSbl1From = RTRIM(SUBSTRING(@binSublevels, @V_INT, @BIN_SUBLEVEL_LENGTH))
				SET @V_INT = @V_INT + @BIN_SUBLEVEL_LENGTH
				SET @binSbl1To = RTRIM(SUBSTRING(@binSublevels, @V_INT, @BIN_SUBLEVEL_LENGTH))
				SET @V_INT = @V_INT + @BIN_SUBLEVEL_LENGTH
				SET @binSbl2From = RTRIM(SUBSTRING(@binSublevels, @V_INT, @BIN_SUBLEVEL_LENGTH))
				SET @V_INT = @V_INT + @BIN_SUBLEVEL_LENGTH
				SET @binSbl2To = RTRIM(SUBSTRING(@binSublevels, @V_INT, @BIN_SUBLEVEL_LENGTH))
				SET @V_INT = @V_INT + @BIN_SUBLEVEL_LENGTH
				SET @binSbl3From = RTRIM(SUBSTRING(@binSublevels, @V_INT, @BIN_SUBLEVEL_LENGTH))
				SET @V_INT = @V_INT + @BIN_SUBLEVEL_LENGTH
				SET @binSbl3To = RTRIM(SUBSTRING(@binSublevels, @V_INT, @BIN_SUBLEVEL_LENGTH))
				SET @V_INT = @V_INT + @BIN_SUBLEVEL_LENGTH
				SET @binSbl4From = RTRIM(SUBSTRING(@binSublevels, @V_INT, @BIN_SUBLEVEL_LENGTH))
				SET @V_INT = @V_INT + @BIN_SUBLEVEL_LENGTH
				SET @binSbl4To = RTRIM(SUBSTRING(@binSublevels, @V_INT, @BIN_SUBLEVEL_LENGTH))
			END
			
		IF @binAttributes <> ''''
			BEGIN	
				SET @V_INT = 1
				SET @binAttr1From = RTRIM(SUBSTRING(@binAttributes, @V_INT, @BIN_ATTR_LENGTH))
				SET @V_INT = @V_INT + @BIN_ATTR_LENGTH
				SET @binAttr1To = RTRIM(SUBSTRING(@binAttributes, @V_INT, @BIN_ATTR_LENGTH))
				SET @V_INT = @V_INT + @BIN_ATTR_LENGTH
				SET @binAttr2From = RTRIM(SUBSTRING(@binAttributes, @V_INT, @BIN_ATTR_LENGTH))
				SET @V_INT = @V_INT + @BIN_ATTR_LENGTH
				SET @binAttr2To = RTRIM(SUBSTRING(@binAttributes, @V_INT, @BIN_ATTR_LENGTH))
				SET @V_INT = @V_INT + @BIN_ATTR_LENGTH
				SET @binAttr3From = RTRIM(SUBSTRING(@binAttributes, @V_INT, @BIN_ATTR_LENGTH))
				SET @V_INT = @V_INT + @BIN_ATTR_LENGTH
				SET @binAttr3To = RTRIM(SUBSTRING(@binAttributes, @V_INT, @BIN_ATTR_LENGTH))
				SET @V_INT = @V_INT + @BIN_ATTR_LENGTH
				SET @binAttr4From = RTRIM(SUBSTRING(@binAttributes, @V_INT, @BIN_ATTR_LENGTH))
				SET @V_INT = @V_INT + @BIN_ATTR_LENGTH
				SET @binAttr4To = RTRIM(SUBSTRING(@binAttributes, @V_INT, @BIN_ATTR_LENGTH))
				SET @V_INT = @V_INT + @BIN_ATTR_LENGTH
				SET @binAttr5From = RTRIM(SUBSTRING(@binAttributes, @V_INT, @BIN_ATTR_LENGTH))
				SET @V_INT = @V_INT + @BIN_ATTR_LENGTH
				SET @binAttr5To = RTRIM(SUBSTRING(@binAttributes, @V_INT, @BIN_ATTR_LENGTH))
				SET @V_INT = @V_INT + @BIN_ATTR_LENGTH
				SET @binAttr6From = RTRIM(SUBSTRING(@binAttributes, @V_INT, @BIN_ATTR_LENGTH))
				SET @V_INT = @V_INT + @BIN_ATTR_LENGTH
				SET @binAttr6To = RTRIM(SUBSTRING(@binAttributes, @V_INT, @BIN_ATTR_LENGTH))
				SET @V_INT = @V_INT + @BIN_ATTR_LENGTH
				SET @binAttr7From = RTRIM(SUBSTRING(@binAttributes, @V_INT, @BIN_ATTR_LENGTH))
				SET @V_INT = @V_INT + @BIN_ATTR_LENGTH
				SET @binAttr7To = RTRIM(SUBSTRING(@binAttributes, @V_INT, @BIN_ATTR_LENGTH))
				SET @V_INT = @V_INT + @BIN_ATTR_LENGTH
				SET @binAttr8From = RTRIM(SUBSTRING(@binAttributes, @V_INT, @BIN_ATTR_LENGTH))
				SET @V_INT = @V_INT + @BIN_ATTR_LENGTH
				SET @binAttr8To = RTRIM(SUBSTRING(@binAttributes, @V_INT, @BIN_ATTR_LENGTH))
				SET @V_INT = @V_INT + @BIN_ATTR_LENGTH
				SET @binAttr9From = RTRIM(SUBSTRING(@binAttributes, @V_INT, @BIN_ATTR_LENGTH))
				SET @V_INT = @V_INT + @BIN_ATTR_LENGTH
				SET @binAttr9To = RTRIM(SUBSTRING(@binAttributes, @V_INT, @BIN_ATTR_LENGTH))
				SET @V_INT = @V_INT + @BIN_ATTR_LENGTH
				SET @binAttr10From = RTRIM(SUBSTRING(@binAttributes, @V_INT, @BIN_ATTR_LENGTH))
				SET @V_INT = @V_INT + @BIN_ATTR_LENGTH
				SET @binAttr10To = RTRIM(SUBSTRING(@binAttributes, @V_INT, @BIN_ATTR_LENGTH))
			END
			
		IF @binCodeFromTo <> ''''
			BEGIN
				SET @V_INT = 1
				SET @binLocCodeFrom = RTRIM(SUBSTRING(@binCodeFromTo, @V_INT, @BIN_LOC_CODE_LENGTH))
				SET @V_INT = @V_INT + @BIN_LOC_CODE_LENGTH
				SET @binLocCodeTo = RTRIM(SUBSTRING(@binCodeFromTo, @V_INT, @BIN_LOC_CODE_LENGTH))
			END
			
		IF @itemCodeFromTo <> ''''
			BEGIN
				SET @V_INT = 1
				SET @itemCodeFrom = RTRIM(SUBSTRING(@itemCodeFromTo, @V_INT, @ITEM_CODE_LENGTH))
				SET @V_INT = @V_INT + @BIN_LOC_CODE_LENGTH
				SET @itemCodeTo = RTRIM(SUBSTRING(@itemCodeFromTo, @V_INT, @ITEM_CODE_LENGTH))
			END
			
		IF @batchFromTo <> ''''
			BEGIN
				SET @V_INT = 1
				SET @batchNumberFrom = RTRIM(SUBSTRING(@batchFromTo, @V_INT, @SNB_NUMBER_LENGTH))
				SET @V_INT = @V_INT + @SNB_NUMBER_LENGTH
				SET @batchNumberTo = RTRIM(SUBSTRING(@batchFromTo, @V_INT, @SNB_NUMBER_LENGTH))
				SET @V_INT = @V_INT + @SNB_NUMBER_LENGTH
				
				SET @batchAttr1From = RTRIM(SUBSTRING(@batchFromTo, @V_INT, @SNB_ATTR_LENGTH))
				SET @V_INT = @V_INT + @SNB_ATTR_LENGTH
				SET @batchAttr1To = RTRIM(SUBSTRING(@batchFromTo, @V_INT, @SNB_ATTR_LENGTH))
				SET @V_INT = @V_INT + @SNB_ATTR_LENGTH
				SET @batchAttr2From = RTRIM(SUBSTRING(@batchFromTo, @V_INT, @SNB_ATTR_LENGTH))
				SET @V_INT = @V_INT + @SNB_ATTR_LENGTH
				SET @batchAttr2To = RTRIM(SUBSTRING(@batchFromTo, @V_INT, @SNB_ATTR_LENGTH))
			END
			
		IF @serialFromTo <> ''''
			BEGIN
				SET @V_INT = 1
				SET @serialNumberFrom = RTRIM(SUBSTRING(@serialFromTo, @V_INT, @SNB_NUMBER_LENGTH))
				SET @V_INT = @V_INT + @SNB_NUMBER_LENGTH
				SET @serialNumberTo = RTRIM(SUBSTRING(@serialFromTo, @V_INT, @SNB_NUMBER_LENGTH))
				SET @V_INT = @V_INT + @SNB_NUMBER_LENGTH
				
				SET @mfrSerialNumberFrom = RTRIM(SUBSTRING(@serialFromTo, @V_INT, @SNB_ATTR_LENGTH))
				SET @V_INT = @V_INT + @SNB_ATTR_LENGTH
				SET @mfrSerialNumberTo = RTRIM(SUBSTRING(@serialFromTo, @V_INT, @SNB_ATTR_LENGTH))
				SET @V_INT = @V_INT + @SNB_ATTR_LENGTH
				SET @lotNumberFrom = RTRIM(SUBSTRING(@serialFromTo, @V_INT, @SNB_ATTR_LENGTH))
				SET @V_INT = @V_INT + @SNB_ATTR_LENGTH
				SET @lotNumberTo = RTRIM(SUBSTRING(@serialFromTo, @V_INT, @SNB_ATTR_LENGTH))
			END
			
		IF @whsCodeFromTo <> ''''
			BEGIN
				SET @V_INT = 1
				SET @whsIncludingFrom = RTRIM(SUBSTRING(@whsCodeFromTo, @V_INT, @WHS_CODE_LENGTH))
				SET @V_INT = @V_INT + @WHS_CODE_LENGTH
				SET @whsIncludingTo = RTRIM(SUBSTRING(@whsCodeFromTo, @V_INT, @WHS_CODE_LENGTH))
				SET @V_INT = @V_INT + @WHS_CODE_LENGTH
				SET @whsExcludingFrom = RTRIM(SUBSTRING(@whsCodeFromTo, @V_INT, @WHS_CODE_LENGTH))
				SET @V_INT = @V_INT + @WHS_CODE_LENGTH
				SET @whsExcludingTo = RTRIM(SUBSTRING(@whsCodeFromTo, @V_INT, @WHS_CODE_LENGTH))
			END
		
		SET @binAbsSet = LTRIM(RTRIM(@binAbsSet))
		IF @binAbsSet <> ''''
			BEGIN
				DECLARE
					@start int = 1,
					@length int = 1,
					@BinAbs nvarchar(10)
					
				CREATE TABLE #TMP_TABLE_BIN_ABS (BinAbs INTEGER)
				SET @V_INT = CHARINDEX(@COMMA, @binAbsSet)
					
				WHILE @V_INT <> 0
					BEGIN
						SET @length = @V_INT - @start
						SET @BinAbs = SUBSTRING(@binAbsSet, @start, @length)
						
						INSERT INTO #TMP_TABLE_BIN_ABS VALUES(@BinAbs)
						
						SET @start = @V_INT + 1
						SET @V_INT = CHARINDEX(@COMMA, @binAbsSet, @start)
					END
						
				IF @V_INT = 0
					BEGIN
						SET @length = LEN(@binAbsSet) + 1 - @start
						SET @BinAbs = SUBSTRING(@binAbsSet, @start, @length)
						INSERT INTO #TMP_TABLE_BIN_ABS VALUES(@BinAbs)
					END		
			END
			
		SET @BIN_LOC_TABLE_BASE_FIELD = 
		@T_OBIN + ''.BinCode,'' 
		+ @T_OBIN + ''.WhsCode,'' 
		+ @T_OBIN + ''.SL1Code,'' 
		+ @T_OBIN + ''.SL2Code,'' 
		+ @T_OBIN + ''.SL3Code,''
		+ @T_OBIN + ''.SL4Code,'' 
		+ @T_OBIN + ''.Disabled,'' 
		+ @T_OBIN + ''.ReceiveBin,'' 
		+ @T_OBIN + ''.Descr,'' 
		+ @T_OBIN + ''.AltSortCod,''
		+ @T_OBIN + ''.BarCode,'' 
		+ ''CASE '' + @T_OBIN + ''.MinLevel WHEN 0 THEN NULL ELSE '' + @T_OBIN + ''.MinLevel END AS MinLevel,'' 
		+ ''CASE '' + @T_OBIN + ''.MaxLevel WHEN 0 THEN NULL ELSE '' + @T_OBIN + ''.MaxLevel END AS MaxLevel,'' 
		+ @T_OBIN + ''.Attr1Val,'' 
		+ @T_OBIN + ''.Attr2Val,'' 
		+ @T_OBIN + ''.Attr3Val,'' 
		+ @T_OBIN + ''.Attr4Val,'' 
		+ @T_OBIN + ''.Attr5Val,'' 
		+ @T_OBIN + ''.Attr6Val,'' 
		+ @T_OBIN + ''.Attr7Val,''
		+ @T_OBIN + ''.Attr8Val,'' 
		+ @T_OBIN + ''.Attr9Val,''
		+ @T_OBIN + ''.Attr10Val,'' 
		+ @T_OBIN + ''.RtrictType,'' 
		+ @T_OBIN + ''.RtrictResn,''
		+ @T_OBIN + ''.RtrictDate,'' 
			
		SET @T_SQL_ITEM_RTRICT = 
		N''(SELECT '' + @T_OBIN + ''.AbsEntry AS ''''BinAbs'''','' 
			+ @T_OBIN + ''.SpcItmCode AS ''''RestrictedTo'''' FROM '' 
			+ @T_OBIN + '' WHERE '' + @T_OBIN + ''.ItmRtrictT = '' + @ITM_RTRICT_SPC_ITM 
		+ '' UNION ALL ''
		+ '' SELECT '' + @T_OIBQ + ''.BinAbs AS ''''BinAbs'''', '' + @T_OIBQ + ''.ItemCode AS ''''RestrictedTo'''' FROM '' 
		+ @T_OIBQ + '' WHERE '' + @T_OIBQ + ''.BinAbs IN (SELECT AbsEntry FROM '' + @T_OBIN + '' WHERE '' 
		+ @T_OBIN + ''.ItmRtrictT = '' + @ITM_RTRICT_SNG_ITM + '') AND '' + @T_OIBQ + ''.OnHandQty > 0 GROUP BY '' 
		+ @T_OIBQ + ''.BinAbs, '' + @T_OIBQ + ''.ItemCode HAVING COUNT('' + @T_OIBQ + ''.BinAbs) < 2 '' 
		+ '' UNION ALL '' 
		+ '' SELECT '' + @T_OBIN + ''.AbsEntry AS ''''BinAbs'''', '' + @T_OITB + ''.ItmsGrpNam AS ''''RestrictedTo'''' FROM '' 
		+ @T_OBIN + '' INNER JOIN '' + @T_OITB + '' ON '' + @T_OBIN + ''.SpcItmGrpC = '' + @T_OITB + ''.ItmsGrpCod''
		+ '' WHERE '' + @T_OBIN + ''.ItmRtrictT = '' + @ITM_RTRICT_SPC_ITM_GROUP + 
		'' UNION ALL '' +
		'' SELECT '' + @T_OIBQ + ''.BinAbs AS ''''BinAbs'''', '' + '' MAX('' + @T_OITB + ''.ItmsGrpNam) '' 
		+ '' AS ''''RestrictedTo'''' FROM '' + @T_OIBQ + '' INNER JOIN '' + @T_OITM + '' ON '' 
		+ @T_OIBQ + ''.ItemCode = '' + @T_OITM + ''.ItemCode '' + '' INNER JOIN '' + @T_OITB + '' ON ''
		+ @T_OITM + ''.ItmsGrpCod = '' + @T_OITB + ''.ItmsGrpCod '' + '' WHERE '' 
		+ @T_OIBQ + ''.BinAbs IN (SELECT AbsEntry FROM '' + @T_OBIN + '' WHERE '' + @T_OBIN + ''.ItmRtrictT = '' 
		+ @ITM_RTRICT_SNG_ITM_GROUP + '') AND '' + @T_OIBQ + ''.OnHandQty > 0 GROUP BY '' + @T_OIBQ
		+ ''.BinAbs, '' + @T_OITM + ''.ItmsGrpCod HAVING COUNT('' + @T_OIBQ + ''.BinAbs) < 2) AS '' + @T_ITM_RTRICT
		
		SET @T_SQL_BATCH_RTRICT =
		N''(SELECT '' + @T_OBBQ + ''.BinAbs AS ''''BinAbs'''', '' + ''Min('' + @T_OBTN + ''.DistNumber) AS ''''Batch'''' FROM '' 
		+ @T_OBBQ + '' INNER JOIN '' + @T_OBTN + '' ON '' + @T_OBBQ + ''.SnBMDAbs = '' + @T_OBTN + ''.AbsEntry WHERE '' 
		+ @T_OBBQ + ''.BinAbs IN (SELECT AbsEntry FROM '' + @T_OBIN + '' WHERE '' + @T_OBIN + ''.SngBatch = ''''Y'''') AND '' 
		+ @T_OBBQ + ''.OnHandQty <> 0 GROUP BY '' + @T_OBBQ + ''.BinAbs, '' + @T_OBBQ
		+ ''.SnBMDAbs HAVING COUNT(*) < 2) AS '' + @T_BATCH_RTRICT
		
		SET @T_SQL_REPLENISH_QTY = 
		N'' (SELECT '' + @T_OIBQ + ''.BinAbs, SUM('' + @T_OIBQ + ''.OnHandQty) AS ReplenishOnHandQty FROM '' + @T_OIBQ
		+ '' INNER JOIN '' + @T_OBIN + '' ON '' + @T_OIBQ + ''.BinAbs = '' + @T_OBIN + ''.AbsEntry  AND '' + @T_OIBQ
		+ ''.ItemCode = '' + @T_OBIN + ''.SpcItmCode AND '' + @T_OBIN + ''.ItmRtrictT = '' + @ITM_RTRICT_SPC_ITM
		+ '' WHERE '' + @T_OIBQ + ''.OnHandQty <> 0 GROUP BY '' + @T_OIBQ + ''.BinAbs ''
		+ '' UNION ALL ''
		+ '' SELECT '' + @T_OIBQ + ''.BinAbs, SUM('' + @T_OIBQ + ''.OnHandQty) AS ReplenishOnHandQty FROM '' + @T_OIBQ
		+ '' WHERE '' + @T_OIBQ + ''.OnHandQty > 0 AND '' + @T_OIBQ + ''.BinAbs IN (SELECT AbsEntry FROM '' + @T_OBIN
		+ '' WHERE '' + @T_OBIN + ''.ItmRtrictT = '' + @ITM_RTRICT_SNG_ITM + '' ) GROUP BY '' + @T_OIBQ + ''.BinAbs ) AS '' + @T_REPLENISH_QTY
		'
		
	BEGIN
		SET NOCOUNT ON;
		
		IF @flag & 4 = 4
			SET @displayInactiveBin = N'Y'
		ELSE
			SET @displayInactiveBin = N'N'
			
		SET @ADD_BIN_SUBLEVEL_COND = REPLACE(@ADD_BIN_SUBLEVEL_COND, N'$ADD_RANGE_COND_STR', @ADD_RANGE_COND_STR)
		SET @ADD_BIN_ATTR_COND = REPLACE(@ADD_BIN_ATTR_COND, N'$ADD_RANGE_COND_STR', @ADD_RANGE_COND_STR)
		SET @ADD_BIN_CODE_COND = REPLACE(@ADD_BIN_CODE_COND, N'$ADD_RANGE_COND_STR', @ADD_RANGE_COND_STR)
		SET @ADD_WHS_INCLUD_COND = REPLACE(@ADD_WHS_INCLUD_COND, N'$ADD_RANGE_COND_STR', @ADD_RANGE_COND_STR)
		
		SET @T_SQL =
			N'
			BEGIN
				$PREPARE_SQL
					
				SET @T_SQL = 
				N''SELECT '' + @BIN_LOC_TABLE_BASE_FIELD
					+ @T_OBIN + ''.ItmRtrictT, '' 
					+ @T_ITM_RTRICT + ''.RestrictedTo, '' 
					+ @T_OBIN + ''.SngBatch, '' 
					+ @T_BATCH_RTRICT + ''.Batch,''
					+ '' CASE B.ItemCount WHEN 0 THEN NULL ELSE B.ItemCount END AS ItemCount, ''
					+ '' CASE B.OnHandQty WHEN 0 THEN NULL ELSE B.OnHandQty END AS OnHandQty, ''
					+ '' CASE B.SnBCount WHEN 0 THEN NULL ELSE B.SnBCount END AS SnBCount, ''
					+ '' CASE ''
					+ '' WHEN B.ItmCountNeg = 1 AND '' + @T_OBIN + ''.ItmRtrictT <> '' + @ITM_RTRICT_SPC_ITM + '' THEN '' 
					+ '' CASE WHEN '' + @T_OBIN + ''.MinLevel <> ISNULL(B.OnHandQty, 0) THEN '' + @T_OBIN + ''.MinLevel - ISNULL(B.OnHandQty, 0) ELSE NULL END ''
					+ '' WHEN '' + @T_OBIN + ''.ItmRtrictT = '' + @ITM_RTRICT_SPC_ITM + '' AND '' + @T_OBIN + ''.Disabled = N''''N'''' THEN ''
					+ '' CASE WHEN '' + @T_OBIN + ''.MinLevel <> '' + ''ISNULL('' + @T_REPLENISH_QTY + ''.ReplenishOnHandQty, 0) ''
					+ '' THEN '' + + @T_OBIN + ''.MinLevel - '' + ''ISNULL('' + @T_REPLENISH_QTY + ''.ReplenishOnHandQty, 0) ELSE NULL END ''
					+ '' WHEN B.ItmCountNeg <> 1 AND '' + @T_OBIN + ''.ItmRtrictT = '' + @ITM_RTRICT_SNG_ITM + '' THEN ''
					+ '' CASE WHEN '' + @T_OBIN + ''.MinLevel <> '' + @T_REPLENISH_QTY + ''.ReplenishOnHandQty THEN ''
					+ @T_OBIN + ''.MinLevel - '' + @T_REPLENISH_QTY + ''.ReplenishOnHandQty ELSE NULL END ''
					+ '' ELSE NULL ''
					+ '' END AS QtyBelowMin, ''
					+ '' CASE ''
					+ '' WHEN B.ItmCountNeg = 1 AND '' + @T_OBIN + ''.ItmRtrictT <> '' + @ITM_RTRICT_SPC_ITM 
					+ '' AND '' + @T_OBIN + ''.MaxLevel <> 0 AND '' + @T_OBIN + ''.MaxLevel > ISNULL(B.OnHandQty, 0) '' 
					+ '' THEN ('' + @T_OBIN + ''.MaxLevel - ISNULL(B.OnHandQty, 0)) ''
					+ '' WHEN '' + @T_OBIN + ''.ItmRtrictT = '' + @ITM_RTRICT_SPC_ITM + '' AND '' + @T_OBIN + ''.Disabled = N''''N'''' ''
					+ '' AND '' + @T_OBIN + ''.MaxLevel <> 0 AND '' + @T_OBIN + ''.MaxLevel > '' + ''ISNULL( '' + @T_REPLENISH_QTY + ''.ReplenishOnHandQty, 0) ''
					+ '' THEN '' + @T_OBIN + ''.MaxLevel - '' + ''ISNULL('' + @T_REPLENISH_QTY + ''.ReplenishOnHandQty, 0) ''
					+ '' WHEN B.ItmCountNeg <> 1 AND '' + @T_OBIN + ''.ItmRtrictT = '' + @ITM_RTRICT_SNG_ITM
					+ '' AND '' + @T_OBIN + ''.MaxLevel <> 0 AND '' + @T_OBIN + ''.MaxLevel > '' + @T_REPLENISH_QTY + ''.ReplenishOnHandQty ''
					+ '' THEN '' + @T_OBIN + ''.MaxLevel - '' + @T_REPLENISH_QTY + ''.ReplenishOnHandQty ''
					+ '' ELSE NULL ''
					+ '' END AS ReplenishmentQty ''
					+ '' FROM '' + @T_OBIN + '' LEFT OUTER JOIN ''
					+ '' (SELECT	MAX(A.BinAbs) AS ''''BinAbs'''',''
								+ ''SUM(A.ItemCount) AS ''''ItemCount'''',''
								+ ''SUM(A.OnHandQty) AS ''''OnHandQty'''',''
								+ ''SUM(A.SnBCount) AS ''''SnBCount'''',''
								+ ''SUM(A.ItmCountNeg) AS ''''ItmCountNeg'''' ''
						+ '' FROM ''
						+ '' (SELECT '' + @T_OIBQ + ''.BinAbs						AS ''''BinAbs'''','' 
							+ ''Count(DISTINCT '' + @T_OIBQ + ''.ItemCode)		AS ''''ItemCount'''','' 
							+ ''Max('' + @T_OIBQ + ''.OnHandQty)					AS ''''OnHandQty'''','' 
							+ ''Count(DISTINCT '' + @T_OBBQ + ''.SnBMDAbs) '' 
							+ '' + Count(DISTINCT '' + @T_OSBQ + ''.SnBMDAbs) AS ''''SnBCount'''',''  
							+ ''Count(DISTINCT '' + @T_OIBQ + ''.ItemCode)		AS ''''ItmCountNeg''''''
						+ '' FROM '' + @T_OIBQ 
							+ '' LEFT OUTER JOIN '' + @T_OBBQ + '' ON '' 
								+ @T_OIBQ + ''.BinAbs = '' + @T_OBBQ + ''.BinAbs'' 
								+ '' AND '' + @T_OIBQ + ''.ItemCode = '' + @T_OBBQ + ''.ItemCode'' 
								+ '' AND '' + @T_OBBQ + ''.OnHandQty <> 0''
							+ '' LEFT OUTER JOIN '' + @T_OSBQ
								+ '' ON '' + @T_OIBQ + ''.BinAbs = '' + @T_OSBQ + ''.BinAbs'' 
								+ '' AND '' + @T_OIBQ + ''.ItemCode = '' + @T_OSBQ + ''.ItemCode'' 
								+ '' AND '' + @T_OSBQ + ''.OnHandQty <> 0''
								+ '' WHERE '' + @T_OIBQ + ''.OnHandQty > 0 ''
							+ '' GROUP BY '' + @T_OIBQ + ''.BinAbs,'' + @T_OIBQ + ''.AbsEntry''
						+ '' UNION ALL ''
						+ '' SELECT '' + @T_OIBQ + ''.BinAbs						AS ''''BinAbs'''','' 
							+ ''0													AS ''''ItemCount'''','' 
							+ ''Max('' + @T_OIBQ + ''.OnHandQty)					AS ''''OnHandQty'''','' 
							+ ''Count(DISTINCT '' + @T_OBBQ + ''.SnBMDAbs) ''
							+ '' + Count(DISTINCT '' + @T_OSBQ + ''.SnBMDAbs) AS ''''SnBCount'''','' 
							+ ''Count(DISTINCT '' + @T_OIBQ + ''.ItemCode)		AS ''''ItmContNeg'''''' 
						+ '' FROM '' + @T_OIBQ
							+ '' LEFT OUTER JOIN '' + @T_OBBQ + '' ON ''
								+ @T_OIBQ + ''.BinAbs = '' + @T_OBBQ + ''.BinAbs'' 
								+ '' AND '' + @T_OIBQ + ''.ItemCode = '' + @T_OBBQ + ''.ItemCode'' 
								+ '' AND '' + @T_OBBQ + ''.OnHandQty <> 0'' 
							+ '' LEFT OUTER JOIN '' + @T_OSBQ
								+ '' ON '' + @T_OIBQ + ''.BinAbs = '' + @T_OSBQ + ''.BinAbs'' 
								+ '' AND '' + @T_OIBQ + ''.ItemCode = '' + @T_OSBQ + ''.ItemCode'' 
								+ '' AND '' + @T_OSBQ + ''.OnHandQty <> 0''
								+ '' WHERE '' + @T_OIBQ + ''.OnHandQty < 0''
								+ '' GROUP BY '' + @T_OIBQ + ''.BinAbs,'' + @T_OIBQ + ''.AbsEntry) AS A''
						+ '' GROUP BY A.BinAbs) AS B''
						+ '' ON '' + @T_OBIN + ''.AbsEntry = B.BinAbs''
					+ '' LEFT OUTER JOIN '' +
						@T_SQL_ITEM_RTRICT + '' ON '' + @T_OBIN + ''.AbsEntry = '' + @T_ITM_RTRICT + ''.BinAbs''
					+ '' LEFT OUTER JOIN '' +
						@T_SQL_BATCH_RTRICT + '' ON '' + @T_OBIN + ''.AbsEntry = '' + @T_BATCH_RTRICT + ''.BinAbs''
					+ '' LEFT OUTER JOIN '' +
						@T_SQL_REPLENISH_QTY + '' ON '' + @T_OBIN + ''.AbsEntry = '' + @T_REPLENISH_QTY + ''.BinAbs''
				+ '' WHERE '' + @T_OBIN + ''.AbsEntry > 0 ''
				
				SET @T_SQL = @T_SQL + '' AND '' + @T_OBIN + ''.WhsCode IN ( SELECT WhsCode FROM OWHS WHERE Inactive = N''''N'''') ''

				IF @binAbsSet <> ''''
					SET @T_SQL = @T_SQL + '' AND '' + @T_OBIN + ''.AbsEntry IN (SELECT BinAbs FROM #TMP_TABLE_BIN_ABS) ''
					
				$ADD_WHS_INCLUD_COND
				$ADD_WHS_EXCLUD_COND
				$ADD_BIN_SUBLEVEL_COND
				$ADD_BIN_ATTR_COND
				$ADD_BIN_CODE_COND
				$ADD_INACTIVE_BIN_COND
					
				SET @T_SQL = @T_SQL + '' ORDER BY '' + @T_OBIN + ''.BinCode''
				
				--PRINT(@T_SQL)	
				EXEC(@T_SQL)
			END'
			
		SET @T_SQL = REPLACE(@T_SQL, N'$PREPARE_SQL', @PREPARE_SQL)
		SET @T_SQL = REPLACE(@T_SQL, N'$ADD_WHS_INCLUD_COND', @ADD_WHS_INCLUD_COND)
		SET @T_SQL = REPLACE(@T_SQL, N'$ADD_WHS_EXCLUD_COND', @ADD_WHS_EXCLUD_COND)
		SET @T_SQL = REPLACE(@T_SQL, N'$ADD_BIN_SUBLEVEL_COND', @ADD_BIN_SUBLEVEL_COND)
		SET @T_SQL = REPLACE(@T_SQL, N'$ADD_BIN_ATTR_COND', @ADD_BIN_ATTR_COND)
		SET @T_SQL = REPLACE(@T_SQL, N'$ADD_BIN_CODE_COND', @ADD_BIN_CODE_COND)
		SET @T_SQL = REPLACE(@T_SQL, N'$ADD_INACTIVE_BIN_COND', @ADD_INACTIVE_BIN_COND)
		
		EXEC sp_executesql
			@T_SQL,
			@ParmDefinition,
			@binSublevels = @binSublevels,
			@binAttributes = @binAttributes,
			@binCodeFromTo = @binCodeFromTo,
			@itemCodeFromTo = @itemCodeFromTo,
			@itemGroups = @itemGroups,
			@batchFromTo = @batchFromTo,
			@serialFromTo = @serialFromTo,
			@binAbsSet = @binAbsSet,
			@batchAbs = @batchAbs,
			@serialAbs = @serialAbs,
			@whsCodeFromTo = @whsCodeFromTo,
			@displayInactiveBin = @displayInactiveBin
	END
 
GO 

CREATE PROC _TmSp_CreateGetCompanyTimeFunction

as 

Begin 

SET NOCOUNT ON

IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[GetCompanyTime]')

AND type in (N'FN', N'IF', N'TF', N'FS', N'FT'))

DROP FUNCTION [dbo].[GetCompanyTime] 

Declare @sql nvarchar (2000)

set @sql = 'create FUNCTION GetCompanyTime() RETURNS datetime AS BEGin DECLARE @OutDate datetime DECLARE @offset1 numeric(9,4) DECLARE @dst varchar(1) select top 1 @offset1 = offset, @dst = isnull(ActiveDst,0) from OTIZ order by id desc if @offset1 is NULL RETURN(getdate()) if (@dst = ''Y'') set @offset1 = @offset1 + 60 set @offset1 = @offset1 /1440 RETURN(getUTCdate() + @offset1) END'

exec (@sql )

SET NOCOUNT OFF

End
 
GO 

CREATE proc _TmSp_ReconUpgFillInTempJDT1

@tempJDT1Table nvarchar(128) = NULL,
@tempBPTable nvarchar(128)  = NULL

as
begin

exec ('insert into ' + @tempJDT1Table + ' select T0.* from JDT1 T0 inner join ' + @tempBPTable + ' T1 on T0.ShortName = T1.ShortName and T0.Account = T1.Account' )

end
 
GO 

CREATE PROCEDURE [dbo].[_TmSp_RetrieveDocLineBatchAndSerialNumbers]
	@docType int,
	@docEntry int
AS
BEGIN
	create table #temp_Numbers 
	(
		DocRow int,
		ManagedBy int,
		BatchNumber nvarchar(4000),
		SerialNumber nvarchar(4000),
		Quantity numeric(19, 6),
		Price numeric(19,6),
		Rate numeric(19, 6)
	)
	declare @docTable as char(4)
	if @docType=15 
		set @docTable='DLN1'
	else if @docType=16
		set @docTable='RDN1'
	else if @docType=20
		set @docTable='PDN1'
	else if @docType=21
		set @docTable='RPD1'
	else if @docType=59
		set @docTable='IGN1'
	else if @docType=60
		set @docTable='IGE1'
	else if @docType=67
		set @docTable='WTR1'
	else if @docType=112
		set @docTable='DRF1'
		
	create table #temp_Numbers_Return
	(
		DocumentEntry int,
		DocRow int,
		ManagedBy int,
		BatchNumber nvarchar(4000),
		SerialNumber nvarchar(4000),
		Price numeric(19,6)
	)
	--select t0.LineNum, t5.ManagedBy,t5.BatchNumber,t5.SerialNumber,t5.Quantity from PDN1 t0 
	--left join 
	--(
	--	select  t1.DocEntry,t1.DocLine, t1.ManagedBy,t3.DistNumber as 'BatchNumber', t4.DistNumber as 'SerialNumber', t2.Quantity  
	--	from OITL t1 
	--		join ITL1 t2 on t1.LogEntry=t2.LogEntry and t1.DocType= 20 and t1.DocEntry=1  
	--		left outer join OBTN t3 on t2.SysNumber=t3.SysNumber and t2.ItemCode=t3.ItemCode and t1.ManagedBy=10000044
	--		left outer join OSRN t4 on t2.SysNumber=t4.SysNumber and t2.ItemCode=t4.ItemCode and t1.ManagedBy=10000045
	--) t5 
	--on t0.DocEntry=t5.DocEntry and t0.LineNum=t5.DocLine
	--where t0.DocEntry=1  
	--order by t0.LineNum
	declare @sqlStatement nvarchar(4000)
	set @sqlStatement=N'insert into #temp_Numbers select t0.LineNum, t5.ManagedBy, t5.BatchNumber, t5.SerialNumber, t5.Quantity,t0.Price,t0.Rate from '+@docTable+' t0
						left join 
						(
							select  t1.DocEntry,t1.DocLine, t1.ManagedBy,t3.DistNumber as ''BatchNumber'', t4.DistNumber as ''SerialNumber'', t2.Quantity
							from OITL t1
							join ITL1 t2 on t1.LogEntry=t2.LogEntry and t1.DocType= '+convert(nvarchar(20),@docType)+' and t1.DocEntry='+ convert(nvarchar(20),@docEntry)+
							N' left outer join OBTN t3 on t2.SysNumber=t3.SysNumber and t2.ItemCode=t3.ItemCode and t1.ManagedBy=10000044
							left outer join OSRN t4 on t2.SysNumber=t4.SysNumber and t2.ItemCode=t4.ItemCode and t1.ManagedBy=10000045
						) t5
						on t0.DocEntry=t5.DocEntry and t0.LineNum=t5.DocLine
						where t0.DocEntry= '+convert(nvarchar(20),@docEntry)+N' order by t0.LineNum'
	exec sp_executesql @sqlStatement

	declare @currentRow int,@number nvarchar(4000), @managedByOfLastLine int,@lcPrice numeric(19, 6)
	declare @rowID int,  @managedBy int, @batch_number nvarchar(4000), @serial_number nvarchar(4000), @qty numeric(19, 6),@price numeric(19, 6),@rate numeric(19, 6)
	set @number=''
	set @lcPrice=0
	declare rec_Cursor cursor for(select t0.* from #temp_Numbers t0) for read only
	open rec_Cursor
	FETCH NEXT FROM rec_Cursor into @rowID,@managedBy,@batch_number,@serial_number,@qty,@price,@rate
	if @@FETCH_STATUS=0
		set @currentRow=@rowID
	while @@FETCH_STATUS = 0
	begin
		if @managedBy=10000044
			set @number=@number+@batch_number+'('+Convert(nvarchar,Convert(Integer,abs(@qty)))+')'+'; '
		else
			set @number=@number+@serial_number+'; '
		if not @rate is null and @rate <> 0
			set @lcPrice=@price*@rate
		else
			set @lcPrice=@price
		set @managedByOfLastLine=@managedBy
		FETCH NEXT FROM rec_Cursor into @rowID,@managedBy,@batch_number,@serial_number,@qty,@price,@rate
		if @@FETCH_STATUS<>0 or @currentRow<>@rowID
		begin
			if @managedByOfLastLine=10000044
				insert into #temp_Numbers_Return values(@docEntry,@currentRow,@managedByOfLastLine,substring(@number,0,len(@number)),NULL,@lcPrice)
			else if @managedByOfLastLine=10000045
				insert into #temp_Numbers_Return values(@docEntry,@currentRow,@managedByOfLastLine,NULL,substring(@number,0,len(@number)),@lcPrice)
			else
				insert into #temp_Numbers_Return values(@docEntry,@currentRow,@managedByOfLastLine,NULL,NULL,@lcPrice)
				
			if @@FETCH_STATUS=0
			begin
				set @currentRow=@rowID
				set @number=''
			end
		end
	end
	
	select * from #temp_Numbers_Return order by DocRow
	close rec_Cursor
	deallocate rec_Cursor
	drop table #temp_Numbers
	drop table #temp_Numbers_Return
END
 
GO 

CREATE PROCEDURE _TmSp_UpdateCreateDateOnOINM
--WITH ENCRYPTION
AS
            --OINV
            UPDATE OINM
            SET CreateDate = (SELECT T1.CreateDate FROM OINV T1 WHERE T1.DocEntry = OINM.CreatedBy)
            WHERE OINM.CreateDate is NULL AND OINM.TransType = 13

            --ORIN
            UPDATE OINM
            SET CreateDate = (SELECT T1.CreateDate FROM ORIN T1 WHERE T1.DocEntry = OINM.CreatedBy)
            WHERE OINM.CreateDate is NULL AND OINM.TransType = 14

            --ODLN
            UPDATE OINM
            SET OINM.CreateDate = (SELECT T1.CreateDate FROM ODLN T1 WHERE T1.DocEntry = OINM.CreatedBy)
            WHERE OINM.CreateDate is NULL AND OINM.TransType = 15

            --OPDN
            UPDATE OINM
            SET OINM.CreateDate = (SELECT T1.CreateDate FROM OPDN T1 WHERE T1.DocEntry = OINM.CreatedBy)
            WHERE OINM.CreateDate is NULL AND OINM.TransType = 20

            --ORPD
            UPDATE OINM
            SET OINM.CreateDate = (SELECT T1.CreateDate FROM ORPD T1 WHERE T1.DocEntry = OINM.CreatedBy)
            WHERE OINM.CreateDate is NULL AND OINM.TransType = 21

            --OPCH
            UPDATE OINM
            SET OINM.CreateDate = (SELECT T1.CreateDate FROM OPCH T1 WHERE T1.DocEntry = OINM.CreatedBy)
            WHERE OINM.CreateDate is NULL AND OINM.TransType = 18

            --ORPC
            UPDATE OINM
            SET OINM.CreateDate = (SELECT T1.CreateDate FROM ORPC T1 WHERE T1.DocEntry = OINM.CreatedBy)
            WHERE OINM.CreateDate is NULL AND OINM.TransType = 19

            --ORDN
            UPDATE OINM
            SET OINM.CreateDate = (SELECT T1.CreateDate FROM ORDN T1 WHERE T1.DocEntry = OINM.CreatedBy)
            WHERE OINM.CreateDate is NULL AND OINM.TransType = 16

            --OIPF
            UPDATE OINM
            SET OINM.CreateDate = (SELECT T1.CreateDate FROM OIPF T1 WHERE T1.DocEntry = OINM.CreatedBy)
            WHERE OINM.CreateDate is NULL AND OINM.TransType = 69

            --OIGN
            UPDATE OINM
            SET OINM.CreateDate = (SELECT T1.CreateDate FROM OIGN T1 WHERE T1.DocEntry = OINM.CreatedBy)
            WHERE OINM.CreateDate is NULL AND OINM.TransType = 59

            --OIGE
            UPDATE OINM
            SET OINM.CreateDate = (SELECT T1.CreateDate FROM OIGE T1 WHERE T1.DocEntry = OINM.CreatedBy)
            WHERE OINM.CreateDate is NULL AND OINM.TransType = 60

            --OWTR
            UPDATE OINM
            SET OINM.CreateDate = (SELECT T1.CreateDate FROM OWTR T1 WHERE T1.DocEntry = OINM.CreatedBy)
            WHERE OINM.CreateDate is NULL AND OINM.TransType = 67

            --OMRV
            UPDATE OINM
            SET OINM.CreateDate = (SELECT T1.CreateDate FROM OMRV T1 WHERE T1.DocEntry = OINM.CreatedBy)
            WHERE OINM.CreateDate is NULL AND OINM.TransType = 162

            --OWKO
            UPDATE OINM
            SET OINM.CreateDate = (SELECT T1.CreateDate FROM OWKO T1 WHERE T1.OrderNum = OINM.CreatedBy)
            WHERE OINM.CreateDate is NULL AND OINM.TransType = 68

            --OINM (for stock posting and initial quantity)
            UPDATE OINM
            SET OINM.CreateDate = (SELECT T1.CreateDate FROM OJDT T1 WHERE T1.TransId = OINM.CreatedBy)
            WHERE OINM.CreateDate is NULL AND (OINM.TransType = -2 OR OINM.TransType = 58)
 
GO 

CREATE PROCEDURE _TmSp_UpgradeEDF
	@ECM2tableName nvarchar(100),
	@ECM3tableName nvarchar(100)
--With Encryption

AS
BEGIN
	declare @ecm2CopyName nvarchar(100)
	declare @ecm2TempName nvarchar(100)
	declare @ecm3TempName nvarchar(100)
	declare @execStr nvarchar(MAX)

	set @ecm2CopyName = @ECM2tableName + '_COPY'
	set @ecm2TempName = 'TEMP_' + @ECM2tableName
	set @ecm3TempName = 'TEMP_' + @ECM3tableName

	-- create copy of ECM2 table
	if object_id(@ecm2TempName) is not null and  object_id(@ecm2CopyName) is null
	begin
		set @execStr = 'SELECT * INTO ' + @ecm2CopyName + ' FROM ' + @ecm2TempName
		exec(@execStr)
		-- do not continue to upgrade (just copy table)
		return
	end

	-- necessary checks before upgrade
	-- ecm2CopyName (ECM2_COPY/AEC2_COPY) must exist. Copied from TEMP table
	if object_id(@ecm2CopyName) is null
	begin
		-- do not continue to upgrade, TEMP table does not exist for "non fast upgrade" cases (if main table was empty or same structure, ...)
		return
	end

	-- test for upgraded ECM2/ECM3 table structure (9.1 -> 9.2)
	-- ECM2: removed field ActData
	IF EXISTS(SELECT * FROM sys.columns WHERE Name = 'ActData' AND Object_ID = Object_ID(@ECM2tableName))
	BEGIN
		return 0
	END
		
	-- ECM3: new field LogData
	IF NOT EXISTS(SELECT * FROM sys.columns WHERE Name = 'LogData' AND Object_ID = Object_ID(@ECM3tableName))
	BEGIN
		return 0
	END

	-- if TEMP_ECM3 table does not exist then use ECM3
	if object_id(@ecm3TempName) is null
	begin
		set @ecm3TempName = @ECM3tableName 
	end


	-- upgrade steps

	-- mark old ecm3 rows as 'Note'
	set @execStr = 'update ' + @ECM3tableName +' set LogType = ''N'''
	exec(@execStr)

	-- copy	ActData to ECM3 as 'Send'
	set @execStr = 'insert into ' + @ECM3tableName + '(AbsEntry, LogNum, LogMessage, UserSign, CreateDate, UserSign2, UpdateDate, LogInstanc, CreateTS, UpdateTS, LogType, LogData, LogOpDate, LogOpTS)
		select t0.AbsEntry, 1 + isNull(t3.nextLogNum,0),
		ActMessage, UserSign, CreateDate, UserSign2, UpdateDate, LogInstanc, CreateTS, UpdateTS, ''S'', ActData, SendDate, SendTS
		from ' + @ecm2CopyName + ' t0 
		left outer join 
		(
			select absEntry, max (nextLogNum) as nextLogNum from
			(select absEntry, isNull(max(logNum),0) as nextLogNum from ' + @ECM3tableName + ' group by AbsEntry
			union all
			select absEntry, isNull(max(logNum),0) as nextLogNum from ' + @ecm3TempName + ' group by AbsEntry
			)as subQuery
			group by AbsEntry
		) 
		t3 on t3.AbsEntry = t0.AbsEntry 
		where t0.ActData is not null or t0.ActData2 is not null'
	exec(@execStr)

	-- copy	ActData2 to ECM3 as 'Receive'
	set @execStr = 'insert into ' + @ECM3tableName + '(AbsEntry, LogNum, LogMessage, UserSign, CreateDate, UserSign2, UpdateDate, LogInstanc, CreateTS, UpdateTS, LogType, LogData, LogOpDate, LogOpTS)
		select t0.AbsEntry, 1 + isNull(t3.nextLogNum,0),
		ActMessage, UserSign, CreateDate, UserSign2, UpdateDate, LogInstanc, CreateTS, UpdateTS, ''R'', ActData2, ReceivDate, NULL
		from ' + @ecm2CopyName + ' t0
		left outer join 
		(
			select absEntry, max (nextLogNum) as nextLogNum from
			(select absEntry, isNull(max(logNum),0) as nextLogNum from ' + @ECM3tableName + ' group by AbsEntry
			union all
			select absEntry, isNull(max(logNum),0) as nextLogNum from ' + @ecm3TempName + ' group by AbsEntry
			)as subQuery
			group by AbsEntry
		) 
		t3 on t3.AbsEntry = t0.AbsEntry 
		where t0.ActData is not null or t0.ActData2 is not null'
	exec(@execStr)


	-- drop table
	set @execStr = 'drop table ' + @ecm2CopyName
	exec(@execStr)
END
 
GO 

Create Procedure [dbo].[CRSP_GET_ITEM_GROUPS]
	@Items nvarchar(4000)
As
Begin

	create table #CR_TEMP_ITME_GOUPS(ItmsGrpNam nvarchar(40),ItemCode nvarchar(50));
	create table #CR_TEMP_ITME_CODES_GROUPS(ItemCode nvarchar(50),ItmsGrpCod nvarchar(40));
	
	exec ('insert into #CR_TEMP_ITME_CODES_GROUPS select t0.ItemCode,t0.ItmsGrpCod from OITM T0 where '+ @Items)
	insert into #CR_TEMP_ITME_GOUPS
	select t2.ItmsGrpNam,t3.ItemCode 
	from OITB t2 join  
	(select t1.* from (select t0.*, row_number() over (partition by t0.ItmsGrpCod order by t0.ItemCode) as rowno from #CR_TEMP_ITME_CODES_GROUPS t0) as t1 where t1.rowno=1) as t3 
	on t2.ItmsGrpCod=t3.ItmsGrpCod
	
	Select * from #CR_TEMP_ITME_GOUPS;
	
	drop table #CR_TEMP_ITME_CODES_GROUPS
	drop table #CR_TEMP_ITME_GOUPS	
End
 
GO 

create Procedure [dbo].[CRSP_INVENTORY_TURNOVER_RATE]
	@FromDate datetime, 
	@ToDate datetime, 
	@Items nvarchar(4000)
As 
BEGIN

	if object_id(N'tempdb..#CRSP_INVENTORY_ITEMS_LOCAL',N'U') is not null
		DROP TABLE #CRSP_INVENTORY_ITEMS_LOCAL

	CREATE  TABLE #CRSP_INVENTORY_ITEMS_LOCAL (ItemCode nvarchar(50));
	
	-- Insert selected result to temp table created above
	declare @sqlQuery nvarchar(4000)
	set @sqlQuery = N'INSERT INTO #CRSP_INVENTORY_ITEMS_LOCAL SELECT T0."ItemCode" FROM OITM T0 Where ' + @Items
	exec sp_executesql @sqlQuery;
	
	-- Fetch IssueQty from OILM instead of OIVL for scenario like "Return" based on "Delivery"
	with cte1
	as
	(
		select MessageID, DocEntry, TransType, DocLineNum, ActionType, T0.ItemCode, LocCode, BaseType, BaseAbsEnt, BaseLine, LocType,
		case when ActionType = 1 then EffectQty
		when ActionType = 2 then -EffectQty	end as EffectQty 
		from oilm T0
		Join #CRSP_INVENTORY_ITEMS_LOCAL T1 On T0."ItemCode" collate chinese_prc_ci_as = T1."ItemCode"
		where AccumType=1 and ActionType in (1,2) and "DocDate" Between @FromDate And @ToDate 
	),
	cte2 
	as
	(
		select
			case when t1.TransType is null then t0.TransType else t0.BaseType end as TransType, 
			case when t1.DocEntry is null then t0.DocEntry else t0.BaseAbsEnt end as DocEntry, 
			case when t1.DocLineNum is null then t0.DocLineNum else t0.BaseLine end as DocLineNum, 			
			t0.ItemCode, t0.LocCode, t0.LocType, t0.EffectQty
		from cte1 t0 left join cte1 t1
		on t0.BaseType = t1.TransType and t0.BaseAbsEnt = t1.DocEntry and t0.BaseLine = t1.DocLineNum
	)

	select 
			T1."LocType" as LocType,
			T1."LocCode" as LocCode,
			T1."ItemCode" as ItemCode,
			T1."CloseStock" as CloseStock,
			T4."OpenStock"as OpenStock,
			T5."IssueQty" as IssueQty,
			T6."LastDate" as LastDate,
			T2."OnHand" as OnHandTotal,
			T6."OnHand" as OnHand,
			T6."MinStock" as MinStock,
			T6."WhsCode" as WhsCode,
			T3."WhsName" as WhsName,
			T2."ItmsGrpCod" as ItmsGrpCod,
			T2."ItemName" as ItemName,
			T2."MinLevel" as MinLevel,
			T2."ByWh" as ByWh,
			T2."InvntryUom" as InvntryUom,
			T2."LeadTime" as LeadTime,
			T2."ItmsGrpNam" as ItmsGrpNam
	from
	(
		Select	"LocType", "LocCode", "ItemCode", Sum("InQty" - "OutQty") as "CloseStock" 
		From "OIVL"
		Where "DocDate" <= @ToDate   
		Group by "LocType", "LocCode", "ItemCode"
	) T1 /*CloseStock*/
	Join
	(
		SELECT	T0."ItemCode",
				T0."ItmsGrpCod", 
				T0."ItemName", 
				T0."OnHand",
				T0."MinLevel", 
				T0."ByWh", 
				T0."InvntryUom", 
				T0."LeadTime",
				T1."ItmsGrpNam"
		From "OITM"	T0
		Join "OITB"	T1 On	T0."ItmsGrpCod" = T1."ItmsGrpCod"
		Join #CRSP_INVENTORY_ITEMS_LOCAL T2 On T0."ItemCode" collate chinese_prc_ci_as = T2."ItemCode"		
	) T2 /*OITM & OITB*/
		on	T1."ItemCode" = T2."ItemCode"
	Join
	(
		SELECT T0."WhsCode", T0."WhsName" 
		From "OWHS" T0
	) T3 /*OWHS*/ on	T1."LocCode" = T3."WhsCode"
	left join
	(
		Select	"LocType", "LocCode", "ItemCode", Sum("InQty" - "OutQty") as "OpenStock" 
		From "OIVL"
		Where "DocDate" < @FromDate
		Group by "LocType", "LocCode", "ItemCode"
	) T4 /*OpenStock*/
	on	T1."LocType" = T4."LocType"
	and	T1."LocCode" = T4."LocCode"
	and	T1."ItemCode" = T4."ItemCode"
	left join
	(
		select t0.ItemCode, t0.LocCode, t0.LocType, sum(t0.EffectQty) as "IssueQty" from
		(
			select ItemCode, LocCode, LocType, sum(EffectQty) as EffectQty from cte2 
			group by TransType, DocEntry, DocLineNum,ItemCode, LocCode, LocType
			having sum(EffectQty) < 0
		) as t0
		group by t0.ItemCode, t0.LocCode, t0.LocType
	) T5 /*IssueQty*/
	on	T1."LocType" = T5."LocType"
	and	T1."LocCode" = T5."LocCode"
	and	T1."ItemCode" = T5."ItemCode"
	left join
	(
		select T1."LocType", T1."LocCode", T1."ItemCode", T1."LastDate", 
			   T2."WhsCode", T2."OnHand", T2."MinStock" from
		(
			Select	"LocType", "LocCode", "ItemCode", max("DocDate") as "LastDate"
			From "OIVL"
			Where "InQty" > 0 
			Group By "LocType", "LocCode", "ItemCode"
		) T1 /*LastDate*/
		join
		(
			SELECT "ItemCode", "WhsCode", "OnHand", "MinStock" From "OITW"
		) T2 /*OITW*/
		on	T1."ItemCode" = T2."ItemCode" and T1."LocCode" = T2."WhsCode"
	) T6
	on	T1."LocType" = T6."LocType"
	and	T1."LocCode" = T6."LocCode"
	and	T1."ItemCode" = T6."ItemCode";
	
	--DROP TABLE #CRSP_INVENTORY_ITEMS_LOCAL;	/* cause client of rev48 disconnected */
	
 END
 
GO 

CREATE proc SBO_SP_PostTransactionNotice

@object_type nvarchar(30), 				-- SBO Object Type
@transaction_type nchar(1),			-- [A]dd, [U]pdate, [D]elete, [C]ancel, C[L]ose
@num_of_cols_in_key int,
@list_of_key_cols_tab_del nvarchar(255),
@list_of_cols_val_tab_del nvarchar(255)

AS

begin

-- Return values
declare @error  int				-- Result (0 for no error)
declare @error_message nvarchar (200) 		-- Error string to be displayed
select @error = 0
select @error_message = N'Ok'

--------------------------------------------------------------------------------------------------------------------------------

--	ADD	YOUR	CODE	HERE

--------------------------------------------------------------------------------------------------------------------------------

-- Select the return values
select @error, @error_message

end
 
GO 

CREATE proc SBO_SP_TransactionNotification 

@object_type nvarchar(30), 				-- SBO Object Type
@transaction_type nchar(1),			-- [A]dd, [U]pdate, [D]elete, [C]ancel, C[L]ose
@num_of_cols_in_key int,
@list_of_key_cols_tab_del nvarchar(255),
@list_of_cols_val_tab_del nvarchar(255)

AS

begin

-- Return values
declare @error  int				-- Result (0 for no error)
declare @error_message nvarchar (200) 		-- Error string to be displayed
select @error = 0
select @error_message = N'Ok'

--------------------------------------------------------------------------------------------------------------------------------

--	ADD	YOUR	CODE	HERE

--------------------------------------------------------------------------------------------------------------------------------

-- Select the return values
select @error, @error_message

end
 
GO 

CREATE proc TmSp_adding_To_OITW

@SourceDB nvarchar(128) = NULL ,
@UtilityDB    nvarchar(128) = NULL

as
begin

exec     (' INSERT 
	 INTO  ['+ @SourceDB  +'].[dbo].[OITW]
		SELECT T1.*
		FROM   ['+ @UtilityDB +'].[dbo].[OITW] T1
		      	LEFT OUTER JOIN ['+ @SourceDB  +'].[dbo].[OITW] T0   
			ON  T0.ItemCode = T1.ItemCode and  T0.WhsCode = T1.WhsCode  
		WHERE T0.itemcode is NULL and T1.OnHand!=0 ')
end
 
GO 

/********************************************************************************************************************/
/*  TmSp_ChooseCIN4Correction- Retreives open corrections for correction invoice
*/
/********************************************************************************************************************/

CREATE PROCEDURE  TmSp_ChooseCIN4Correction
@card nvarchar(100),
@Type nvarchar(2),
@curr nvarchar(4)

AS

if (@Type=N'I')
begin
	if ( DATALENGTH(ltrim(rtrim(@curr)))>0 )
	begin
		select DocEntry, DocNum,  DocDate, CardCode, Comments, docDueDate  from OCIN
		WHERE (NOT EXISTS
				(select distinct(DocEntry) from CIN1 
					where DocEntry=OCIN.DocEntry AND
						(Quantity<=0 OR 
						LineStatus=N'C' OR
						OpenCreQty<>Quantity) ))
			
	
			 AND CANCELED<>N'Y' 
			AND cardCode = @card 
			AND DocType=N'I'
			AND DocCur=@curr
		ORDER BY DocNum
	end
	else
	begin
		select DocEntry, DocNum,  DocDate, CardCode, Comments, docDueDate  from OCIN
		WHERE (NOT EXISTS
				(select distinct(DocEntry) from CIN1 
					where DocEntry=OCIN.DocEntry AND
						(Quantity<=0 OR 
						LineStatus=N'C' OR
						OpenCreQty<>Quantity) ))
			
	
			 AND CANCELED<>N'Y' 
			AND cardCode = @card 
			AND DocType=N'I'
		ORDER BY DocNum
	end

end
else
begin
	if ( DATALENGTH(ltrim(rtrim(@curr)))>0 )
	begin	
		select DocEntry, DocNum,  DocDate, CardCode, Comments, docDueDate from OCIN
		WHERE (NOT EXISTS
				(select distinct(DocEntry) from CIN1 
					where DocEntry=OCIN.DocEntry AND
						LineStatus<>N'O'))
	
			 AND CANCELED<>N'Y' 
			AND cardCode = @card 
			AND DocType=N'S'
			AND DocCur=@curr
		ORDER BY DocNum
	end
	else
	begin
		select DocEntry, DocNum,  DocDate, CardCode, Comments, docDueDate from OCIN
		WHERE (NOT EXISTS
				(select distinct(DocEntry) from CIN1 
					where DocEntry=OCIN.DocEntry AND
						LineStatus<>N'O'))
	
			 AND CANCELED<>N'Y' 
			AND cardCode = @card 
			AND DocType=N'S'
		ORDER BY DocNum
	end
end
 
GO 

/********************************************************************************************************************/
/*  TmSp_ChooseINV4Correction - Retreives open invoices for correction invoice
*/
/********************************************************************************************************************/

CREATE PROCEDURE  TmSp_ChooseINV4Correction
@card nvarchar(100),
@Type nvarchar(2),
@curr nvarchar(4)

AS

if (@Type=N'I')
begin
	if ( DATALENGTH(ltrim(rtrim(@curr)))>0 )
	begin
		select DocEntry, DocNum,  DocDate, CardCode, Comments, docDueDate  from OINV
		WHERE (NOT EXISTS
				(select distinct(DocEntry) from INV1 
					where DocEntry=OINV.DocEntry AND
						(Quantity<=0 OR 
						LineStatus=N'C' OR
						OpenCreQty<>Quantity) ))
			
	
			 AND CANCELED<>N'Y' 
			AND cardCode = @card 
			AND DocType=N'I'
			AND DocCur=@curr
		ORDER BY DocNum
	end
	else
	begin
		select DocEntry, DocNum,  DocDate, CardCode, Comments, docDueDate  from OINV
		WHERE (NOT EXISTS
				(select distinct(DocEntry) from INV1 
					where DocEntry=OINV.DocEntry AND
						(Quantity<=0 OR 
						LineStatus=N'C' OR
						OpenCreQty<>Quantity) ))
			
	
			 AND CANCELED<>N'Y' 
			AND cardCode = @card 
			AND DocType=N'I'
		ORDER BY DocNum
	end

end
else
begin
	if ( DATALENGTH(ltrim(rtrim(@curr)))>0 )
	begin	
		select DocEntry, DocNum,  DocDate, CardCode, Comments, docDueDate from OINV
		WHERE (NOT EXISTS
				(select distinct(DocEntry) from INV1 
					where DocEntry=OINV.DocEntry AND
						LineStatus<>N'O'))
	
			 AND CANCELED<>N'Y' 
			AND cardCode = @card 
			AND DocType=N'S'
			AND DocCur=@curr
		ORDER BY DocNum
	end
	else
	begin
		select DocEntry, DocNum,  DocDate, CardCode, Comments, docDueDate from OINV
		WHERE (NOT EXISTS
				(select distinct(DocEntry) from INV1 
					where DocEntry=OINV.DocEntry AND
						LineStatus<>N'O'))
	
			 AND CANCELED<>N'Y' 
			AND cardCode = @card 
			AND DocType=N'S'
		ORDER BY DocNum
	end
end
 
GO 

CREATE PROCEDURE TmSp_CorrActReport 
	@account AS NVARCHAR(255),
	@dateFrom AS NVARCHAR(8),
	@dateTo AS NVARCHAR(8)
AS
BEGIN
	SELECT Account AS Acct,
		SUM(Debit) AS DebitLC,
		SUM(Credit) AS CreditLC,
		SUM(SysDeb) AS DebitSC,
		SUM(SysCred) AS CreditSC,
		0 AS Sort
	FROM JDT1 AS Lines, OJDT AS Header
	WHERE Header.TransId = Lines.TransId
	AND Account = @account
	AND Header.RefDate < CONVERT(DATETIME, @dateFrom, 112)
	GROUP BY Account

	UNION ALL

	SELECT @account, 0, 0, 0, 0, 0
	WHERE NOT EXISTS
	(
		SELECT 1
		FROM JDT1 AS Lines, OJDT AS Header
		WHERE Header.TransId = Lines.TransId
		AND Account = @account
		AND Header.RefDate < CONVERT(DATETIME, @dateFrom, 112)
	)
	
	UNION ALL

	SELECT Acct,
		SUM(CreditLC) AS DebitLC,
		SUM(DebitLC) AS CreditLC,
		SUM(CreditSC) AS DebitSC,
		SUM(DebitSC) AS CreditSC,
		1 AS Sort
	FROM
	(
		SELECT Lines.Account AS Acct,
			SUM(Debit) AS DebitLC,
			SUM(Credit) AS CreditLC,
			SUM(SysDeb) AS DebitSC,
			SUM(SysCred) AS CreditSC
		FROM JDT1 AS Lines, OJDT AS Header
		WHERE (
			ContraAct IN
			(
				SELECT CardCode
				FROM OCRD
				WHERE DebPayAcct = @account

				UNION ALL

				SELECT CardCode
				FROM CRD3
				WHERE AcctCode = @account
			)
			OR ContraAct = @account
		) AND @account IN
		(
			SELECT Account
			FROM JDT1
			WHERE JDT1.TransId = Header.TransId
		)
		AND Account <> @account
		AND Lines.TransId = Header.TransId
		GROUP BY Account, Header.RefDate
		HAVING Header.RefDate
		BETWEEN CONVERT(DATETIME, @dateFrom, 112)
		AND CONVERT(DATETIME, @dateTo, 112)
	
		UNION ALL
	
-- Debit and credit are swapped intentionally
		SELECT Lines1.Account AS Acct,
			SUM(Lines2.Credit) AS DebitLC,
			SUM(Lines2.Debit) AS CreditLC,
			SUM(Lines2.SysCred) AS DebitSC,
			SUM(Lines2.SysDeb) AS CreditSC
		FROM JDT1 AS Lines1, JDT1 AS Lines2, OJDT AS Header
		WHERE Lines1.TransId = Lines2.TransId
		AND Lines1.TransId = Header.TransId
		AND Lines2.Account = @account
		AND Lines2.ContraAct = Lines1.ShortName
		AND (Lines1.ContraAct IS NULL or Lines1.ContraAct = '')
		AND ((Lines2.Credit < Lines1.Debit AND Lines2.Credit > 0) OR (Lines2.Credit > Lines1.Debit AND Lines2.Credit < 0) OR
			(Lines2.Debit < Lines1.Credit AND Lines2.Debit > 0) OR (Lines2.Debit > Lines1.Credit AND Lines2.Debit < 0))
		AND Header.RefDate
			BETWEEN CONVERT(DATETIME, @dateFrom, 112)
			AND CONVERT(DATETIME, @dateTo, 112)
		GROUP BY Lines1.Account

		UNION ALL
	
		SELECT Lines1.Account AS Acct,
			SUM(Lines1.Debit) AS DebitLC,
			SUM(Lines1.Credit) AS CreditLC,
			SUM(Lines1.SysDeb) AS DebitSC,
			SUM(Lines1.SysCred) AS CreditSC
		FROM JDT1 AS Lines1, JDT1 AS Lines2, OJDT AS Header
		WHERE Lines1.TransId = Lines2.TransId
		AND Lines1.TransId = Header.TransId
		AND Lines2.Account = @account
		AND Lines2.ContraAct = Lines1.ShortName
		AND (Lines1.ContraAct IS NULL or Lines1.ContraAct = '')
		AND ((Lines2.Credit > Lines1.Debit AND Lines2.Credit > 0) OR (Lines2.Credit < Lines1.Debit AND Lines2.Credit < 0) OR
			(Lines2.Debit > Lines1.Credit AND Lines2.Debit > 0) OR (Lines2.Debit < Lines1.Credit AND Lines2.Debit < 0))
		AND Header.RefDate
			BETWEEN CONVERT(DATETIME, @dateFrom, 112)
			AND CONVERT(DATETIME, @dateTo, 112)
		GROUP BY Lines1.Account

		UNION ALL

-- Debit and credit are swapped intentionally
		SELECT Lines1.Account AS Acct,
			SUM(-Lines3.Credit) AS DebitLC,
			SUM(-Lines3.Debit) AS CreditLC,
			SUM(-Lines3.SysCred) AS DebitSC,
			SUM(-Lines3.SysDeb) AS CreditSC
		FROM JDT1 AS Lines1, JDT1 AS Lines2, JDT1 AS Lines3, OJDT AS Header
		WHERE Lines2.TransId = Lines3.TransId
		AND Lines1.TransId = Lines2.TransId
		AND Lines1.TransId = Header.TransId
		AND Lines3.ContraAct = Lines1.ShortName
		AND Lines3.Account <> @account
		AND Lines2.Account = @account
		AND Lines2.ContraAct = Lines1.ShortName
		AND (Lines1.ContraAct IS NULL or Lines1.ContraAct = '')
		AND ((Lines2.Credit > Lines1.Debit AND Lines2.Credit > 0) OR (Lines2.Credit < Lines1.Debit AND Lines2.Credit < 0) OR
			(Lines2.Debit > Lines1.Credit AND Lines2.Debit > 0) OR (Lines2.Debit < Lines1.Credit AND Lines2.Debit < 0))
		AND Header.RefDate
			BETWEEN CONVERT(DATETIME, @dateFrom, 112)
			AND CONVERT(DATETIME, @dateTo, 112)
		GROUP BY Lines1.Account

		UNION ALL

		SELECT 'Wrong correspondence 1' AS Acct,
			SUM(Lines.Debit) AS DebitLC,
			SUM(Lines.Credit) AS CreditLC,
			SUM(Lines.SysDeb) AS DebitSC,
			SUM(Lines.SysCred) AS CreditSC
		FROM JDT1 AS Lines, OJDT AS Header
		WHERE Header.TransId = Lines.TransId
		AND Lines.Account = @account
		AND Lines.ContraAct IS NULL
		AND NOT EXISTS
		(
			SELECT 1 FROM JDT1
			WHERE Lines.TransId = JDT1.TransId
			AND JDT1.ContraAct = Lines.ShortName
		)
		AND Header.RefDate
			BETWEEN CONVERT(DATETIME, @dateFrom, 112)
			AND CONVERT(DATETIME, @dateTo, 112)
		GROUP BY Account

		UNION ALL

		SELECT 'Wrong correspondence 2' AS Acct,
			SUM(Lines.Debit) AS DebitLC,
			SUM(Lines.Credit) AS CreditLC,
			SUM(Lines.SysDeb) AS DebitSC,
			SUM(Lines.SysCred) AS CreditSC
		FROM JDT1 AS Lines, OJDT AS Header
		WHERE Header.TransId = Lines.TransId
		AND Lines.Account = @account
		AND Lines.ContraAct IS NOT NULL
		AND Lines.ContraAct <> ''
		AND NOT EXISTS
		(
			SELECT 1 FROM JDT1
			WHERE Lines.TransId = JDT1.TransId
			AND JDT1.ShortName = Lines.ContraAct
		)
		AND Header.RefDate
			BETWEEN CONVERT(DATETIME, @dateFrom, 112)
			AND CONVERT(DATETIME, @dateTo, 112)
		GROUP BY Account
	
	) DUMMY
	GROUP BY Acct
	ORDER BY Sort, Acct
END
 
GO 

CREATE PROCEDURE TmSp_CorrActReport_BP
	@account AS NVARCHAR(255),
	@dateFrom AS NVARCHAR(8),
	@dateTo AS NVARCHAR(8)
AS
BEGIN
	SELECT ShortName AS Acct,
		SUM(Debit) AS DebitLC,
		SUM(Credit) AS CreditLC,
		SUM(SysDeb) AS DebitSC,
		SUM(SysCred) AS CreditSC,
		0 AS Sort
	FROM JDT1 AS Lines, OJDT AS Header
	WHERE Header.TransId = Lines.TransId
	AND ShortName = @account
	AND Header.RefDate < CONVERT(DATETIME, @dateFrom, 112)
	GROUP BY ShortName

	UNION ALL

	SELECT @account, 0, 0, 0, 0, 0
	WHERE NOT EXISTS
	(
		SELECT 1
		FROM JDT1 AS Lines, OJDT AS Header
		WHERE Header.TransId = Lines.TransId
		AND ShortName = @account
		AND Header.RefDate < CONVERT(DATETIME, @dateFrom, 112)
	)
	
	UNION ALL

	SELECT Acct,
		SUM(CreditLC) AS DebitLC,
		SUM(DebitLC) AS CreditLC,
		SUM(CreditSC) AS DebitSC,
		SUM(DebitSC) AS CreditSC,
		1 AS Sort
	FROM
	(
		SELECT Account AS Acct,
			SUM(Debit) AS DebitLC,
			SUM(Credit) AS CreditLC,
			SUM(SysDeb) AS DebitSC,
			SUM(SysCred) AS CreditSC
		FROM JDT1 AS Lines, OJDT AS Header
		WHERE ContraAct = @account
		AND Lines.TransId = Header.TransId
		GROUP BY Account, Header.RefDate
		HAVING Header.RefDate
		BETWEEN CONVERT(DATETIME, @dateFrom, 112)
		AND CONVERT(DATETIME, @dateTo, 112)
	
		UNION ALL
	
-- Debit and credit are swapped intentionally
		SELECT Lines1.Account AS Acct,
			SUM(Lines2.Credit) AS DebitLC,
			SUM(Lines2.Debit) AS CreditLC,
			SUM(Lines2.SysCred) AS DebitSC,
			SUM(Lines2.SysDeb) AS CreditSC
		FROM JDT1 AS Lines1, JDT1 AS Lines2, OJDT AS Header
		WHERE Lines1.TransId = Lines2.TransId
		AND Lines1.TransId = Header.TransId
		AND Lines2.ShortName = @account
		AND Lines2.ContraAct = Lines1.ShortName
		AND (Lines1.ContraAct IS NULL or Lines1.ContraAct = '')
		AND ((Lines2.Credit < Lines1.Debit AND Lines2.Credit > 0) OR (Lines2.Credit > Lines1.Debit AND Lines2.Credit < 0) OR
			(Lines2.Debit < Lines1.Credit AND Lines2.Debit > 0) OR (Lines2.Debit > Lines1.Credit AND Lines2.Debit < 0))
		AND Header.RefDate
			BETWEEN CONVERT(DATETIME, @dateFrom, 112)
			AND CONVERT(DATETIME, @dateTo, 112)
		GROUP BY Lines1.Account

		UNION ALL

		SELECT Lines1.Account AS Acct,
			SUM(Lines1.Debit) AS DebitLC,
			SUM(Lines1.Credit) AS CreditLC,
			SUM(Lines1.SysDeb) AS DebitSC,
			SUM(Lines1.SysCred) AS CreditSC
		FROM JDT1 AS Lines1, JDT1 AS Lines2, OJDT AS Header
		WHERE Lines1.TransId = Lines2.TransId
		AND Lines1.TransId = Header.TransId
		AND Lines2.ShortName = @account
		AND Lines2.ContraAct = Lines1.ShortName
		AND (Lines1.ContraAct IS NULL or Lines1.ContraAct = '')
		AND ((Lines2.Credit > Lines1.Debit AND Lines2.Credit > 0) OR (Lines2.Credit < Lines1.Debit AND Lines2.Credit < 0) OR
			(Lines2.Debit > Lines1.Credit AND Lines2.Debit > 0) OR (Lines2.Debit < Lines1.Credit AND Lines2.Debit < 0))
		AND Header.RefDate
			BETWEEN CONVERT(DATETIME, @dateFrom, 112)
			AND CONVERT(DATETIME, @dateTo, 112)
		GROUP BY Lines1.Account

		UNION ALL

-- Debit and credit are swapped intentionally
		SELECT Lines1.Account AS Acct,
			SUM(-Lines3.Credit) AS DebitLC,
			SUM(-Lines3.Debit) AS CreditLC,
			SUM(-Lines3.SysCred) AS DebitSC,
			SUM(-Lines3.SysDeb) AS CreditSC
		FROM JDT1 AS Lines1, JDT1 AS Lines2, JDT1 AS Lines3, OJDT AS Header
		WHERE Lines2.TransId = Lines3.TransId
		AND Lines1.TransId = Lines2.TransId
		AND Lines1.TransId = Header.TransId
		AND Lines3.ContraAct = Lines1.ShortName
		AND Lines3.ShortName <> @account
		AND Lines2.ShortName = @account
		AND Lines2.ContraAct = Lines1.ShortName
		AND (Lines1.ContraAct IS NULL or Lines1.ContraAct = '')
		AND ((Lines2.Credit > Lines1.Debit AND Lines2.Credit > 0) OR (Lines2.Credit < Lines1.Debit AND Lines2.Credit < 0) OR
			(Lines2.Debit > Lines1.Credit AND Lines2.Debit > 0) OR (Lines2.Debit < Lines1.Credit AND Lines2.Debit < 0))
		AND Header.RefDate
			BETWEEN CONVERT(DATETIME, @dateFrom, 112)
			AND CONVERT(DATETIME, @dateTo, 112)
		GROUP BY Lines1.Account

		UNION ALL

		SELECT 'Wrong correspondence 1' AS Acct,
			SUM(Lines.Debit) AS DebitLC,
			SUM(Lines.Credit) AS CreditLC,
			SUM(Lines.SysDeb) AS DebitSC,
			SUM(Lines.SysCred) AS CreditSC
		FROM JDT1 AS Lines, OJDT AS Header
		WHERE Header.TransId = Lines.TransId
		AND Lines.ShortName = @account
		AND (Lines.ContraAct IS NULL  OR Lines.ContraAct = '')
		AND NOT EXISTS
		(
			SELECT 1 FROM JDT1
			WHERE Lines.TransId = JDT1.TransId
			AND JDT1.ContraAct = Lines.ShortName
		)
		AND Header.RefDate
			BETWEEN CONVERT(DATETIME, @dateFrom, 112)
			AND CONVERT(DATETIME, @dateTo, 112)
		GROUP BY Account

		UNION ALL

		SELECT 'Wrong correspondence 2' AS Acct,
			SUM(Lines.Debit) AS DebitLC,
			SUM(Lines.Credit) AS CreditLC,
			SUM(Lines.SysDeb) AS DebitSC,
			SUM(Lines.SysCred) AS CreditSC
		FROM JDT1 AS Lines, OJDT AS Header
		WHERE Header.TransId = Lines.TransId
		AND Lines.ShortName = @account
		AND Lines.ContraAct IS NOT NULL
		AND Lines.ContraAct <> '' 
		AND NOT EXISTS
		(
			SELECT 1 FROM JDT1
			WHERE Lines.TransId = JDT1.TransId
			AND JDT1.ShortName = Lines.ContraAct
		)
		AND Header.RefDate
			BETWEEN CONVERT(DATETIME, @dateFrom, 112)
			AND CONVERT(DATETIME, @dateTo, 112)
		GROUP BY Account
	
	) DUMMY
	GROUP BY Acct
	ORDER BY Sort, Acct
END
 
GO 

CREATE PROCEDURE TmSp_CorrActReport_BP_Split
	@account AS NVARCHAR(255),
	@dateFrom AS NVARCHAR(8),
	@dateTo AS NVARCHAR(8)
AS
BEGIN
	SELECT ShortName AS Acct,
		SUM(Debit) AS DebitLC,
		SUM(Credit) AS CreditLC,
		SUM(SysDeb) AS DebitSC,
		SUM(SysCred) AS CreditSC,
		0 AS Sort
	FROM JDT1 AS Lines, OJDT AS Header
	WHERE Header.TransId = Lines.TransId
	AND ShortName = @account
	AND Header.RefDate < CONVERT(DATETIME, @dateFrom, 112)
	GROUP BY ShortName

	UNION ALL

	SELECT @account, 0, 0, 0, 0, 0
	WHERE NOT EXISTS
	(
		SELECT 1
		FROM JDT1 AS Lines, OJDT AS Header
		WHERE Header.TransId = Lines.TransId
		AND ShortName = @account
		AND Header.RefDate < CONVERT(DATETIME, @dateFrom, 112)
	)
	
	UNION ALL

	SELECT Acct,
		SUM(CreditLC) AS DebitLC,
		SUM(DebitLC) AS CreditLC,
		SUM(CreditSC) AS DebitSC,
		SUM(DebitSC) AS CreditSC,
		1 AS Sort
	FROM
	(
		SELECT ShortName AS Acct,
			SUM(Debit) AS DebitLC,
			SUM(Credit) AS CreditLC,
			SUM(SysDeb) AS DebitSC,
			SUM(SysCred) AS CreditSC
		FROM JDT1 AS Lines, OJDT AS Header
		WHERE ContraAct = @account
		AND Lines.TransId = Header.TransId
		GROUP BY ShortName, Header.RefDate
		HAVING Header.RefDate
		BETWEEN CONVERT(DATETIME, @dateFrom, 112)
		AND CONVERT(DATETIME, @dateTo, 112)
	
		UNION ALL
	
-- Debit and credit are swapped intentionally
		SELECT Lines1.ShortName AS Acct,
			SUM(Lines2.Credit) AS DebitLC,
			SUM(Lines2.Debit) AS CreditLC,
			SUM(Lines2.SysCred) AS DebitSC,
			SUM(Lines2.SysDeb) AS CreditSC
		FROM JDT1 AS Lines1, JDT1 AS Lines2, OJDT AS Header
		WHERE Lines1.TransId = Lines2.TransId
		AND Lines1.TransId = Header.TransId
		AND Lines2.ShortName = @account
		AND Lines2.ContraAct = Lines1.ShortName
		AND (Lines1.ContraAct IS NULL or Lines1.ContraAct = '')
		AND ((Lines2.Credit < Lines1.Debit AND Lines2.Credit > 0) OR (Lines2.Credit > Lines1.Debit AND Lines2.Credit < 0) OR
			(Lines2.Debit < Lines1.Credit AND Lines2.Debit > 0) OR (Lines2.Debit > Lines1.Credit AND Lines2.Debit < 0))
		AND Header.RefDate
			BETWEEN CONVERT(DATETIME, @dateFrom, 112)
			AND CONVERT(DATETIME, @dateTo, 112)
		GROUP BY Lines1.ShortName

		UNION ALL

		SELECT Lines1.ShortName AS Acct,
			SUM(Lines1.Debit) AS DebitLC,
			SUM(Lines1.Credit) AS CreditLC,
			SUM(Lines1.SysDeb) AS DebitSC,
			SUM(Lines1.SysCred) AS CreditSC
		FROM JDT1 AS Lines1, JDT1 AS Lines2, OJDT AS Header
		WHERE Lines1.TransId = Lines2.TransId
		AND Lines1.TransId = Header.TransId
		AND Lines2.ShortName = @account
		AND Lines2.ContraAct = Lines1.ShortName
		AND (Lines1.ContraAct IS NULL or Lines1.ContraAct = '')
		AND ((Lines2.Credit > Lines1.Debit AND Lines2.Credit > 0) OR (Lines2.Credit < Lines1.Debit AND Lines2.Credit < 0) OR
			(Lines2.Debit > Lines1.Credit AND Lines2.Debit > 0) OR (Lines2.Debit < Lines1.Credit AND Lines2.Debit < 0))
		AND Header.RefDate
			BETWEEN CONVERT(DATETIME, @dateFrom, 112)
			AND CONVERT(DATETIME, @dateTo, 112)
		GROUP BY Lines1.ShortName

		UNION ALL

-- Debit and credit are swapped intentionally
		SELECT Lines1.ShortName AS Acct,
			SUM(-Lines3.Credit) AS DebitLC,
			SUM(-Lines3.Debit) AS CreditLC,
			SUM(-Lines3.SysCred) AS DebitSC,
			SUM(-Lines3.SysDeb) AS CreditSC
		FROM JDT1 AS Lines1, JDT1 AS Lines2, JDT1 AS Lines3, OJDT AS Header
		WHERE Lines2.TransId = Lines3.TransId
		AND Lines1.TransId = Lines2.TransId
		AND Lines1.TransId = Header.TransId
		AND Lines3.ContraAct = Lines1.ShortName
		AND Lines3.ShortName <> @account
		AND Lines2.ShortName = @account
		AND Lines2.ContraAct = Lines1.ShortName
		AND (Lines1.ContraAct IS NULL or Lines1.ContraAct = '')
		AND ((Lines2.Credit > Lines1.Debit AND Lines2.Credit > 0) OR (Lines2.Credit < Lines1.Debit AND Lines2.Credit < 0) OR
			(Lines2.Debit > Lines1.Credit AND Lines2.Debit > 0) OR (Lines2.Debit < Lines1.Credit AND Lines2.Debit < 0))
		AND Header.RefDate
			BETWEEN CONVERT(DATETIME, @dateFrom, 112)
			AND CONVERT(DATETIME, @dateTo, 112)
		GROUP BY Lines1.ShortName

		UNION ALL

		SELECT 'Wrong correspondence 1' AS Acct,
			SUM(Lines.Debit) AS DebitLC,
			SUM(Lines.Credit) AS CreditLC,
			SUM(Lines.SysDeb) AS DebitSC,
			SUM(Lines.SysCred) AS CreditSC
		FROM JDT1 AS Lines, OJDT AS Header
		WHERE Header.TransId = Lines.TransId
		AND Lines.ShortName = @account
		AND (Lines.ContraAct IS NULL  OR Lines.ContraAct = '')
		AND NOT EXISTS
		(
			SELECT 1 FROM JDT1
			WHERE Lines.TransId = JDT1.TransId
			AND JDT1.ContraAct = Lines.ShortName
		)
		AND Header.RefDate
			BETWEEN CONVERT(DATETIME, @dateFrom, 112)
			AND CONVERT(DATETIME, @dateTo, 112)
		GROUP BY Account

		UNION ALL

		SELECT 'Wrong correspondence 2' AS Acct,
			SUM(Lines.Debit) AS DebitLC,
			SUM(Lines.Credit) AS CreditLC,
			SUM(Lines.SysDeb) AS DebitSC,
			SUM(Lines.SysCred) AS CreditSC
		FROM JDT1 AS Lines, OJDT AS Header
		WHERE Header.TransId = Lines.TransId
		AND Lines.ShortName = @account
		AND Lines.ContraAct IS NOT NULL
		AND Lines.ContraAct <> ''
		AND NOT EXISTS
		(
			SELECT 1 FROM JDT1
			WHERE Lines.TransId = JDT1.TransId
			AND JDT1.ShortName = Lines.ContraAct
		)
		AND Header.RefDate
			BETWEEN CONVERT(DATETIME, @dateFrom, 112)
			AND CONVERT(DATETIME, @dateTo, 112)
		GROUP BY Account
	
	) DUMMY
	GROUP BY Acct
	ORDER BY Sort, Acct
END
 

  

posted @ 2026-01-21 07:07  samrv  阅读(3)  评论(0)    收藏  举报