USE [Prince]
GO
/****** Object:  StoredProcedure [Common].[TroubleShooting_Search]    Script Date: 12/28/2025 11:15:13 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:		Ghasem Babaie
-- Create date: 2025/06/17 | 1404/03/27
-- Description: TroubleShooting Data From Some Of DB Tables!
-- =============================================
ALTER PROCEDURE [Common].[TroubleShooting_Search]
(
    @TroubleShootingDataType	[Common].[_SMALL_]
)
AS
BEGIN
       SET NOCOUNT ON;
       ------------------------------------------------
		
		-- ایجاد جدول موقت
		DECLARE @Res TABLE (
			DataType NVARCHAR(100),
			DataTypeTitle NVARCHAR(100),
			DataTable NVARCHAR(100),
			DataTableTitle NVARCHAR(100),
			BaseDataID INT,
			
			-- Added By Ghasem Babaie - 1404.08.04 [ PRI-4505 ]
			BaseDataType INT,			
			
			DataTitle NVARCHAR(500),
			ErrDesc NVARCHAR(MAX)
		)		
		
		-- استخراج سال مالی باز
		DECLARE @FNY_Name	[Common].[_SMALL_]
		SET @FNY_Name = (SELECT [FNY_Name] FROM [Common].[FinancialYear] WHERE ISNULL([FNY_CloseDate_Int], 0) = 0)		
		
		-------------------------------------------
		-- بررسی اینکه سیستم مرکز و شعب است یا خیر؟
		-- چون برخی موارد فقط باید بر روی سیستم های مرکز و شعب بررسی شوند
		-------------------------------------------
		/*
			0 -> Normal
			1 -> Branch (VIP)
			2 -> Center (VIP)
		*/
		-------------------------------------------
		DECLARE	@CenterBranchState	[Common].[_INT_] = 0
		SELECT @CenterBranchState = SST_Value FROM [Common].[SystemSetting]	WHERE SST_Title = 'BranchSystemState' AND SST_UserID = 0
		
		-- این متغییرها فقط بر روی سیستم های مرکز و شعب ساخته می شوند
		IF @CenterBranchState in (1,2)
		BEGIN	
			DECLARE @VMA_TableID		[Common].[_INT_]
			DECLARE @VMA_TableName		[Common].[_SMALL_]
			DECLARE @Table_AbbName		[Common].[_TINY_]
			DECLARE @Table_PersianName	[Common].[_TINY_]				
			DECLARE @SQLString			NVARCHAR(MAX) = ''
		END		
		
		----------------------------------------------------------
		----------------------------------------------------------
		----------------------------------------------------------			
		
		IF ISNULL(@TroubleShootingDataType, '') = ''
			SET @TroubleShootingDataType = 'CPN,CMD,Factor,LostData,LostVipMapping'

		-- اشخاص
		IF ',' + @TroubleShootingDataType + ',' LIKE '%,CPN,%'
		BEGIN
			DECLARE @LKP_Contact_Mobile	[Common].[_INT_] = 0
			DECLARE @LKP_Contact_WorkPhone	[Common].[_INT_] = 0
			DECLARE @LKP_Contact_HomePhone	[Common].[_INT_] = 0
			SET @LKP_Contact_Mobile = [Common].[LKP_EngCaptionToID]('Contact_Mobile', N'تلفن همراه', 30)
			SET @LKP_Contact_WorkPhone = [Common].[LKP_EngCaptionToID]('Contact_WorkPhone', N'تلفن محل كار', 23)
			SET @LKP_Contact_HomePhone = [Common].[LKP_EngCaptionToID]('Contact_HomePhone', N'تلفن منزل', 21)		
			
			--------------------------------			
			-- استخراج معیار یکتا بودن اشخاص
			--------------------------------			
			/*
				WhoToDetectUniquePersonInVIP:
				-----------------------------
				0 -> MobileNumber
				1 -> NationalCode
			*/
			--------------------------------
			DECLARE	@WhoToDetectUniquePersonInVIP	[Common].[_INT_] = 0
			SELECT @WhoToDetectUniquePersonInVIP = SST_Value FROM [Common].[SystemSetting]	WHERE SST_Title = 'WhoToDetectUniquePersonInVIP' AND SST_UserID = 0			
			
			
			--**************** اشخاص حذف شده
			DECLARE @DisablePersonTable TABLE (T_ID INT)
			IF (@CenterBranchState = 0)
			BEGIN
			
			   INSERT INTO @DisablePersonTable
			   SELECT  CPN_ID FROM Common.CompanyPerson WHERE CPN_IsDisabled = 1
			
			END
			
			----------------------------------------------------------
			----------------------------------------------------------
			
			-- بررسی اینکه برای کدام اشخاص، چند شماره موبایل پیش فرض در دیتابیس ثبت شده است
			INSERT INTO @Res
			SELECT 'CPN' AS DataType, 
					N'اشخاص' AS DataTypeTitle,
					'ContactInformation' AS DataTable,
					N'اطلاعات تماس' AS DataTableTitle,
					[CIN_CPN_ID] AS BaseDataID,
					0 AS BaseDataType, 
					(SELECT LTRIM(RTRIM([CPN_FirstName] + ' ' + [CPN_LastName])) FROM [Common].[CompanyPerson] WHERE [CPN_ID] = [CIN_CPN_ID]) AS DataTitle,
					N'بیش از یک شماره موبایل پیش فرض برای شخص تعریف شده است!' + CHAR(13) + CHAR(10) +
					 N'بایستی شخص را ویرایش نمایید و در سربرگ اطلاعات تماس، تنها یک شماره پیش فرض را تعیین نمایید.' AS ErrDesc
			FROM [Common].[ContactInformation] 
			WHERE [CIN_LKP_Type] = @LKP_Contact_Mobile AND 
				  [CIN_IsDefault] = 1 AND 
				  [CIN_CPN_ID] NOT IN (SELECT T_ID FROM @DisablePersonTable) 
			GROUP BY [CIN_CPN_ID]
			HAVING COUNT(1) > 1
						
			
			-- بررسی اینکه برای کدام اشخاص، چند شماره تماس پیش فرض ثبت شده است
			-- بدون در نظر گرفتن نوع شماره تماس (تلفن همراه / تلفن محل کار / تلفن منزل)	
			-- Changed By Ghasem Babaie - 1404.07.29
			-- وجود داشته باشد [CIN_IsDefault] = 1 برای هر شخص لزوما نباید تنها یک ردیف [Common].[ContactInformation]  خانم زارعی فرمودند که در جدول
			-- Mobile / WorkPhone / HomePhone <- و شخص به ازاء هر نوع شماره ای می تواند یک شماره پیش فرض داشته باشد
			-- را نیز افزودیم [CIN_LKP_Type] مقدار GROUP BY بنابر این در 
			INSERT INTO @Res
			SELECT 'CPN' AS DataType, 
					N'اشخاص' AS DataTypeTitle,
					'ContactInformation' AS DataTable,
					N'اطلاعات تماس' AS DataTableTitle,					
					[CIN_CPN_ID] AS BaseDataID, 
					0 AS BaseDataType,
					(SELECT LTRIM(RTRIM([CPN_FirstName] + ' ' + [CPN_LastName])) FROM [Common].[CompanyPerson] WHERE [CPN_ID] = [CIN_CPN_ID]) AS DataTitle,
					N'بیش از یک شماره تماس پیش فرض برای شخص تعریف شده است!' + CHAR(13) + CHAR(10) +
					 N'بایستی شخص را ویرایش نمایید و در سربرگ اطلاعات تماس، تنها یک شماره پیش فرض را تعیین نمایید.' AS ErrDesc
			FROM [Common].[ContactInformation] 
			WHERE [CIN_LKP_Type] IN (@LKP_Contact_Mobile, @LKP_Contact_WorkPhone, @LKP_Contact_HomePhone) AND 
				  [CIN_IsDefault] = 1  AND
				  [CIN_CPN_ID] NOT IN (SELECT T_ID FROM @DisablePersonTable)
			GROUP BY [CIN_CPN_ID], [CIN_LKP_Type]
			HAVING COUNT(1) > 1		        	   
			
				
			-- بررسی اینکه برای کدام اشخاص، هیچ شماره تماس پیش فرضی ثبت نشده است
			-- در صورتی که شخص حداقل یک شماره موبایل ثبت شده داشته باشد
			INSERT INTO @Res
			SELECT 'CPN' AS DataType, 
					N'اشخاص' AS DataTypeTitle,
					'ContactInformation' AS DataTable,
					N'اطلاعات تماس' AS DataTableTitle,					
					[CIN_CPN_ID] AS BaseDataID, 
					0 AS BaseDataType,
					(SELECT LTRIM(RTRIM([CPN_FirstName] + ' ' + [CPN_LastName])) FROM [Common].[CompanyPerson] WHERE [CPN_ID] = [CIN_CPN_ID]) AS DataTitle,
					N'هیچ یک از شماره های ثبت شده به عنوان شماره موبایل پیش فرض برای شخص تعیین نشده است!' + CHAR(13) + CHAR(10) +
					 N'بایستی شخص را ویرایش نمایید و شماره موبایل پیش فرض را تعیین کنید.' AS ErrDesc
			FROM [Common].[ContactInformation] 
			WHERE [CIN_LKP_Type] IN (@LKP_Contact_Mobile) AND 
					[CIN_IsDefault] = 0 AND
					[CIN_CPN_ID] NOT IN (SELECT T_ID FROM @DisablePersonTable) AND
					[CIN_CPN_ID] NOT IN (SELECT [CIN_CPN_ID]
										 FROM [Common].[ContactInformation]
										 WHERE [CIN_LKP_Type] IN (@LKP_Contact_Mobile) AND
												[CIN_IsDefault] = 1)  
			GROUP BY [CIN_CPN_ID]						
			
			
			-- بررسی اینکه برای کدام اشخاص، شماره تماس های تکراری ثبت شده است (یعنی برای چندین شخص شماره یکسان درج شده است)
			-- مهم ترین نوع شماره تماسی که نباید تکراری ثبت شود، شماره موبایل است
			-- چون شماره موبایل به عنوان شناسه منحصر به فرد اشخاص در فروشگاه زنجیره ای و باشگاه مشتریان کار می کند
			INSERT INTO @Res
			SELECT 'CPN' AS DataType, 
					N'اشخاص' AS DataTypeTitle,
					'ContactInformation' AS DataTable,
					N'اطلاعات تماس' AS DataTableTitle,					
					[CIN_CPN_ID] AS BaseDataID, 
					0 AS BaseDataType,
					(SELECT LTRIM(RTRIM([CPN_FirstName] + ' ' + [CPN_LastName])) FROM [Common].[CompanyPerson] WHERE [CPN_ID] = [CIN_CPN_ID]) AS DataTitle,
					N'شماره موبایل این شخص، تکراری است و برای اشخاص دیگر نیز ثبت شده است!' + CHAR(13) + CHAR(10) +
					 N'نام تمامی اشخاصی که شماره موبایل تکراری دارند را در لیست مشاهده می نمایید.' + CHAR(13) + CHAR(10) +
					 N'این اشخاص را ویرایش نمایید و شماره موبایل های تکراری را تغییر دهید.' AS ErrDesc
			FROM [Common].[ContactInformation] 
			WHERE [CIN_LKP_Type] IN (@LKP_Contact_Mobile) AND
					[CIN_IsDefault] = 1 AND
					[CIN_CPN_ID] NOT IN (SELECT T_ID FROM @DisablePersonTable) AND
					[CIN_Value] IN (SELECT [CIN_Value]
									FROM [Common].[ContactInformation] 
									WHERE [CIN_LKP_Type] = @LKP_Contact_Mobile AND 
									      [CIN_CPN_ID] NOT IN (SELECT T_ID FROM @DisablePersonTable) AND 
										  [CIN_IsDefault] = 1  
									GROUP BY [CIN_Value] 
									HAVING COUNT(1) > 1)
			GROUP BY [CIN_CPN_ID]
		
		
			-- متفاوت است یا خیر؟ [Common].[CompanyPerson] در جدول [CPN_MobileNumber] با اطلاعات فیلد [Common].[ContactInformation] بررسی اینکه شماره موبایل پیش فرض ثبت شده در جدول 
			-- مقدار این فیلد همواره بایستی با شماره موبایل پیش فرض شخص یکسان باشد
			INSERT INTO @Res
			SELECT 'CPN' AS DataType, 
					N'اشخاص' AS DataTypeTitle,
					'ContactInformation' AS DataTable,
					N'اطلاعات تماس' AS DataTableTitle,					
					[CIN_CPN_ID] AS BaseDataID, 
					0 AS BaseDataType,
					(SELECT LTRIM(RTRIM([CPN_FirstName] + ' ' + [CPN_LastName])) FROM [Common].[CompanyPerson] WHERE [CPN_ID] = [CIN_CPN_ID]) AS DataTitle,
					N'تناقض در شماره موبایل پیش فرض ثبت شده در جدول اشخاص و اطلاعات تماس!' + CHAR(13) + CHAR(10) +
					 N'شماره موبایل پیش فرض را در 2 جدول بررسی و یکسان سازی کنید.' AS ErrDesc
			FROM [Common].[ContactInformation]
				LEFT JOIN [Common].[CompanyPerson] ON [CIN_CPN_ID] = [CPN_ID]
			WHERE [CIN_LKP_Type] IN (@LKP_Contact_Mobile) AND
				  [CIN_IsDefault] = 1 AND
				  [CIN_CPN_ID] NOT IN (SELECT T_ID FROM @DisablePersonTable) AND 
					LTRIM(RTRIM([CPN_MobileNumber])) <> LTRIM(RTRIM([CIN_Value]))
			GROUP BY [CIN_CPN_ID]
					
			
			-- بررسی اینکه برای کدام اشخاص، شماره موبایل نامعتبر ثبت شده است
			-- شماره موبایل معتبر باید فقط شامل اعداد 0123456789 و 11 رقمی باشد
			INSERT INTO @Res
			SELECT 'CPN' AS DataType, 
					N'اشخاص' AS DataTypeTitle,
					'ContactInformation' AS DataTable,
					N'اطلاعات تماس' AS DataTableTitle,					
					[CIN_CPN_ID] AS BaseDataID, 
					0 AS BaseDataType,
					(SELECT LTRIM(RTRIM([CPN_FirstName] + ' ' + [CPN_LastName])) FROM [Common].[CompanyPerson] WHERE [CPN_ID] = [CIN_CPN_ID]) AS DataTitle,
					N'شماره موبایل درج شده برای شخص نامعتبر است!' + CHAR(13) + CHAR(10) +
					 N'شماره موبایل بایستی 11 رقمی و فقط شامل اعداد باشد.' + CHAR(13) + CHAR(10) +
					 N'لطفا اطلاعات شخص را ویرایش نمایید و در سربرگ اطلاعات تماس، شماره موبایل نامعتبر را تصحیح نمایید.' AS ErrDesc
			FROM [Common].[ContactInformation] 
			WHERE [CIN_LKP_Type] IN (@LKP_Contact_Mobile) AND
			      [CIN_CPN_ID] NOT IN (SELECT T_ID FROM @DisablePersonTable) AND   
					[Common].[SYS_MobileNoIsValid](LTRIM(RTRIM([CIN_Value]))) = 0
			GROUP BY [CIN_CPN_ID]


			-- بررسی اینکه برای کدام اشخاص، کد ملی تکراری ثبت شده است
			-- کد ملی می تواند در فروشگاه زنجیره ای معیار تشخیص یکتا بودن اشخاص باشد
			-- براساس تنظیمات این بررسی انجام می شود (تنظیمات معیار یکتابودن اشخاص)
			/*
				WhoToDetectUniquePersonInVIP:
				-----------------------------
				0 -> MobileNumber
				1 -> NationalCode
			*/	
			INSERT INTO @Res			
			SELECT 'CPN' AS DataType, 
					N'اشخاص' AS DataTypeTitle,
					'CompanyPerson' AS DataTable,
					N'شخص' AS DataTableTitle,					
					[CPN_ID] AS BaseDataID, 
					0 AS BaseDataType,
					LTRIM(RTRIM([CPN_FirstName] + ' ' + [CPN_LastName])) AS DataTitle,
					N'کد ملی ثبت شده برای شخص تکراری است!' + CHAR(13) + CHAR(10) +
					 N'نام تمامی اشخاصی که کد ملی تکراری دارند را در لیست مشاهده می نمایید.' + CHAR(13) + CHAR(10) +
					 N'این اشخاص را ویرایش نمایید و کد ملی های تکراری را تغییر دهید.' AS ErrDesc
			FROM [Common].[CompanyPerson]  
			WHERE @WhoToDetectUniquePersonInVIP = 1 AND
				LTRIM(RTRIM([CPN_NationalCode])) <> '' AND
				1 = CASE WHEN (@CenterBranchState = 0) THEN 
				              CASE WHEN CPN_IsDisabled = 1 THEN 0 ELSE 1 END
				         ELSE 1
				    END AND           
				[CPN_NationalCode] IN (SELECT [CPN_NationalCode]
										FROM [Common].[CompanyPerson] 
										WHERE LTRIM(RTRIM([CPN_NationalCode])) <> ''  
										GROUP BY [CPN_NationalCode] 
										HAVING COUNT(1) > 1)						
			GROUP BY [CPN_ID], LTRIM(RTRIM([CPN_FirstName] + ' ' + [CPN_LastName])) 	
			
			
			-- کاراکتر غیر مجاز در کد ملی
			INSERT INTO @Res			
			SELECT 'CPN' AS DataType, 
					N'اشخاص' AS DataTypeTitle,
					'CompanyPerson' AS DataTable,
					N'شخص' AS DataTableTitle,					
					[CPN_ID] AS BaseDataID, 
					0 AS BaseDataType,
					LTRIM(RTRIM([CPN_FirstName] + ' ' + [CPN_LastName])) AS DataTitle,
					N'کد ملی درج شده برای شخص نامعتبر است!' + CHAR(13) + CHAR(10) +					
					 N'این اشخاص را ویرایش نمایید و کد ملی را اصلاح کنید.' AS ErrDesc
			FROM [Common].[CompanyPerson]  
			WHERE LTRIM(RTRIM([CPN_NationalCode])) <> '' AND
			      1 = CASE WHEN (@CenterBranchState = 0) THEN 
				              CASE WHEN CPN_IsDisabled = 1 THEN 0 ELSE 1 END
				         ELSE 1
				    END AND   
				(LTRIM(RTRIM(CPN_NationalCode)) COLLATE Latin1_General_BIN LIKE '%[^0-9]%') 						
			GROUP BY [CPN_ID], LTRIM(RTRIM([CPN_FirstName] + ' ' + [CPN_LastName])) 
				
			
			
			-- کاراکتر غیر مجاز در کد اقتصــادی
			INSERT INTO @Res			
			SELECT 'CPN' AS DataType, 
					N'اشخاص' AS DataTypeTitle,
					'CompanyPerson' AS DataTable,
					N'شخص' AS DataTableTitle,					
					[CPN_ID] AS BaseDataID, 
					0 AS BaseDataType,
					LTRIM(RTRIM([CPN_FirstName] + ' ' + [CPN_LastName])) AS DataTitle,
					N'کد اقتصــادی درج شده برای شخص نامعتبر است!' + CHAR(13) + CHAR(10) +					
					 N'این اشخاص را ویرایش نمایید و کد اقتصــادی را اصلاح کنید.' AS ErrDesc
			FROM [Common].[CompanyPerson]  
			WHERE LTRIM(RTRIM(CPN_EconomicCode)) <> '' AND
			     1 = CASE WHEN (@CenterBranchState = 0) THEN 
				              CASE WHEN CPN_IsDisabled = 1 THEN 0 ELSE 1 END
				         ELSE 1
				    END AND   
				(LTRIM(RTRIM(CPN_EconomicCode)) COLLATE Latin1_General_BIN LIKE '%[^0-9]%')  						
			GROUP BY [CPN_ID], LTRIM(RTRIM([CPN_FirstName] + ' ' + [CPN_LastName])) 				
		END
		
		----------------------------------------------------------
		----------------------------------------------------------
		----------------------------------------------------------		
		
		-- کالاها
		IF ',' + @TroubleShootingDataType + ',' LIKE '%,CMD,%'
		BEGIN
			-- !کد / بارکد کالا ثبت نشده است
			-- در این حالت به دلیل نقص در اطلاعات کالا، در بارگذاری اطلاعات کالا خطا به وجود می آید و اطلاعات کالا بارگذاری نمی شود
			INSERT INTO @Res
			SELECT 'CMD' AS DataType, 
					N'کالا' AS DataTypeTitle,
					'CommodityBarcode' AS DataTable,
					N'بارکد' AS DataTableTitle,					
					[CMD_ID] AS BaseDataID,
					0 AS BaseDataType,
					LTRIM(RTRIM([CMD_Name])) AS DataTitle,
					N'کد / بارکد کالا ثبت نشده است!' + CHAR(13) + CHAR(10) +
					 N'به دلیل نقص در اطلاعات کالا، ممکن است در بارگذاری اطلاعات کالا خطا به وجود بیاید و اطلاعات کالا بارگذاری نشود!' + CHAR(13) + CHAR(10) +
					 N'در صورت مشکل در بارگذاری اطلاعات کالا، بایستی اطلاعات مربوط به این بارکد را در جدول [Common].[CommodityBarcode] ایجاد نمایید.' AS ErrDesc
			FROM [Common].[Commodity]
			WHERE [CMD_ID] NOT IN (SELECT [BRC_CMD_ID] 
									FROM [Common].[CommodityBarcode]) AND
					[CMD_IsDisabled] = 0
			GROUP BY [CMD_ID], LTRIM(RTRIM([CMD_Name]))
			
			
			-- !کد تکراری برای کالا ثبت شده است
			INSERT INTO @Res
			SELECT 'CMD' AS DataType, 
					N'کالا' AS DataTypeTitle,
					'CommodityBarcode' AS DataTable,
					N'بارکد' AS DataTableTitle,					
					[BRC_CMD_ID] AS BaseDataID,
					0 AS BaseDataType,
					(SELECT LTRIM(RTRIM([CMD_Name])) FROM [Common].[Commodity] WHERE [CMD_ID] = [BRC_CMD_ID]) AS DataTitle,
					N'کد تکراری برای کالا ثبت شده است!' + CHAR(13) + CHAR(10) +
					 N'بایستی کد تکراری را از جدول [Common].[CommodityBarcode] حذف نمایید!' AS ErrDesc
			FROM [Common].[CommodityBarcode]
			WHERE [BRC_TYPE] = 0
			GROUP BY [BRC_CMD_ID]
			HAVING COUNT(1) > 1			
			
			
			-- !بارکد تکراری برای کالا ثبت شده است
			INSERT INTO @Res
			SELECT 'CMD' AS DataType, 
					N'کالا' AS DataTypeTitle,
					'CommodityBarcode' AS DataTable,
					N'بارکد' AS DataTableTitle,					
					[BRC_CMD_ID] AS BaseDataID,
					0 AS BaseDataType,
					(SELECT LTRIM(RTRIM([CMD_Name])) FROM [Common].[Commodity] WHERE [CMD_ID] = [BRC_CMD_ID]) AS DataTitle,
					N'بارکد تکراری برای کالا ثبت شده است!' + CHAR(13) + CHAR(10) +
					 N'بایستی بارکد تکراری را از جدول [Common].[CommodityBarcode] حذف نمایید!' AS ErrDesc
			FROM [Common].[CommodityBarcode]
			WHERE [BRC_TYPE] = 1
			GROUP BY [BRC_CMD_ID],[BRC_CODE]
			HAVING COUNT(1) > 1		
			
			
			-- کاراکترهای غیرمجاز در کد کالا وجود دارد
			-- کد کالا فقط باید شامل اعداد 0123456789 باشد
			INSERT INTO @Res
			SELECT 'CMD' AS DataType, 
					N'کالا' AS DataTypeTitle,
					'CommodityBarcode' AS DataTable,
					N'بارکد' AS DataTableTitle,					
					[BRC_CMD_ID] AS BaseDataID,
					0 AS BaseDataType,
					(SELECT LTRIM(RTRIM([CMD_Name])) FROM [Common].[Commodity] WHERE [CMD_ID] = [BRC_CMD_ID]) AS DataTitle,
					N'کاراکترهای غیرمجاز در کد کالا وجود دارد!' + CHAR(13) + CHAR(10) +
					 N'کد کالا فقط بایستی شامل اعداد باشد.' + CHAR(13) + CHAR(10) +
					 N'کالا را ویرایش نمایید و کد کالا را بررسی و کارکترهای غیر عددی را حذف نمایید.' AS ErrDesc
			FROM [Common].[CommodityBarcode] 
			WHERE [BRC_TYPE] = 0 AND
					[Common].[SYS_IsNumeric](LTRIM(RTRIM([BRC_CODE]))) = 0
			GROUP BY [BRC_CMD_ID]						
			
			
			-- !سطح قیمت برای کالا ثبت نشده است
			-- این یکی از رایج ترین مشکلاتی است که در کالاها داریم
			INSERT INTO @Res
			SELECT 'CMD' AS DataType, 
					N'کالا' AS DataTypeTitle,
					'PriceLevel' AS DataTable,
					N'سطح قیمت' AS DataTableTitle,					
					[CMD_ID] AS BaseDataID,
					0 AS BaseDataType,
					LTRIM(RTRIM([CMD_Name])) AS DataTitle,
					N'سطح قیمت کالا ثبت نشده است!' + CHAR(13) + CHAR(10) +
					 N'به دلیل نقص در اطلاعات کالا، ممکن است در بارگذاری اطلاعات کالا خطا به وجود بیاید و اطلاعات کالا بارگذاری نشود!' + CHAR(13) + CHAR(10) +
					 N'در صورت مشکل در بارگذاری اطلاعات کالا، بایستی اطلاعات مربوط به سطح قیمت را در جدول [Common].[PriceLevel] ایجاد نمایید.' AS ErrDesc
			FROM [Common].[Commodity]
			WHERE [CMD_ID] NOT IN (SELECT [PRL_CMD_ID] 
									FROM [Common].[PriceLevel]) AND
					[CMD_IsDisabled] = 0
			GROUP BY [CMD_ID], LTRIM(RTRIM([CMD_Name]))					


			-- !نقص در سطوح قیمت کالا، به ازاء هر سطح واحد بایستی حداقل یک سطح قیمت وجود داشته باشد
			INSERT INTO @Res
			SELECT 'CMD' AS DataType, 
					N'کالا' AS DataTypeTitle,
					'PriceLevel' AS DataTable,
					N'سطح قیمت' AS DataTableTitle,					
					[CMD_ID] AS BaseDataID,
					0 AS BaseDataType,
					LTRIM(RTRIM([CMD_Name])) AS DataTitle,
					N'نقص در سطوح قیمت کالا، به ازاء هر سطح واحد بایستی حداقل یک سطح قیمت وجود داشته باشد!' + CHAR(13) + CHAR(10) +
					 N'به دلیل نقص در اطلاعات کالا، ممکن است در بارگذاری اطلاعات کالا خطا به وجود بیاید و اطلاعات کالا بارگذاری نشود!' + CHAR(13) + CHAR(10) +
					 N'بایستی سطوح قیمت کالا را ویرایش نمایید و به ازاء هر سطح واحد، حداقل یک سطح قیمت در جدول [Common].[PriceLevel] ایجاد نمایید.' AS ErrDesc
			FROM [Common].[Commodity]
			WHERE [CMD_IsDisabled] = 0 AND
					((SELECT COUNT(1)
						FROM [Common].[PriceLevel]
						WHERE [PRL_CMD_ID] = [CMD_ID]) > 0) AND 
					((SELECT COUNT(1)
						FROM [Common].[PriceLevel]
						WHERE [PRL_CMD_ID] = [CMD_ID]) < (SELECT COUNT(1)
															FROM [Common].[CountingUnit]
															WHERE [CNU_CMD_ID] = [CMD_ID]))
			GROUP BY [CMD_ID], LTRIM(RTRIM([CMD_Name]))	
			
			
			-- !سطح واحدی برای کالا ثبت نشده است
			INSERT INTO @Res
			SELECT 'CMD' AS DataType, 
					N'کالا' AS DataTypeTitle,
					'CountingUnit' AS DataTable,
					N'سطح واحد' AS DataTableTitle,					
					[CMD_ID] AS BaseDataID,
					0 AS BaseDataType,
					LTRIM(RTRIM([CMD_Name])) AS DataTitle,
					N'سطح واحد کالا ثبت نشده است!' + CHAR(13) + CHAR(10) +
					 N'به دلیل نقص در اطلاعات کالا، ممکن است در بارگذاری اطلاعات کالا خطا به وجود بیاید و اطلاعات کالا بارگذاری نشود!' + CHAR(13) + CHAR(10) +
					 N'در صورت مشکل در بارگذاری اطلاعات کالا، بایستی اطلاعات مربوط به سطح واحد را در جدول [Common].[CountingUnit] ایجاد نمایید.' AS ErrDesc
			FROM [Common].[Commodity]
			WHERE [CMD_ID] NOT IN (SELECT [CNU_CMD_ID] 
									FROM [Common].[CountingUnit]) AND
					[CMD_IsDisabled] = 0
			GROUP BY [CMD_ID], LTRIM(RTRIM([CMD_Name]))
			
						
			-- کاراکترهای غیرمجاز در نام کالا وجود دارد
			-- بایستی کارکترهای غیر مجاز از نام کالا حذف گردد - این کاراکترها باعث ایجاد خطا در برخی کوئری ها می شود
			-- Enterکارکترهای غیر مجاز: ' " ٍ 
			-- این است که نام کالا چند خطی باشد Enter منظور از 
			INSERT INTO @Res
			SELECT 'CMD' AS DataType, 
					N'کالا' AS DataTypeTitle,
					'Commodity' AS DataTable,
					N'کالا' AS DataTableTitle,					
					[CMD_ID] AS BaseDataID, 
					0 AS BaseDataType,
					LTRIM(RTRIM([CMD_Name])) AS DataTitle,
					N'کاراکترهای غیرمجاز در نام کالا وجود دارد!' + CHAR(13) + CHAR(10) +
					 N'کالا را ویرایش نمایید و نام کالا را بررسی و کارکترهای مانند '' و " را حذف نمایید.' + CHAR(13) + CHAR(10) +
					 N'همچنین بررسی نمایید که نام کالا به صورت چند خطی ثبت نشده باشد!' AS ErrDesc
			FROM [Common].[Commodity] 
			WHERE [CMD_IsDisabled] = 0 AND
					(CHARINDEX('''', [CMD_Name]) <> 0 OR 
					 CHARINDEX('"', [CMD_Name]) <> 0 OR
					 CHARINDEX(CHAR(10), [CMD_Name]) <> 0 OR
					 CHARINDEX(CHAR(13), [CMD_Name]) <> 0)
			GROUP BY [CMD_ID], LTRIM(RTRIM([CMD_Name]))	
			
			
			-- بررسی اینکه قیمت خرید و فروش درج شده برای کالا عجیب و غریب (نا متعارف) نباشد
			-- بدین منظور جدول سطوح قیمت کالا را بررسی می کنیم و کالاهایی که قیمت خرید یا فروش آنها بزرگتر مساوی 9,999,999,999 باشد را نشان می دهیم
			INSERT INTO @Res
			SELECT 'CMD' AS DataType, 
					N'کالا' AS DataTypeTitle,
					'PriceLevel' AS DataTable,
					N'سطح قیمت' AS DataTableTitle,					
					[CMD_ID] AS BaseDataID,
					0 AS BaseDataType,
					LTRIM(RTRIM([CMD_Name])) AS DataTitle,
					N'قیمت درج شده برای کالا نامتعارف است!' + CHAR(13) + CHAR(10) +
					 N'کالا را ویرایش نمایید و بررسی کنید که قیمت های خرید و فروش درج شده برای کالا در تمامی سطوح قیمت صحیح باشد.' AS ErrDesc
			FROM [Common].[Commodity]
			WHERE [CMD_ID] IN (SELECT [PRL_CMD_ID] 
								FROM [Common].[PriceLevel]
								WHERE [PRL_BuyPrice] >= 9999999999 OR
										[PRL_SalePrice] >= 9999999999) AND
					[CMD_IsDisabled] = 0
			GROUP BY [CMD_ID], LTRIM(RTRIM([CMD_Name]))	
			
			
            -- دو سطح قیمت برای کالا به صورت همزمان سطح قیمت پیش فرض هستند
			 
			INSERT INTO @Res
			SELECT 'CMD' AS DataType, 
					N'کالا' AS DataTypeTitle,
					'Commodity' AS DataTable,
					N'کالا' AS DataTableTitle,					
					[CMD_ID] AS BaseDataID, 
					0 AS BaseDataType,
					LTRIM(RTRIM([CMD_Name])) AS DataTitle,
					N'چند سطح قیمت برای کالا به صورت همزمان سطح قیمت پیش فرض هستند!'  AS ErrDesc
			FROM [Common].[Commodity] 
			WHERE [CMD_IsDisabled] = 0 AND
					[CMD_ID] IN (SELECT PRL_CMD_ID
								   FROM Common.PriceLevel
								  WHERE PRL_IsDefault = 1
							   GROUP BY PRL_CMD_ID
								 HAVING COUNT(DISTINCT PRL_LKP_Title) > 1)
			GROUP BY [CMD_ID], LTRIM(RTRIM([CMD_Name]))								
		END	
		
		----------------------------------------------------------
		----------------------------------------------------------
		----------------------------------------------------------		
		
		-- فاکتور
		IF ',' + @TroubleShootingDataType + ',' LIKE '%,Factor,%'
		BEGIN
			-- بررسی اینکه تعداد خرید / فروش در اقلام فاکتور برای کالا عجیب و غریب (نا متعارف) نباشد
			-- بدین منظور جدول اقلام فاکتور را بررسی می کنیم و کالاهایی که تعداد خرید / فروش آنها بزرگتر مساوی 9,999,999 باشد را نشان می دهیم
			SET @SQLString = 'SELECT ''Factor'' AS DataType, 
									CASE [FCT_Type] 
										WHEN 0 THEN N''فاکتور خرید''
										WHEN 1 THEN N''فاکتور فروش''
										WHEN 2 THEN N''فاکتور برگشت از خرید''
										WHEN 3 THEN N''فاکتور برگشت از فروش''
										WHEN 4 THEN N''پیش فاکتور''
										WHEN 5 THEN N''سفارش''			               			               			               			               
										WHEN 6 THEN
											CASE WHEN [FCT_HasDocument] = 1 THEN N''فاکتور فروش امانی (قطعی)'' ELSE N''فاکتور فروش امانی (معلق)'' END
										WHEN 7 THEN 
											CASE WHEN [FCT_HasDocument] = 1 THEN N''فاکتور خرید امانی (قطعی)'' ELSE N''فاکتور خرید امانی (معلق)'' END		               			               
									 END AS DataTypeTitle, 
									''FactorItems'' AS DataTable,
									N''اقلام فاکتور'' AS DataTableTitle,	
									[FCT_ID] AS BaseDataID, 
									[FCT_Type] AS BaseDataType,
									N''فاکتور شماره: '' + LTRIM(RTRIM([FCT_Number])) + '' [ '' + (SELECT LTRIM(RTRIM([CMD_Name]))
																									FROM [Common].[Commodity]
																									WHERE [CMD_ID] = [FCI_CMD_ID]) + '' ] '' AS DataTitle,	
									N''تعداد درج شده برای کالا در فاکتور نامتعارف است!'' + CHAR(13) + CHAR(10) +
									 N''فاکتور را ویرایش نمایید و تعداد درج شده برای این کالا را بررسی نمایید.'' AS ErrDesc																						  										  
							  FROM [' + @FNY_Name + '].[Factor] AS F
								LEFT JOIN [' + @FNY_Name + '].[FactorItem] AS I ON [F].[FCT_ID] = [I].[FCI_FCT_ID]
							  WHERE [FCI_Quantity]  >= 9999999'		
			
			INSERT INTO @Res
			EXEC(@SQLString)	
			
			-- بررسی اینکه مبلغ واحد خرید / فروش در اقلام فاکتور برای کالا عجیب و غریب (نا متعارف) نباشد
			-- بدین منظور جدول اقلام فاکتور را بررسی می کنیم و کالاهایی که مبلغ واحد خرید / فروش آنها بزرگتر مساوی 9,999,999,999 باشد را نشان می دهیم
			SET @SQLString = 'SELECT ''Factor'' AS DataType, 									
									CASE [FCT_Type] 
										WHEN 0 THEN N''فاکتور خرید''
										WHEN 1 THEN N''فاکتور فروش''
										WHEN 2 THEN N''فاکتور برگشت از خرید''
										WHEN 3 THEN N''فاکتور برگشت از فروش''
										WHEN 4 THEN N''پیش فاکتور''
										WHEN 5 THEN N''سفارش''			               			               			               			               
										WHEN 6 THEN
											CASE WHEN [FCT_HasDocument] = 1 THEN N''فاکتور فروش امانی (قطعی)'' ELSE N''فاکتور فروش امانی (معلق)'' END
										WHEN 7 THEN 
											CASE WHEN [FCT_HasDocument] = 1 THEN N''فاکتور خرید امانی (قطعی)'' ELSE N''فاکتور خرید امانی (معلق)'' END		               			               
									 END AS DataTypeTitle,									  
									''FactorItems'' AS DataTable,
									N''اقلام فاکتور'' AS DataTableTitle,	
									[FCT_ID] AS BaseDataID, 
									[FCT_Type] AS BaseDataType,
									N''فاکتور شماره: '' + LTRIM(RTRIM([FCT_Number])) + '' [ '' + (SELECT LTRIM(RTRIM([CMD_Name]))
																									FROM [Common].[Commodity]
																									WHERE [CMD_ID] = [FCI_CMD_ID]) + '' ] '' AS DataTitle,	
									N''مبلغ واحد درج شده برای کالا در فاکتور نامتعارف است!'' + CHAR(13) + CHAR(10) +
									 N''فاکتور را ویرایش نمایید و مبلغ واحد درج شده برای این کالا را بررسی نمایید.'' AS ErrDesc																						  										  
							  FROM [' + @FNY_Name + '].[Factor] AS F
								LEFT JOIN [' + @FNY_Name + '].[FactorItem] AS I ON [F].[FCT_ID] = [I].[FCI_FCT_ID]
							  WHERE [FCI_UnitPrice]  >= 9999999999'		
			
			INSERT INTO @Res
			EXEC(@SQLString)					
		END		
		
		----------------------------------------------------------
		----------------------------------------------------------
		----------------------------------------------------------			
		
		-- داده های گم شده
		-- وجود دارند، ولی داده متناظر با آنها در جدول اصلی وجود ندارد [VIP].[VipMapping] استخراج اطلاعاتی که در جدول
		-- ×××××××××××××××
		-- وجود دارند رو حذف کنیم [VIP].[VipMapping] برای تصحیح این ایراد، بایستی اطلاعاتی که به صورت مازاد در جدول
		IF ',' + @TroubleShootingDataType + ',' LIKE '%,LostData,%'
		BEGIN
			-- این کد فقط بر روی سیستم های مرکز و شعب اجرا می شود
			IF @CenterBranchState in (1,2)
			BEGIN			
				DECLARE _VIPMapping CURSOR for
					   SELECT DISTINCT [VMA_TableID], [VMA_TableName] 
					   FROM [VIP].[VipMapping]
					   WHERE [VMA_BranchSchema] = 'Common' AND
								[VMA_BranchCode] IN (SELECT [CBI_Code] FROM [Common].[CompanyBranchInfo] WHERE [CBI_IsDisabled] = 0)
				OPEN _VIPMapping
				FETCH NEXT FROM _VIPMapping INTO @VMA_TableID, @VMA_TableName
				WHILE @@FETCH_STATUS = 0
				BEGIN 
					SET @Table_AbbName = NULL
					
					SELECT @Table_AbbName = [TBL_AbbName], 
							@Table_PersianName = [TBL_PersianName] 
					FROM [Common].[Table] 
					WHERE [TBL_Name] = @VMA_TableName
					
					IF ISNULL(@Table_AbbName, '') <> ''                
					BEGIN
						-- شعبه
						IF @CenterBranchState = 1
						BEGIN
							SET @SQLString = 'SELECT ''LostData'' AS DataType, 
													N''داده گم شده'' AS DataTypeTitle,
													''' + @VMA_TableName + ''' AS DataTable,
													N''' + @Table_PersianName + ''' AS DataTableTitle,	
													[VMA_ID] AS BaseDataID, 
													0 AS BaseDataType,
													ISNULL([VIP].[VIP_GetItemTitle]([VMA_TableID], [VMA_BranchItemID], ''-'', 1), ''_'') AS DataTitle,	
													N''این داده در جدول [VIP].[VipMapping] وجود دارد، ولی داده متناظر با این داده در جدول اصلی وجود ندارد!'' + CHAR(13) + CHAR(10) +
													 N''برای تصحیح این ایراد، بایستی اطلاعاتی که به صورت مازاد در جدول [VIP].[VipMapping] وجود دارد را حذف کنیم.'' AS ErrDesc																						  										  
											  FROM [VIP].[VipMapping]
											  WHERE [VMA_TableName] = ''' + @VMA_TableName + ''' AND 
													[VMA_BranchItemID] NOT IN (SELECT [' + @Table_AbbName + '_ID] 
																				FROM [Common].[' + @VMA_TableName + '])'
						END
						-- مرکز
						ELSE
						BEGIN
							SET @SQLString = 'SELECT ''LostData'' AS DataType, 
													N''داده گم شده'' AS DataTypeTitle,
													''' + @VMA_TableName + ''' AS DataTable,
													N''' + @Table_PersianName + ''' AS DataTableTitle,	
													[VMA_ID] AS BaseDataID, 
													0 AS BaseDataType,
													ISNULL([VIP].[VIP_GetItemTitle]([VMA_TableID], [VMA_ServerItemID], ''-'', 1), ''_'') AS DataTitle,	
													N''این داده در جدول [VIP].[VipMapping] وجود دارد، ولی داده متناظر با این داده در جدول اصلی وجود ندارد!'' + CHAR(13) + CHAR(10) +
													 N''برای تصحیح این ایراد، بایستی اطلاعاتی که به صورت مازاد در جدول [VIP].[VipMapping] وجود دارد را حذف کنیم.'' AS ErrDesc																						  										  
											  FROM [VIP].[VipMapping]
											  WHERE [VMA_TableName] = ''' + @VMA_TableName + ''' AND 
													[VMA_ServerItemID] NOT IN (SELECT [' + @TABLE_AbbNAME + '_ID] 
																				FROM [Common].[' + @VMA_TableName + '])'
						END
						
						--PRINT(@SQLString)
						
						INSERT INTO @Res
						EXEC(@SQLString)
					END
						
				   FETCH NEXT FROM _VIPMapping INTO @VMA_TableID, @VMA_TableName
				END
				CLOSE _VIPMapping
				DEALLOCATE _VIPMapping	
			END
		END	
		
		----------------------------------------------------------
		----------------------------------------------------------
		----------------------------------------------------------			
		
		-- های گم شده VipMapping
		-- داده متناظری برای آنها وجود ندارد [VIP].[VipMapping] استخراج اطلاعاتی که در جدول خودشان وجود دارند، ولی در جدول
		-- ×××××××××××××××××××××
		-- ایجاد کنیم تا ارتباط داده ها برقرار شود [VIP].[VipMapping] برای تصحیح این ایراد، بایستی ردیف هایی رو متناظر با داده ها در جدول		
		IF ',' + @TroubleShootingDataType + ',' LIKE '%,LostVipMapping,%'
		BEGIN
			-- این کد فقط بر روی سیستم های مرکز و شعب اجرا می شود
			IF @CenterBranchState in (1,2)
			BEGIN
				-- Added By Ghasem Babaie - 1404.07.29 [ PRI-3988 ]
				DECLARE @CPN_Ids	NVARCHAR(MAX) 
			
				DECLARE _VIPMapping CURSOR for
					   SELECT DISTINCT [VMA_TableID], [VMA_TableName] 
					   FROM [VIP].[VipMapping]
					   WHERE [VMA_BranchSchema] = 'Common' AND
								[VMA_BranchCode] IN (SELECT [CBI_Code] 
														FROM [Common].[CompanyBranchInfo] 
														WHERE [CBI_IsDisabled] = 0 AND 
																[CBI_SuccessSyncBaseData] = 1) AND
								[VMA_TableName] NOT IN ('GroupPermission', 'Permission', 'Account', 'CompanyBranchInfo')
				OPEN _VIPMapping
				FETCH NEXT FROM _VIPMapping INTO @VMA_TableID, @VMA_TableName
				WHILE @@FETCH_STATUS = 0
				BEGIN 
					SET @Table_AbbName = NULL
					
					SELECT @Table_AbbName = [TBL_AbbName], 
							@Table_PersianName = [TBL_PersianName] 
					FROM [Common].[Table] 
					WHERE [TBL_Name] = @VMA_TableName
					
					IF ISNULL(@Table_AbbName, '') <> ''                
					BEGIN
						-- شعبه
						IF @CenterBranchState = 1
						BEGIN
							SET @SQLString = 'SELECT ''LostVipMapping'' AS DataType, 
													N''VipMapping گم شده'' AS DataTypeTitle,
													''' + @VMA_TableName + ''' AS DataTable,
													N''' + @Table_PersianName + ''' AS DataTableTitle,	
													[' + @Table_AbbName + '_ID] AS BaseDataID, 
													0 AS BaseDataType,
													ISNULL([VIP].[VIP_GetItemTitle](' + CAST(@VMA_TableID AS NVARCHAR(64)) + ', [' + @Table_AbbName + '_ID], ''-'', 1), ''_'') AS DataTitle,	
													N''این داده در جدول خودش وجود دارد، ولی در جدول [VIP].[VipMapping] داده متناظری برای آن وجود ندارد!'' + CHAR(13) + CHAR(10) +
													 N''برای تصحیح این ایراد، بایستی متناظر با داده در جدول [VIP].[VipMapping] ردیفی را ایجاد کنید تا ارتباط داده ها برقرار شود.'' AS ErrDesc																						  										  
											  FROM [Common].[' + @VMA_TableName + ']
											  WHERE [' + @Table_AbbName + '_ID] NOT IN (SELECT [VMA_BranchItemID]
																						FROM [VIP].[VipMapping]
																						WHERE [VMA_TableName] = ''' + @VMA_TableName + ''')'

							-- Added By Ghasem Babaie - 1404.07.29 [ PRI-3988 ]
							-- ها در مرکز و شعب منتقل نمی شوند و لازم نیست در این گزارش هم نمایش داده شوند Lookup این نوع از 																						
							IF @Table_AbbName = 'LKP'
							BEGIN
								SET @SQLString = @SQLString + ' AND [LKP_Type] NOT IN (11,12,13,14,21,22,27,28,29,30,31,32,33,34,35,36,37,38,39,
									40,41,42,43,45,46,49,50,51,53,54,55,56,57,58,59,60,61,65,66,67,68,69,70,71,72,73,75,76,77)'
							END
							
							-- Added By Ghasem Babaie - 1404.07.29 [ PRI-3988 ]
							-- فقط اشخاصی که شماره موبایل دارند در مرکز و شعبه به اشتراک گذاشته می شوند
							-- بنابراین در مرکز و شعبه لازم نیست اشخاص بدون شماره موبایل در این گزارش نمایش داده شوند
							-- CompanyPerson » CPN
							-- CompanyPersonGroupMembership » PGM
							-- CompanyPersonMessageGroup » CSG
							-- ContactInformation » CIN
							-- Address » ADR
							IF @Table_AbbName IN ('CPN', 'PGM', 'CSG', 'CIN', 'ADR')
							BEGIN
								/*
									WhoToDetectUniquePersonInVIP:
									-----------------------------
									0 -> MobileNumber
									1 -> NationalCode
								*/							
								-- MobileNumber
								IF @WhoToDetectUniquePersonInVIP = 0
								BEGIN						
									SELECT @CPN_Ids = COALESCE(@CPN_Ids + ',' + CAST(CPN_ID AS NVARCHAR(200)), CAST(CPN_ID AS NVARCHAR(200)))
									FROM [Common].[CompanyPerson] 
									WHERE (ISNULL(LTRIM(RTRIM([CPN_MobileNumber])), '') = '') OR 
											([Common].[SYS_MobileNoIsValid](LTRIM(RTRIM([CPN_MobileNumber]))) = 0) OR
											([CPN_SharePersonToBranches] = 0)
								END
								-- NationalCode
								ELSE IF @WhoToDetectUniquePersonInVIP = 1
								BEGIN
									SELECT @CPN_Ids = COALESCE(@CPN_Ids + ',' + CAST(CPN_ID AS NVARCHAR(200)), CAST(CPN_ID AS NVARCHAR(200)))
									FROM [Common].[CompanyPerson] 
									WHERE (ISNULL([CPN_NationalCode], '') = '') OR 
											([Common].[SYS_MobileNoIsValid](LTRIM(RTRIM([CPN_MobileNumber]))) = 0) OR
											([CPN_SharePersonToBranches] = 0)
								END
							
								IF @Table_AbbName = 'CPN'
									SET @SQLString = @SQLString + ' AND [CPN_ID] NOT IN (' + @CPN_Ids + ')'
								ELSE IF @Table_AbbName = 'PGM'
									SET @SQLString = @SQLString + ' AND [PGM_CPN_ID] NOT IN (' + @CPN_Ids + ')'
								ELSE IF @Table_AbbName = 'CSG'
									SET @SQLString = @SQLString + ' AND [CSG_CPN_ID] NOT IN (' + @CPN_Ids + ')'
								ELSE IF @Table_AbbName = 'CIN'
									SET @SQLString = @SQLString + ' AND [CIN_CPN_ID] NOT IN (' + @CPN_Ids + ')'
								ELSE IF @Table_AbbName = 'ADR'
									SET @SQLString = @SQLString + ' AND [ADR_CPN_ID] NOT IN (' + @CPN_Ids + ')'
									
								SET @CPN_Ids = NULL
							END	
							
							-- Added By Ghasem Babaie - 1404.07.29 [ PRI-3988 ]
							-- بانکی که به اشتراک گذاشته نشده باشد، نباید در این گزارش نمایش داده شود
							IF @Table_AbbName = 'BAC'
							BEGIN
								SET @SQLString = @SQLString + ' AND [BAC_ShareBankToBranches] = 1'
							END
							
							-- Added By Ghasem Babaie - 1404.07.29 [ PRI-3988 ]
							-- صندوقی که به اشتراک گذاشته نشده باشد، نباید در این گزارش نمایش داده شود
							IF @Table_AbbName = 'CBX'
							BEGIN
								SET @SQLString = @SQLString + ' AND [CBX_ShareCashboxToBranches] = 1'
							END	
							
							-- Added By Ghasem Babaie - 1404.07.29 [ PRI-3988 ]
							-- انباری که به اشتراک گذاشته نشده باشد، نباید در این گزارش نمایش داده شود
							IF @Table_AbbName = 'PLC'
							BEGIN
								SET @SQLString = @SQLString + ' AND [PLC_Type] = 1 AND [PLC_ShareStoreToBranches] = 1'
							END
							
							-- Added By Ghasem Babaie - 1404.08.04 [ PRI-4508 ]	
							-- در این گزارش نباید نمایش داده شوند [Common].[ConstantLookup] اطلاعات مرتبط با جدول 
							IF @Table_AbbName = 'CNL'
							BEGIN
								SET @SQLString = @SQLString + ' AND 1 = 0'
							END											
						END
						-- مرکز
						ELSE
						BEGIN
							SET @SQLString = 'SELECT ''LostVipMapping'' AS DataType, 
													N''VipMapping گم شده'' AS DataTypeTitle,
													''' + @VMA_TableName + ''' AS DataTable,
													N''' + @Table_PersianName + ''' AS DataTableTitle,	
													[' + @Table_AbbName + '_ID] AS BaseDataID, 
													0 AS BaseDataType,
													ISNULL([VIP].[VIP_GetItemTitle](' + CAST(@VMA_TableID AS NVARCHAR(64)) + ', [' + @Table_AbbName + '_ID], ''-'', 1), ''_'') AS DataTitle,	
													N''این داده در جدول خودش وجود دارد، ولی در جدول [VIP].[VipMapping] داده متناظری برای آن وجود ندارد!'' + CHAR(13) + CHAR(10) +
													 N''برای تصحیح این ایراد، بایستی متناظر با داده در جدول [VIP].[VipMapping] ردیفی را ایجاد کنید تا ارتباط داده ها برقرار شود.'' AS ErrDesc																						  										  
											  FROM [Common].[' + @VMA_TableName + ']
											  WHERE [' + @Table_AbbName + '_ID] NOT IN (SELECT [VMA_ServerItemID]
																						FROM [VIP].[VipMapping]
																						WHERE [VMA_TableName] = ''' + @VMA_TableName + ''')'
																						
							-- Added By Ghasem Babaie - 1404.07.29 [ PRI-3988 ]
							-- ها در مرکز و شعب منتقل نمی شوند و لازم نیست در این گزارش هم نمایش داده شوند Lookup این نوع از 
							IF @Table_AbbName = 'LKP'
							BEGIN
								SET @SQLString = @SQLString + ' AND [LKP_Type] NOT IN (11,12,13,14,21,22,27,28,29,30,31,32,33,34,35,36,37,38,39,
									40,41,42,43,45,46,49,50,51,53,54,55,56,57,58,59,60,61,65,66,67,68,69,70,71,72,73,75,76,77)'
							END	
							
							-- Added By Ghasem Babaie - 1404.07.29 [ PRI-3988 ]
							-- فقط اشخاصی که شماره موبایل دارند در مرکز و شعبه به اشتراک گذاشته می شوند
							-- بنابراین در مرکز و شعبه لازم نیست اشخاص بدون شماره موبایل در این گزارش نمایش داده شوند
							-- CompanyPerson » CPN
							-- CompanyPersonGroupMembership » PGM
							-- CompanyPersonMessageGroup » CSG
							-- ContactInformation » CIN
							-- Address » ADR
							IF @Table_AbbName IN ('CPN', 'PGM', 'CSG', 'CIN', 'ADR')
							BEGIN
								/*
									WhoToDetectUniquePersonInVIP:
									-----------------------------
									0 -> MobileNumber
									1 -> NationalCode
								*/							
								-- MobileNumber
								IF @WhoToDetectUniquePersonInVIP = 0
								BEGIN						
									SELECT @CPN_Ids = COALESCE(@CPN_Ids + ',' + CAST(CPN_ID AS NVARCHAR(200)), CAST(CPN_ID AS NVARCHAR(200)))
									FROM [Common].[CompanyPerson] 
									WHERE (ISNULL(LTRIM(RTRIM([CPN_MobileNumber])), '') = '') OR 
											([Common].[SYS_MobileNoIsValid](LTRIM(RTRIM([CPN_MobileNumber]))) = 0) OR
											([CPN_SharePersonToBranches] = 0)
								END
								-- NationalCode
								ELSE IF @WhoToDetectUniquePersonInVIP = 1
								BEGIN
									SELECT @CPN_Ids = COALESCE(@CPN_Ids + ',' + CAST(CPN_ID AS NVARCHAR(200)), CAST(CPN_ID AS NVARCHAR(200)))
									FROM [Common].[CompanyPerson] 
									WHERE (ISNULL([CPN_NationalCode], '') = '') OR 
											([Common].[SYS_MobileNoIsValid](LTRIM(RTRIM([CPN_MobileNumber]))) = 0) OR
											([CPN_SharePersonToBranches] = 0)
								END
							
								IF @Table_AbbName = 'CPN'
									SET @SQLString = @SQLString + ' AND [CPN_ID] NOT IN (' + @CPN_Ids + ')'
								ELSE IF @Table_AbbName = 'PGM'
									SET @SQLString = @SQLString + ' AND [PGM_CPN_ID] NOT IN (' + @CPN_Ids + ')'
								ELSE IF @Table_AbbName = 'CSG'
									SET @SQLString = @SQLString + ' AND [CSG_CPN_ID] NOT IN (' + @CPN_Ids + ')'
								ELSE IF @Table_AbbName = 'CIN'
									SET @SQLString = @SQLString + ' AND [CIN_CPN_ID] NOT IN (' + @CPN_Ids + ')'
								ELSE IF @Table_AbbName = 'ADR'
									SET @SQLString = @SQLString + ' AND [ADR_CPN_ID] NOT IN (' + @CPN_Ids + ')'
									
								SET @CPN_Ids = NULL
							END	
							
							-- Added By Ghasem Babaie - 1404.07.29 [ PRI-3988 ]
							-- بانکی که به اشتراک گذاشته نشده باشد، نباید در این گزارش نمایش داده شود
							IF @Table_AbbName = 'BAC'
							BEGIN
								SET @SQLString = @SQLString + ' AND [BAC_ShareBankToBranches] = 1'
							END
							
							-- Added By Ghasem Babaie - 1404.07.29 [ PRI-3988 ]
							-- صندوقی که به اشتراک گذاشته نشده باشد، نباید در این گزارش نمایش داده شود
							IF @Table_AbbName = 'CBX'
							BEGIN
								SET @SQLString = @SQLString + ' AND [CBX_ShareCashboxToBranches] = 1'
							END	
							
							-- Added By Ghasem Babaie - 1404.07.29 [ PRI-3988 ]
							-- انباری که به اشتراک گذاشته نشده باشد، نباید در این گزارش نمایش داده شود
							IF @Table_AbbName = 'PLC'
							BEGIN
								SET @SQLString = @SQLString + ' AND [PLC_Type] = 1 AND [PLC_ShareStoreToBranches] = 1'
							END	
							
							-- Added By Ghasem Babaie - 1404.08.04 [ PRI-4508 ]	
							-- در این گزارش نباید نمایش داده شوند [Common].[ConstantLookup] اطلاعات مرتبط با جدول 
							IF @Table_AbbName = 'CNL'
							BEGIN
								SET @SQLString = @SQLString + ' AND 1 = 0'
							END																																																		
						END
						
						--PRINT(@SQLString)
						
						INSERT INTO @Res
						EXEC(@SQLString)
					END
						
				   FETCH NEXT FROM _VIPMapping INTO @VMA_TableID, @VMA_TableName
				END
				CLOSE _VIPMapping
				DEALLOCATE _VIPMapping
			END
		END			
		
		-- نمایش نتایج
		SELECT * 
		FROM @Res
		
       ------------------------------------------------
       SET NOCOUNT OFF;
END
