--	************************************************************************************************
--	************************************************************************************************
--	Обновления серверной части ВК УВЭД до версии 2.1.0
--	************************************************************************************************
--	************************************************************************************************

--	************************************************************************************************
--	ВНИМАНИЕ !!!	1. СКРИПТ ВЫПОЛНЯЕТСЯ ТОЛЬКО НА БАЗУ ДАННЫХ ВК УВЭД версии 2.0.0
--					   (рекомендованное имя базы данных - ССFEA)
--					2. Перед выполнением скрипта рекомендуется сделать 
--					   страховочную копию базы данных валютного контроля
--	************************************************************************************************

--------------------------------------------------------------------------------------
--	Проверка установленной версии
--------------------------------------------------------------------------------------
DECLARE	@VER AS VARCHAR (50)

SELECT	@VER = VER_UST 
FROM	U_VER_DB (NOLOCK)
WHERE	DATE_UST = (SELECT MAX(DATE_UST) FROM U_VER_DB (NOLOCK))

SELECT @VER = ISNULL(@VER,'')

IF	( RTRIM(LTRIM(UPPER(@VER))) = '2.0.0' OR  RTRIM(LTRIM(UPPER(@VER))) = '2.1.0' )	 
	------------------------------------------------------------
	--	Версия обновления 
	------------------------------------------------------------	
	BEGIN 
		SET NOCOUNT ON
		EXECUTE 	U_VER_DB_INSERT 	@TYPE_UST = 'UPD_DB' , @VER_UST ='2.1.0'
	END 
ELSE 
	BEGIN
		PRINT '--------------------------------------------------------------------------'
		PRINT 'Текущая версия серверной части ВК УВЭД : ' + RTRIM(LTRIM(@VER))
		PRINT 'Версия серверной части ВК УВЭД 2.1.0 устанавливается ТОЛЬКО на ВК УВЭД 2.0.0'
		PRINT '--------------------------------------------------------------------------'
	END
GO

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

--	****************************************************************************
--	****************************************************************************
--	(1*) Модификация существующих таблиц
--	****************************************************************************
--	****************************************************************************
--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
--	-------------------------------------------------------------------------------
--	Изменение структуры таблицы U_SPR_CONFIRM 
--	-------------------------------------------------------------------------------
ALTER	TABLE [dbo].[U_SPR_CONFIRM] ALTER COLUMN [D_PRED] SMALLDATETIME NULL
GO

--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
--	-----------------------------------------
--	Изменение размерности поля VID_USLUG
--	с VARCHAR(6) до VARCHAR(7) 	
--	-----------------------------------------

--	Удаляем CONSTRAINT 
if	exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_U_DOGOVOR_VID_USLUG]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
	ALTER TABLE [dbo].[U_DOGOVOR] DROP 
	CONSTRAINT [FK_U_DOGOVOR_VID_USLUG] 
GO

--	Удаляем CONSTRAINT 
if	exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_U_PS_VID_USLUG]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
	ALTER TABLE [dbo].[U_PS] DROP 
	CONSTRAINT [FK_U_PS_VID_USLUG] 
GO

--	Удаляем CONSTRAINT 
if	exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_U_OPLATA_VID_USLUG]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[U_OPLATA] DROP
	CONSTRAINT [FK_U_OPLATA_VID_USLUG] 
GO

--	Изменяем размерность поля
ALTER	TABLE [dbo].[VID_USLUG] ALTER COLUMN KOD VARCHAR (7) NOT NULL
GO

--	Изменяем размерность поля
ALTER	TABLE [dbo].[VID_USLUG] ALTER COLUMN NAME_USLUG VARCHAR (250) NOT NULL
GO

--	Изменяем размерность поля
ALTER	TABLE [dbo].[U_DOGOVOR] ALTER COLUMN VID_USLUG VARCHAR (7)  NULL
GO

--	Изменяем размерность поля
ALTER	TABLE [dbo].[U_PS] ALTER COLUMN VID_USLUG VARCHAR (7)  NULL
GO

--	Изменяем размерность поля
ALTER	TABLE [dbo].[U_OPLATA] ALTER COLUMN VID_USLUG VARCHAR (7)  NULL
GO

--	Восстаналиваем CONSTRAINT 
ALTER TABLE [dbo].[U_DOGOVOR] ADD 
		CONSTRAINT [FK_U_DOGOVOR_VID_USLUG] FOREIGN KEY 
		(
			[VID_USLUG]
		) REFERENCES [dbo].[VID_USLUG] 
		(
			[KOD]
		)
GO

--	Восстаналиваем CONSTRAINT 
ALTER TABLE [dbo].[U_PS] ADD 
		CONSTRAINT [FK_U_PS_VID_USLUG] FOREIGN KEY 
		(
			[VID_USLUG]
		) REFERENCES [dbo].[VID_USLUG] 
		(
			[KOD]
		)
GO

--	Восстаналиваем CONSTRAINT 
ALTER TABLE [dbo].[U_OPLATA] ADD 
	CONSTRAINT [FK_U_OPLATA_VID_USLUG] FOREIGN KEY 
	(
		[VID_USLUG]
	) REFERENCES [dbo].[VID_USLUG] 
	(
		[KOD]
	)
GO

--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
--	-----------------------------------------
--	Создание индекса таблицы U_PS
--	-----------------------------------------
if not exists (select * from dbo.sysindexes where name = 'IX_U_PS')
	CREATE  INDEX [IX_U_PS] ON [dbo].[U_PS]([DOG_ID], [DOG_NPP]) ON [PRIMARY]
GO

--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
--	-----------------------------------------
--	Создание индекса таблицы U_OPLATA
--	-----------------------------------------
if not exists (select * from dbo.sysindexes where name = 'IX_U_OPLATA')
	CREATE  INDEX [IX_U_OPLATA] ON [dbo].[U_OPLATA]([DOG_ID], [DOG_NPP]) ON [PRIMARY]
GO

--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
--	-----------------------------------------
--	Создание индекса таблицы U_SPR_CONFIRM
--	-----------------------------------------
if not exists (select * from dbo.sysindexes where name = 'IX_U_SPR_CONFIRM')
	CREATE  INDEX [IX_U_SPR_CONFIRM] ON [dbo].[U_SPR_CONFIRM]([DOG_ID], [DOG_NPP]) ON [PRIMARY]
GO

--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
--	-----------------------------------------
--	Изменение размерности поля INN
--	с CHAR(12) на VARCHAR(12) 	
--	-----------------------------------------
--	Изменяем размерность поля в U_PS
ALTER	TABLE [dbo].[U_PS] ALTER COLUMN INN VARCHAR (12) NULL
GO

--	Изменяем размерность поля в U_RESIDENTS
ALTER	TABLE [dbo].[U_RESIDENTS] ALTER COLUMN INN VARCHAR (12) NULL
GO

--	Изменяем размерность поля в U_IN_PART
ALTER	TABLE [dbo].[U_IN_PART] ALTER COLUMN INN VARCHAR (12) NULL
GO

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

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

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

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

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

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

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

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

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

--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
--	****************************************************************************
--	****************************************************************************
--	(2*) Создание новых таблиц и представлений
--	****************************************************************************
--	****************************************************************************
--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------

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

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

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

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

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

--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
--	****************************************************************************
--	****************************************************************************
--	(3*) Изменение информации в таблицах
--	****************************************************************************
--	****************************************************************************
--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
--	------------------------------------------------
--	Изменение информации в таблице CONFIRM_DOC_NAMES
--	------------------------------------------------
SET	NOCOUNT ON

UPDATE	CONFIRM_DOC_NAMES
SET		D_BEGIN	=	CONVERT(SMALLDATETIME, '20040618')	
WHERE	D_BEGIN	=	CONVERT(SMALLDATETIME, '20040601')	
GO

--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
--	------------------------------------------------
--	Изменение информации в таблице VID_USLUG
--	------------------------------------------------
SET	NOCOUNT ON
UPDATE	VID_USLUG
SET		NAME_USLUG	=	'Прочая переработка товаров, сырья'
WHERE	KOD			=	'884a'	
GO

SET	NOCOUNT ON
IF	NOT EXISTS	(
					SELECT	*	
					FROM	VID_USLUG (NOLOCK)
					WHERE	KOD			=	'884b'	
				)	
	INSERT INTO VID_USLUG (KOD, NAME_USLUG) VALUES ('884b' , 'Переработка отходов и очистка окружающей среды')
GO

SET	NOCOUNT ON
IF	NOT EXISTS	(
					SELECT	*	
					FROM	VID_USLUG (NOLOCK)
					WHERE	KOD			=	'892a'	
				)	
	INSERT INTO VID_USLUG (KOD, NAME_USLUG) VALUES ('892a' , 'Покупка (продажа) непроизведенных нефинансовых активов')
GO

SET	NOCOUNT ON
IF	NOT EXISTS	(
					SELECT	*	
					FROM	VID_USLUG (NOLOCK)
					WHERE	KOD			=	'892b'	
				)	
	INSERT INTO VID_USLUG (KOD, NAME_USLUG) VALUES ('892b' , 'Рента')
GO

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

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

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

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

--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
--	****************************************************************************
--	****************************************************************************
--	(4*) Удаление ненужных существующих объектов базы данных
--	****************************************************************************
--	****************************************************************************
--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[U_DOGOVOR_SELECT_BY_RESIDENT_ID]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
 drop procedure [dbo].[U_DOGOVOR_SELECT_BY_RESIDENT_ID]
GO

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

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

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

--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
--	****************************************************************************
--	****************************************************************************
--	(5*) Создание новых хранимых процедур 
--	****************************************************************************
--	****************************************************************************
--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[DEF_DATE_RECALC_SUM_KONTRAKT]') and xtype in (N'FN', N'IF', N'TF'))
drop function [dbo].[DEF_DATE_RECALC_SUM_KONTRAKT]
GO

CREATE FUNCTION [dbo].[DEF_DATE_RECALC_SUM_KONTRAKT] 
--	-----------------------------------------------------------------------------------------------------------------------------------
--	Определение даты пересчёта суммы контракта в доллары США (для рекомендации закрытия ПС по 2557-У)
--	-----------------------------------------------------------------------------------------------------------------------------------
--	Возвращает: - плановую дату пересчёта суммы контракта в доллары США,
--				  как дату последнего изменения по контракту для пары сумма+валюта контракта из изходной записи по контракту
--				  (среди записей по контракту, дата которых и порядковый номер не превышают даты и порядкового номера исходной записи)
--	-----------------------------------------------------------------------------------------------------------------------------------
--	(Создание	в версии 2.1.0)
--	-----------------------------------------------------------------------------------------------------------------------------------
(
	@RESIDENT_ID	AS INTEGER,
	@DOG_ID			AS INTEGER,
	@DOG_NPP		AS INTEGER
)
RETURNS SMALLDATETIME
AS
BEGIN
	--	---------------------------------------------------
	--	Объявляем рабочие переменные
	--	---------------------------------------------------
	DECLARE	@D_RECALC		AS SMALLDATETIME,
			@SUMK			AS DECIMAL(16, 2), 
			@KVALK			AS CHAR(3),
			@SUMK_BUF		AS DECIMAL(16, 2),
			@KVALK_BUF		AS CHAR(3),
			@KOL			AS INTEGER,
			-- пременные для курсора
			@D_KONTR_CUR	AS SMALLDATETIME,
			@D_DOPSOGL_CUR	AS SMALLDATETIME,
			@SUMK_CUR		AS DECIMAL(16, 2),
			@KVALK_CUR		AS CHAR(3)

	--	-------------------
	--	Начальные значения
	--	-------------------
	SELECT	@KOL			= -1	
	SELECT	@SUMK_BUF		= -1	
	SELECT	@KVALK_BUF		= ''

	--	------------------------------------------------------------------------------------
	--	Определяем дату пересчёта, сумму и валюту контракта из исходной записи по контракту
	--	------------------------------------------------------------------------------------
	SELECT	@D_RECALC	= ISNULL(D_DOPSOGL, D_KONTR),
			@SUMK		= SUMK,
			@KVALK		= KVALK
	FROM	U_DOGOVOR (NOLOCK)
	WHERE	RESIDENT_ID	= @RESIDENT_ID	AND
			DOG_ID		= @DOG_ID		AND
			DOG_NPP		= @DOG_NPP		AND
			DEL_FLAG	IS NULL
	-- Контракт не найден -> заверщение
	IF	@SUMK	IS NULL	OR @KVALK	IS NULL
		GOTO	EXIT_FUN

	--	----------------------------------------------------------------------------------
	--	Определяем количество записей по контракту с такой же суммой и валютой контракта 
	--	----------------------------------------------------------------------------------
	SELECT	@KOL		= COUNT(*)
	FROM	U_DOGOVOR (NOLOCK)
	WHERE	RESIDENT_ID	= @RESIDENT_ID	AND
			DOG_ID		= @DOG_ID		AND
			SUMK		= @SUMK			AND
			KVALK		= @KVALK		AND
			DEL_FLAG	IS NULL
	-- Если одна запись -> заверщение
	IF	@KOL = 1
		GOTO	EXIT_FUN
	
	--	---------------------------------------------------
	--	Определяем курсор
	--	---------------------------------------------------
	DECLARE	U_DOGOVOR_CURSOR	CURSOR
	FOR	
	SELECT	D_KONTR, D_DOPSOGL, SUMK, KVALK
	FROM	U_DOGOVOR	(NOLOCK)
	WHERE	RESIDENT_ID					=	@RESIDENT_ID	AND		
			DOG_ID						=	@DOG_ID			AND	
			DEL_FLAG					IS	NULL			AND
			-- только записи по контракту с ограничением по дате доп.соглашения (не больше, чем у исходной записи по контракту)
			ISNULL(D_DOPSOGL, D_KONTR)	<=	@D_RECALC		
	-- обязательно упорядочиваем по дате доп.соглашения, затем по DOG_NPP
	ORDER	BY ISNULL(D_DOPSOGL, D_KONTR), DOG_NPP 	

	--	---------------------------------------------------
	--	Цикл по курсору
	--	---------------------------------------------------
	OPEN 	U_DOGOVOR_CURSOR
	FETCH	NEXT FROM U_DOGOVOR_CURSOR INTO @D_KONTR_CUR, @D_DOPSOGL_CUR, @SUMK_CUR, @KVALK_CUR
	WHILE	(@@FETCH_STATUS <> -1)
			BEGIN
				--	--------------------------------------------------------------------
				--	Если изменилась сумма или валюта контракта 
				--	--------------------------------------------------------------------
				IF	@SUMK_CUR <> @SUMK_BUF	OR	@KVALK_CUR	<>	@KVALK_BUF					
					BEGIN
						-- запоминаем значения суммы и валюты контракта в буферные переменные
						SELECT	@SUMK_BUF	= @SUMK_CUR
						SELECT	@KVALK_BUF	= @KVALK_CUR

						--	------------------------------------------------------------------------------------------------------
						--	Только, если текущие значения суммы и валюты контракта такие же, что и у исходной записи по контракту
						--	------------------------------------------------------------------------------------------------------
						IF	@SUMK = @SUMK_CUR AND @KVALK = @KVALK_CUR
							-- запоминаем дату пересчёта
							SELECT	@D_RECALC	= ISNULL(@D_DOPSOGL_CUR, @D_KONTR_CUR) 
					END

				--	---------------------------------------------------------------------
				--	Следующая запись по курсору
				--	---------------------------------------------------------------------
				FETCH	NEXT FROM U_DOGOVOR_CURSOR INTO @D_KONTR_CUR, @D_DOPSOGL_CUR, @SUMK_CUR, @KVALK_CUR
			END 

	CLOSE 		U_DOGOVOR_CURSOR
	DEALLOCATE	U_DOGOVOR_CURSOR
		
EXIT_FUN:
	RETURN @D_RECALC
END
GO

GRANT  EXECUTE  ON [dbo].[DEF_DATE_RECALC_SUM_KONTRAKT]  TO [OPERS], [AUDITS]
GO

--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[U_DOGOVOR_SELECT_FOR_REPORTS]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[U_DOGOVOR_SELECT_FOR_REPORTS]
GO

CREATE PROCEDURE [dbo].[U_DOGOVOR_SELECT_FOR_REPORTS]
--	----------------------------------------------------------------------------------------------------------------------------------
--	Выборка Договоров по идентификатору Участника ВЭД, по идентификатору Ин. контрагента и по виду Договора
--	----------------------------------------------------------------------------------------------------------------------------------
--	Используется в формах задания критериев отбора информации для отчётов
--	@RESIDENT_ID	= 0 - для всех участников ВЭД
--	@PARTNER_ID		= 0 - для всех Иностранных контрагентов
--	@SET_VID_KONTR	- набор видов Договоров для отбора: = '1234569Z' - все виды
--	----------------------------------------------------------------------------------------------------------------------------------
--	(Создание	в версии 2.1.0)
--	----------------------------------------------------------------------------------------------------------------------------------
(
	@RESIDENT_ID		AS INTEGER,
	@PARTNER_ID			AS INTEGER	= 0,
	@SET_VID_KONTR		AS VARCHAR(10),--	= '1234569Z'
	@USER_ID			AS VARCHAR(30)
) 
AS
	SELECT	U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID, U_DOGOVOR.VID_KONTR, U_DOGOVOR.PARTNER_ID,
			U_DOGOVOR.N_KONTR,
			U_DOGOVOR.D_KONTR,
			U_IN_PART.NAMEP
	FROM	U_DOGOVOR (NOLOCK)
	INNER	JOIN U_USERS_RESIDENTS (NOLOCK) ON
			U_USERS_RESIDENTS.RESIDENT_ID	= U_DOGOVOR.RESIDENT_ID	AND
			U_USERS_RESIDENTS.USER_ID		= @USER_ID
	LEFT	OUTER	JOIN U_IN_PART (NOLOCK) ON	
			U_IN_PART.PARTNER_ID	= U_DOGOVOR.PARTNER_ID	AND
			U_IN_PART.DEL_FLAG		IS NULL		
	WHERE	(	@RESIDENT_ID			= 0 OR
				U_DOGOVOR.RESIDENT_ID	= @RESIDENT_ID	)	AND		
			(	@PARTNER_ID				= 0 OR
				U_DOGOVOR.PARTNER_ID	= @PARTNER_ID	)	AND			
			U_DOGOVOR.DEL_FLAG		IS NULL					AND
			CHARINDEX(U_DOGOVOR.VID_KONTR, @SET_VID_KONTR)	> 0
	GROUP 	BY U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID, U_DOGOVOR.VID_KONTR, U_DOGOVOR.PARTNER_ID, U_DOGOVOR.N_KONTR, U_DOGOVOR.D_KONTR, U_IN_PART.NAMEP
	ORDER 	BY U_DOGOVOR.N_KONTR, U_DOGOVOR.D_KONTR
GO

GRANT  EXECUTE  ON [dbo].[U_DOGOVOR_SELECT_FOR_REPORTS]  TO [OPERS], [AUDITS]
GO

--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[U_PS_SELECT_BY_RESIDENT_ID]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[U_PS_SELECT_BY_RESIDENT_ID]
GO

CREATE PROCEDURE [dbo].[U_PS_SELECT_BY_RESIDENT_ID]
--	---------------------------------------------------------------------------------
--	Чтение информации о Паспортах сделок для Участника ВЭД (по всем типам)
--	---------------------------------------------------------------------------------
--	(Создание	в версии 2.1.0)
--	---------------------------------------------------------------------------------
(
	@RESIDENT_ID	AS INTEGER
) 
AS
		SELECT	U_PS.*
		FROM	U_PS (NOLOCK)
		WHERE	U_PS.RESIDENT_ID	= @RESIDENT_ID	AND
				U_PS.DEL_FLAG		IS NULL		
		ORDER	BY U_PS.N_PS DESC
GO

GRANT  EXECUTE  ON [dbo].[U_PS_SELECT_BY_RESIDENT_ID]  TO [OPERS], [AUDITS]
GO

--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[U_PS_SELECT_FOR_REPORTS]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[U_PS_SELECT_FOR_REPORTS]
GO

CREATE PROCEDURE [dbo].[U_PS_SELECT_FOR_REPORTS]
--	----------------------------------------------------------------------------------------------------------------------------------------
--	Выборка Паспортов сделок по идентификатору Участника ВЭД, по идентификатору Ин. контрагента, по идентификатору Банка и по типу ПС
--	----------------------------------------------------------------------------------------------------------------------------------------
--	Используется в формах задания критериев отбора информации для отчётов
--	@RESIDENT_ID	= 0 - для всех участников ВЭД
--	@PARTNER_ID		= 0 - для всех Иностранных контрагентов
--	@BANK_ID		= 0 - для всех Банков
--	@TYPE_PS		= '0' - по всем типам, '1' - по типу 1 и т.д.
--	@FLAG_TYPE_PS	= 0 - для всех типов, 1 - для контрактных ПС, 2 - для кредитных ПС (только для отчётов по сальдо и задолженности)
--	----------------------------------------------------------------------------------------------------------------------------------------
--	(Создание	в версии 2.1.0)
--	----------------------------------------------------------------------------------------------------------------------------------------
(
	@RESIDENT_ID	AS INTEGER,
	@PARTNER_ID		AS INTEGER	= 0,
	@BANK_ID		AS INTEGER,
	@TYPE_PS		AS CHAR(1),
	@FLAG_TYPE_PS	AS INTEGER	= 0,
	@USER_ID		AS VARCHAR(30)

) 
AS

	SELECT	@RESIDENT_ID	= ISNULL(@RESIDENT_ID, 0)
	SELECT	@PARTNER_ID		= ISNULL(@PARTNER_ID, 0)
	SELECT	@BANK_ID		= ISNULL(@BANK_ID, 0)
	SELECT	@TYPE_PS		= ISNULL(@TYPE_PS, '0')
	SELECT	@FLAG_TYPE_PS	= ISNULL(@FLAG_TYPE_PS, 0)

	SELECT	U_PS.N_PS,
			U_PS.RESIDENT_ID,
			U_PS.PS_ID,
			U_PS.DOG_ID,
			U_PS.DOG_NPP,
			U_PS.BANK_ID,
			U_PS.F1_R62_SROK,
			U_PS.N_PS_OLD,
			U_PS.N_PS_DR,
			U_DOGOVOR.PARTNER_ID,
			U_DOGOVOR.VID_USLUG,
			U_DOGOVOR.KVALK,
			U_DOGOVOR.KONTR_SROK
	FROM	U_PS (NOLOCK)
	INNER	JOIN U_USERS_RESIDENTS (NOLOCK) ON
			U_USERS_RESIDENTS.RESIDENT_ID	= U_PS.RESIDENT_ID	AND
			U_USERS_RESIDENTS.USER_ID		= @USER_ID
	INNER	JOIN U_DOGOVOR (NOLOCK) ON
			U_DOGOVOR.RESIDENT_ID	= U_PS.RESIDENT_ID	AND
			U_DOGOVOR.DOG_ID		= U_PS.DOG_ID		AND
			U_DOGOVOR.DOG_NPP		= U_PS.DOG_NPP		AND
			U_DOGOVOR.DEL_FLAG		IS NULL	
	WHERE	(	@RESIDENT_ID			= 0	OR
				U_PS.RESIDENT_ID		= @RESIDENT_ID	)		AND
			(	@PARTNER_ID				= 0	OR
				U_DOGOVOR.PARTNER_ID	= @PARTNER_ID	)		AND
			(	@BANK_ID				= 0	OR
				U_PS.BANK_ID			= @BANK_ID		)		AND
			(	@TYPE_PS						= '0'	OR
				SUBSTRING(U_PS.N_PS, 20, 1) 	= @TYPE_PS	)	AND
			(	@FLAG_TYPE_PS		= 0	
				OR
				(	@FLAG_TYPE_PS	= 1 AND
					(
					 SUBSTRING( U_PS.N_PS, 20, 1 ) = '1'	OR
					 SUBSTRING( U_PS.N_PS, 20, 1 ) = '2'	OR
					 SUBSTRING( U_PS.N_PS, 20, 1 ) = '3'	OR
					 SUBSTRING( U_PS.N_PS, 20, 1 ) = '4'	OR
					 SUBSTRING( U_PS.N_PS, 20, 1 ) = '9'
					)	
				)						
				OR
				(	@FLAG_TYPE_PS	= 2 AND
					(
					 SUBSTRING( U_PS.N_PS, 20, 1 ) = '5'	OR
					 SUBSTRING( U_PS.N_PS, 20, 1 ) = '6'
					)	
				)	
			)													AND
			U_PS.DEL_FLAG			IS NULL
	ORDER	BY U_PS.N_PS DESC		
GO

GRANT  EXECUTE  ON [dbo].[U_PS_SELECT_FOR_REPORTS]  TO [OPERS], [AUDITS]
GO

--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[U_SCHET_SELECT_FOR_REPORTS]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[U_SCHET_SELECT_FOR_REPORTS]
GO

CREATE PROCEDURE [dbo].[U_SCHET_SELECT_FOR_REPORTS]
--	----------------------------------------------------------------------------------------------------------------------------------------
--	Выборка Счетов по идентификатору Участника ВЭД, по идентификатору уполномоченного Банка и по признаку кода валюты счета (все или только рублёвые)
--	----------------------------------------------------------------------------------------------------------------------------------------
--	Используется в формах задания критериев отбора информации для отчётов
--	@RESIDENT_ID	= 0 - для всех участников ВЭД
--	@BANK_ID		= 0 - для всех Банков
--	@FLAG_RUB		= 0 - для всех кодов валюты счета, 1 - только рублёвые
--	----------------------------------------------------------------------------------------------------------------------------------------
--	(Создание	в версии 2.1.0)
--	----------------------------------------------------------------------------------------------------------------------------------------
(
	@RESIDENT_ID	AS INTEGER,
	@BANK_ID		AS INTEGER,
	@FLAG_RUB		AS INTEGER = 0,
	@USER_ID		AS VARCHAR(30)

) 
AS

	SELECT	@RESIDENT_ID	= ISNULL(@RESIDENT_ID, 0)
	SELECT	@BANK_ID		= ISNULL(@BANK_ID, 0)
	SELECT	@FLAG_RUB		= ISNULL(@FLAG_RUB, 0)

	SELECT	U_SCHET.RESIDENT_ID, U_SCHET.SCHET_ID, U_SCHET.BANK_ID, U_SCHET.N_SCHET, U_SCHET.KODV, U_SCHET.PRIM 
	FROM	U_SCHET (NOLOCK)
	INNER	JOIN U_USERS_RESIDENTS (NOLOCK) ON
			U_USERS_RESIDENTS.RESIDENT_ID	= U_SCHET.RESIDENT_ID	AND
			U_USERS_RESIDENTS.USER_ID		= @USER_ID
	WHERE	(	@RESIDENT_ID		= 0	OR
				U_SCHET.RESIDENT_ID	= @RESIDENT_ID	)	AND
			(	@BANK_ID			= 0	OR
				U_SCHET.BANK_ID		= @BANK_ID		)	AND
			(	@FLAG_RUB			= 0	
				OR
				(	@FLAG_RUB		= 1 AND
					U_SCHET.KODV	= '643'
				)						
			)											AND
			U_SCHET.DEL_FLAG		IS NULL
	ORDER	BY N_SCHET
GO

GRANT  EXECUTE  ON [dbo].[U_SCHET_SELECT_FOR_REPORTS]  TO [OPERS], [AUDITS]
GO

--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[U_CRP_SPR_CONFIRM_STREAM]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[U_CRP_SPR_CONFIRM_STREAM]
GO

CREATE PROCEDURE [dbo].[U_CRP_SPR_CONFIRM_STREAM]
--	--------------------------------------------------------------------------------------------------------------------------
--	Выборка информации о подтверждающих документах для потоковой печати СПД
--	--------------------------------------------------------------------------------------------------------------------------
--	@RESIDENT_ID 	-	идентификатор Участника ВЭД
--	@BANK_ID	 	-	идентификатор Уполномоченного Банка
--	@PS_ID  		-	идентификатор ПС (0 - по всем ПС)
--	@FLAG_PROJECT	-	флаг Только Справки не представленные в Банк (не заполнена Дата представления справки в Банк)
--	@D_PRED_C		 -	Дата Справки о ПД С
--	@D_PRED_PO		 -	Дата Справки о ПД ПО
--	@D_DOC_C		 -	Дата ПД С
--	@D_DOC_PO		 -	Дата ПД ПО
--	--------------------------------------------------------------------------------------------------------------------------
--	(Создание	в версии 2.1.0)
--	--------------------------------------------------------------------------------------------------------------------------
(
	@RESIDENT_ID	AS INTEGER,
	@BANK_ID		AS INTEGER,
	@PS_ID			AS INTEGER,
	@FLAG_PROJECT	AS INTEGER				= 	1,
	@D_PRED_C		AS SMALLDATETIME		=	NULL,
	@D_PRED_PO		AS SMALLDATETIME		=	NULL,
	@D_DOC_C		AS SMALLDATETIME		=	NULL,
	@D_DOC_PO		AS SMALLDATETIME		=	NULL
)
AS
	SELECT	U_SPR_CONFIRM.*,
			U_PS.N_PS,
			U_UPOLNOMB.FIO		AS FIO_BANK,
			U_UPOLNOMB.DOL		AS DOL_BANK,
			U_UPOLNOMR.FIO		AS FIO_RES_1,
			U_UPOLNOMR.DOL		AS DOL_RES_1,
			U_UPOLNOMR_2.FIO	AS FIO_RES_2,
			U_UPOLNOMR_2.DOL	AS DOL_RES_2,
			U_BANKS.NAMEB,
			U_BANKS.NAMEB_S,
			U_PS.NAMER
	FROM	U_SPR_CONFIRM (NOLOCK) 
	INNER	JOIN	U_BANKS	(NOLOCK) ON 
			U_BANKS.BANK_ID				= U_SPR_CONFIRM.BANK_ID			AND
			U_BANKS.DEL_FLAG			IS NULL
	INNER	JOIN 	U_PS	(NOLOCK) ON	
			U_PS.RESIDENT_ID			= U_SPR_CONFIRM.RESIDENT_ID		AND
			U_PS.PS_ID					= U_SPR_CONFIRM.PS_ID			AND
			U_PS.DEL_FLAG				IS NULL		
	LEFT	OUTER	JOIN U_UPOLNOMB	(NOLOCK) ON	
			U_UPOLNOMB.BANK_ID			= U_SPR_CONFIRM.BANK_ID			AND	
			U_UPOLNOMB.UPOLNOMB_ID		= U_SPR_CONFIRM.UPOLNOMB_ID		AND	
			U_UPOLNOMB.DEL_FLAG			IS NULL				
	LEFT	OUTER	JOIN U_UPOLNOMR	(NOLOCK) ON	
			U_UPOLNOMR.RESIDENT_ID		= U_SPR_CONFIRM.RESIDENT_ID 	AND
			U_UPOLNOMR.UPOLNOMR_ID		= U_SPR_CONFIRM.UPOLNOMR_ID1	AND	
			U_UPOLNOMR.DEL_FLAG			IS NULL				
	LEFT	OUTER	JOIN U_UPOLNOMR AS U_UPOLNOMR_2 (NOLOCK) ON	
			U_UPOLNOMR_2.RESIDENT_ID	= U_SPR_CONFIRM.RESIDENT_ID 	AND
			U_UPOLNOMR_2.UPOLNOMR_ID	= U_SPR_CONFIRM.UPOLNOMR_ID2	AND
			U_UPOLNOMR_2.DEL_FLAG		IS NULL				
	WHERE	-- отбор по Участнику ВЭД
			U_SPR_CONFIRM.RESIDENT_ID 	= @RESIDENT_ID		AND
			-- отбор по Уполномоченному Банку
			U_SPR_CONFIRM.BANK_ID	 	= @BANK_ID			AND
			-- только Справки о ПД
			U_SPR_CONFIRM.SPR_ID	 	IS NOT NULL			AND
			-- отбор по ПС
			(
				@PS_ID					= 0			OR	
				U_SPR_CONFIRM.PS_ID		= @PS_ID
			) 												AND
			-- Только Справки не представленные в Банк (не заполнена Дата представления справки в Банк)
			(
				@FLAG_PROJECT				= 0		OR	
				U_SPR_CONFIRM.D_PRED_BANK	IS NULL
			) 												AND
			-- отбор по диапазону Даты Справки о ПД
			(	@D_PRED_C	IS NULL		OR
				U_SPR_CONFIRM.D_PRED	>= @D_PRED_C
			)	AND
			(	@D_PRED_PO	IS NULL		OR
				U_SPR_CONFIRM.D_PRED	<= @D_PRED_PO	
			)												AND
			-- отбор по диапазону Даты ПД
			(	@D_DOC_C	IS NULL	AND
				@D_DOC_PO	IS NULL		OR
				EXISTS	(	SELECT	*
							FROM	U_SPR_CONFIRM AS S (NOLOCK)
							WHERE	S.RESIDENT_ID	= @RESIDENT_ID			AND
									S.BANK_ID		= @BANK_ID				AND
									S.PS_ID			= U_SPR_CONFIRM.PS_ID	AND
									S.SPR_ID		= U_SPR_CONFIRM.SPR_ID	AND
									(	@D_DOC_C	IS NULL	OR
										S.D_DOC		>= @D_DOC_C
									)										AND
									(	@D_DOC_PO	IS NULL		OR
										S.D_DOC		<= @D_DOC_PO
									)										AND
									S.DEL_FLAG		IS NULL
						)
			)												AND
			U_SPR_CONFIRM.DEL_FLAG		IS NULL	
	ORDER	BY U_PS.N_PS, U_SPR_CONFIRM.SPR_ID, U_SPR_CONFIRM.NPP		
GO

GRANT  EXECUTE  ON [dbo].[U_CRP_SPR_CONFIRM_STREAM]  TO [OPERS], [AUDITS]
GO

--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[U_PS_TO_CLOSE_2557U]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[U_PS_TO_CLOSE_2557U]
GO

CREATE PROCEDURE [dbo].[U_PS_TO_CLOSE_2557U]
--	------------------------------------------------------------------------------------------------------------------------------
--	Список ПС (контракты), рекомендуемых к закрытию на основании Указания Банка России 2557-У, доступных указанному Прользователю
--	------------------------------------------------------------------------------------------------------------------------------
--	(Создание	в версии 2.1.0)
--	------------------------------------------------------------------------------------------------------------------------------
(
	@USER_ID	AS VARCHAR(30)
) 
AS
SET NOCOUNT ON

	--	--------------------------------------------------------------------
	--	Сумма лимита = 50000 долларов США 
	--	--------------------------------------------------------------------
	DECLARE	@SUM_LIMIT		AS	DECIMAL (16, 2)
	SELECT	@SUM_LIMIT	=	50000	

	--	--------------------------------------------------------------------
	--	Объявляем табличную переменную
	--	--------------------------------------------------------------------
	DECLARE @PS_TO_CLOSE_2557U TABLE	( 
								RESIDENT_ID		INTEGER,
								NAMER			VARCHAR (300),
								PS_ID			INTEGER,
								DOG_ID			INTEGER,
								DOG_NPP			INTEGER,
								N_PS			CHAR (22),
								D_PS			SMALLDATETIME,											
								N_KONTR			VARCHAR (100),
								D_KONTR			SMALLDATETIME,
								D_DOPSOGL		SMALLDATETIME,
								D_END			DATETIME,
								KVALK			CHAR (3),
								SUMK			DECIMAL (16, 2),
								D_RECALC		SMALLDATETIME,		-- дата пересчёта суммы контракта
								D_FIND_KURS_RUB	SMALLDATETIME,		-- найденная дата пересчёта суммы контракта из КВЦ в рубли
								KKURS_RUB		DECIMAL (16, 8),	-- курс пересчёта из КВЦ в рубли
								SUMK_RUB		DECIMAL (16, 2),	-- сумма контракта в рублях
								D_FIND_KURS_USD	SMALLDATETIME,		-- найденная дата пересчёта суммы контракта из рублей в доллары США
								KKURS_USD		DECIMAL (16, 8),	-- курс пересчёта из из рублей в доллары США
								SUMK_USD		DECIMAL (16, 2),	-- сумма контракта в долларах США
								PRIM			VARCHAR(100)
								PRIMARY KEY ( RESIDENT_ID, PS_ID ) 
							)

	--	-----------------------------------------------------------------------------------------------
	--	ШАГ 1: Добавляем все ПС с КВЦ = 840, у которых сумма контракта не превышает 50000 долларов США 
	--	-----------------------------------------------------------------------------------------------
	INSERT	INTO	@PS_TO_CLOSE_2557U
	SELECT	U_RESIDENTS.RESIDENT_ID, 
			ISNULL(U_RESIDENTS.NAMER_S, U_RESIDENTS.NAMER), 
			U_PS.PS_ID, 
			U_PS.DOG_ID, 
			U_PS.DOG_NPP, 
			U_PS.N_PS, 
			U_PS.D_PS,
			U_DOGOVOR.N_KONTR,
			U_DOGOVOR.D_KONTR,
			U_DOGOVOR.D_DOPSOGL,
			U_DOGOVOR.D_END,
			U_DOGOVOR.KVALK, 
			U_DOGOVOR.SUMK, 
			NULL,
			NULL,
			NULL,
			NULL,
			NULL,
			NULL,
			U_DOGOVOR.SUMK, 
			'ПС с КВЦ = 840, сумма контракта не превышает 50000 долларов США'
	FROM	U_PS (NOLOCK)
	INNER	JOIN U_RESIDENTS (NOLOCK) 	ON 
			U_PS.RESIDENT_ID			= U_RESIDENTS.RESIDENT_ID		AND
			U_RESIDENTS.DEL_FLAG		IS NULL
	INNER	JOIN U_USERS_RESIDENTS (NOLOCK) ON 
			U_PS.RESIDENT_ID			= U_USERS_RESIDENTS.RESIDENT_ID	AND
			U_USERS_RESIDENTS.USER_ID	= @USER_ID
	INNER	JOIN U_DOGOVOR (NOLOCK) ON
			U_DOGOVOR.RESIDENT_ID		= U_PS.RESIDENT_ID				AND
			U_DOGOVOR.DOG_ID			= U_PS.DOG_ID					AND
			U_DOGOVOR.DOG_NPP			= U_PS.DOG_NPP					AND
			U_DOGOVOR.DEL_FLAG			IS NULL
	WHERE 	U_PS.DEL_FLAG				IS NULL							AND
			U_PS.D_CLOSE				IS NULL							AND
			SUBSTRING(U_PS.N_PS, 20, 1) <>	'5'							AND
			SUBSTRING(U_PS.N_PS, 20, 1) <>	'6'							AND
			U_DOGOVOR.SUMK				> 0								AND
			U_DOGOVOR.KVALK				= '840'							AND
			U_DOGOVOR.SUMK				<= @SUM_LIMIT		

	--	-----------------------------------------------------------------------------------------------
	--	ШАГ 2: Добавляем ПС с КВЦ <> 840 
	--	-----------------------------------------------------------------------------------------------
	INSERT	INTO	@PS_TO_CLOSE_2557U
	SELECT	U_RESIDENTS.RESIDENT_ID, 
			ISNULL(U_RESIDENTS.NAMER_S, U_RESIDENTS.NAMER), 
			U_PS.PS_ID, 
			U_PS.DOG_ID, 
			U_PS.DOG_NPP, 
			U_PS.N_PS, 
			U_PS.D_PS,
			U_DOGOVOR.N_KONTR,
			U_DOGOVOR.D_KONTR,
			U_DOGOVOR.D_DOPSOGL,
			U_DOGOVOR.D_END,
			U_DOGOVOR.KVALK, 
			U_DOGOVOR.SUMK, 
			NULL,
			NULL,
			NULL,
			CASE	U_DOGOVOR.KVALK
					WHEN '643' THEN U_DOGOVOR.SUMK
					ELSE NULL
			END,
			NULL,
			NULL,
			NULL, 
			CASE	U_DOGOVOR.KVALK
					WHEN '643' THEN 'ПС с КВЦ = 643, сумма контракта не требует пересчёта в рубли'
					ELSE 'ПС с КВЦ, отличным от 840 и 643'
			END
	FROM	U_PS (NOLOCK)
	INNER	JOIN U_RESIDENTS (NOLOCK) 	ON 
			U_PS.RESIDENT_ID			= U_RESIDENTS.RESIDENT_ID		AND
			U_RESIDENTS.DEL_FLAG		IS NULL
	INNER	JOIN U_USERS_RESIDENTS (NOLOCK) ON 
			U_PS.RESIDENT_ID			= U_USERS_RESIDENTS.RESIDENT_ID	AND
			U_USERS_RESIDENTS.USER_ID	= @USER_ID
	INNER	JOIN U_DOGOVOR (NOLOCK) ON
			U_DOGOVOR.RESIDENT_ID		= U_PS.RESIDENT_ID				AND
			U_DOGOVOR.DOG_ID			= U_PS.DOG_ID					AND
			U_DOGOVOR.DOG_NPP			= U_PS.DOG_NPP					AND
			U_DOGOVOR.DEL_FLAG			IS NULL
	WHERE 	U_PS.DEL_FLAG				IS NULL							AND
			U_PS.D_CLOSE				IS NULL							AND
			SUBSTRING(U_PS.N_PS, 20, 1) <>	'5'							AND
			SUBSTRING(U_PS.N_PS, 20, 1) <>	'6'							AND
			U_DOGOVOR.SUMK				> 0								AND		
			U_DOGOVOR.KVALK				<> '840'		

	--	-----------------------------------------------------------------------------------------------
	--	ШАГ 3: Вычисляем дату пересчёта суммы контракта (для ПС с КВЦ = 840 не выполняется)
	--	-----------------------------------------------------------------------------------------------
	UPDATE	@PS_TO_CLOSE_2557U
	SET		D_RECALC	= ISNULL([dbo].[DEF_DATE_RECALC_SUM_KONTRAKT](RESIDENT_ID, DOG_ID, DOG_NPP), ISNULL(D_DOPSOGL, D_KONTR))
	WHERE	KVALK		<> '840'

	--	-----------------------------------------------------------------------------------------------
	--	ШАГ 4: Выполняем пересчёт суммы контракта в рубли (для ПС с КВЦ = 840 и 643 не выполняется)
	--	-----------------------------------------------------------------------------------------------
	UPDATE	@PS_TO_CLOSE_2557U
	SET		SUMK_RUB		= [dbo].[U_CONVERT_SUM_TO_ANOTHER_VAL](SUMK, D_RECALC, KVALK, '643', NULL, NULL),
			D_FIND_KURS_RUB	= [dbo].[U_FIND_NEAR_DATE_KURS](KVALK, D_RECALC) 
	WHERE	KVALK		<> '840'	AND
			KVALK		<> '643'	

	--	----------------------------------------------------------------------------------------------------------
	--	ШАГ 5: Выполняем пересчёт суммы контракта из рублей в доллары США (для ПС с КВЦ = 840 не выполняется)
	--	----------------------------------------------------------------------------------------------------------
	UPDATE	@PS_TO_CLOSE_2557U
	SET		SUMK_USD		= [dbo].[U_CONVERT_SUM_TO_ANOTHER_VAL](SUMK_RUB, D_RECALC, '643', '840', NULL, NULL),
			D_FIND_KURS_USD	= [dbo].[U_FIND_NEAR_DATE_KURS]('643', D_RECALC) 
	WHERE	KVALK		<> '840'	AND
			SUMK_RUB	IS NOT NULL

	--	-----------------------------------------------------------------------------------------------
	--	ШАГ 6: Выводим список ПС, у которых сумма контракта не превышает 50000 долларов США (таблица 0)
	--	-----------------------------------------------------------------------------------------------
	SELECT	*
	FROM	@PS_TO_CLOSE_2557U
	WHERE	SUMK_USD	IS NOT NULL		AND
			SUMK_USD	<= @SUM_LIMIT
	ORDER	BY NAMER, RESIDENT_ID, N_PS, PS_ID

	--	----------------------------------------------------------------------------------------------------
	--	ШАГ 7: Выводим список КВЦ, для которых кросскурс на дату пересчёта или более раннюю дату не найден
	-- (убрано в хранимую процедуру U_PS_TO_CLOSE_2557U_PROTOCOL)
	--	----------------------------------------------------------------------------------------------------
/*
	SELECT	DISTINCT 
			KVALK, D_RECALC 
	FROM	@PS_TO_CLOSE_2557U
	WHERE	D_FIND_KURS_RUB	IS NULL		AND
			KVALK			<> '840'	AND
			KVALK			<> '643'
	UNION
	SELECT	DISTINCT	
			'840', D_RECALC
	FROM	@PS_TO_CLOSE_2557U
	WHERE	D_FIND_KURS_USD	IS NULL		AND
			KVALK			<> '840'	
	ORDER	BY KVALK, D_RECALC
*/

GO

GRANT  EXECUTE  ON [dbo].[U_PS_TO_CLOSE_2557U]  TO [OPERS], [AUDITS]
GO

--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[U_PS_TO_CLOSE_2557U_PROTOCOL]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[U_PS_TO_CLOSE_2557U_PROTOCOL]
GO

CREATE PROCEDURE [dbo].[U_PS_TO_CLOSE_2557U_PROTOCOL]
--	------------------------------------------------------------------------------------------------------------------------------
--	Протокол к отчёту (подотчёт)
--	Список ПС (контракты), рекомендуемых к закрытию на основании Указания Банка России 2557-У, доступных указанному Прользователю
--	------------------------------------------------------------------------------------------------------------------------------
--	(Создание	в версии 2.1.0)
--	------------------------------------------------------------------------------------------------------------------------------
(
	@USER_ID	AS VARCHAR(30)
) 
AS
SET NOCOUNT ON

	--	--------------------------------------------------------------------
	--	Сумма лимита = 50000 долларов США 
	--	--------------------------------------------------------------------
	DECLARE	@SUM_LIMIT		AS	DECIMAL (16, 2)
	SELECT	@SUM_LIMIT	=	50000	

	--	--------------------------------------------------------------------
	--	Объявляем табличную переменную
	--	--------------------------------------------------------------------
	DECLARE @PS_TO_CLOSE_2557U TABLE	( 
								RESIDENT_ID		INTEGER,
								NAMER			VARCHAR (300),
								PS_ID			INTEGER,
								DOG_ID			INTEGER,
								DOG_NPP			INTEGER,
								N_PS			CHAR (22),
								D_PS			SMALLDATETIME,											
								N_KONTR			VARCHAR (100),
								D_KONTR			SMALLDATETIME,
								D_DOPSOGL		SMALLDATETIME,
								D_END			DATETIME,
								KVALK			CHAR (3),
								SUMK			DECIMAL (16, 2),
								D_RECALC		SMALLDATETIME,		-- дата пересчёта суммы контракта
								D_FIND_KURS_RUB	SMALLDATETIME,		-- найденная дата пересчёта суммы контракта из КВЦ в рубли
								KKURS_RUB		DECIMAL (16, 8),	-- курс пересчёта из КВЦ в рубли
								SUMK_RUB		DECIMAL (16, 2),	-- сумма контракта в рублях
								D_FIND_KURS_USD	SMALLDATETIME,		-- найденная дата пересчёта суммы контракта из рублей в доллары США
								KKURS_USD		DECIMAL (16, 8),	-- курс пересчёта из из рублей в доллары США
								SUMK_USD		DECIMAL (16, 2),	-- сумма контракта в долларах США
								PRIM			VARCHAR(100)
								PRIMARY KEY ( RESIDENT_ID, PS_ID ) 
							)

	--	-----------------------------------------------------------------------------------------------
	--	ШАГ 1: Добавляем все ПС с КВЦ = 840, у которых сумма контракта не превышает 50000 долларов США 
	--	-----------------------------------------------------------------------------------------------
	INSERT	INTO	@PS_TO_CLOSE_2557U
	SELECT	U_RESIDENTS.RESIDENT_ID, 
			ISNULL(U_RESIDENTS.NAMER_S, U_RESIDENTS.NAMER), 
			U_PS.PS_ID, 
			U_PS.DOG_ID, 
			U_PS.DOG_NPP, 
			U_PS.N_PS, 
			U_PS.D_PS,
			U_DOGOVOR.N_KONTR,
			U_DOGOVOR.D_KONTR,
			U_DOGOVOR.D_DOPSOGL,
			U_DOGOVOR.D_END,
			U_DOGOVOR.KVALK, 
			U_DOGOVOR.SUMK, 
			NULL,
			NULL,
			NULL,
			NULL,
			NULL,
			NULL,
			U_DOGOVOR.SUMK, 
			'ПС с КВЦ = 840, сумма контракта не превышает 50000 долларов США'
	FROM	U_PS (NOLOCK)
	INNER	JOIN U_RESIDENTS (NOLOCK) 	ON 
			U_PS.RESIDENT_ID			= U_RESIDENTS.RESIDENT_ID		AND
			U_RESIDENTS.DEL_FLAG		IS NULL
	INNER	JOIN U_USERS_RESIDENTS (NOLOCK) ON 
			U_PS.RESIDENT_ID			= U_USERS_RESIDENTS.RESIDENT_ID	AND
			U_USERS_RESIDENTS.USER_ID	= @USER_ID
	INNER	JOIN U_DOGOVOR (NOLOCK) ON
			U_DOGOVOR.RESIDENT_ID		= U_PS.RESIDENT_ID				AND
			U_DOGOVOR.DOG_ID			= U_PS.DOG_ID					AND
			U_DOGOVOR.DOG_NPP			= U_PS.DOG_NPP					AND
			U_DOGOVOR.DEL_FLAG			IS NULL
	WHERE 	U_PS.DEL_FLAG				IS NULL							AND
			U_PS.D_CLOSE				IS NULL							AND
			SUBSTRING(U_PS.N_PS, 20, 1) <>	'5'							AND
			SUBSTRING(U_PS.N_PS, 20, 1) <>	'6'							AND
			U_DOGOVOR.SUMK				> 0								AND
			U_DOGOVOR.KVALK				= '840'							AND
			U_DOGOVOR.SUMK				<= @SUM_LIMIT		

	--	-----------------------------------------------------------------------------------------------
	--	ШАГ 2: Добавляем ПС с КВЦ <> 840 
	--	-----------------------------------------------------------------------------------------------
	INSERT	INTO	@PS_TO_CLOSE_2557U
	SELECT	U_RESIDENTS.RESIDENT_ID, 
			ISNULL(U_RESIDENTS.NAMER_S, U_RESIDENTS.NAMER), 
			U_PS.PS_ID, 
			U_PS.DOG_ID, 
			U_PS.DOG_NPP, 
			U_PS.N_PS, 
			U_PS.D_PS,
			U_DOGOVOR.N_KONTR,
			U_DOGOVOR.D_KONTR,
			U_DOGOVOR.D_DOPSOGL,
			U_DOGOVOR.D_END,
			U_DOGOVOR.KVALK, 
			U_DOGOVOR.SUMK, 
			NULL,
			NULL,
			NULL,
			CASE	U_DOGOVOR.KVALK
					WHEN '643' THEN U_DOGOVOR.SUMK
					ELSE NULL
			END,
			NULL,
			NULL,
			NULL, 
			CASE	U_DOGOVOR.KVALK
					WHEN '643' THEN 'ПС с КВЦ = 643, сумма контракта не требует пересчёта в рубли'
					ELSE 'ПС с КВЦ, отличным от 840 и 643'
			END
	FROM	U_PS (NOLOCK)
	INNER	JOIN U_RESIDENTS (NOLOCK) 	ON 
			U_PS.RESIDENT_ID			= U_RESIDENTS.RESIDENT_ID		AND
			U_RESIDENTS.DEL_FLAG		IS NULL
	INNER	JOIN U_USERS_RESIDENTS (NOLOCK) ON 
			U_PS.RESIDENT_ID			= U_USERS_RESIDENTS.RESIDENT_ID	AND
			U_USERS_RESIDENTS.USER_ID	= @USER_ID
	INNER	JOIN U_DOGOVOR (NOLOCK) ON
			U_DOGOVOR.RESIDENT_ID		= U_PS.RESIDENT_ID				AND
			U_DOGOVOR.DOG_ID			= U_PS.DOG_ID					AND
			U_DOGOVOR.DOG_NPP			= U_PS.DOG_NPP					AND
			U_DOGOVOR.DEL_FLAG			IS NULL
	WHERE 	U_PS.DEL_FLAG				IS NULL							AND
			U_PS.D_CLOSE				IS NULL							AND
			SUBSTRING(U_PS.N_PS, 20, 1) <>	'5'							AND
			SUBSTRING(U_PS.N_PS, 20, 1) <>	'6'							AND
			U_DOGOVOR.SUMK				> 0								AND
			U_DOGOVOR.KVALK				<> '840'		

	--	-----------------------------------------------------------------------------------------------
	--	ШАГ 3: Вычисляем дату пересчёта суммы контракта (для ПС с КВЦ = 840 не выполняется)
	--	-----------------------------------------------------------------------------------------------
	UPDATE	@PS_TO_CLOSE_2557U
	SET		D_RECALC	= ISNULL([dbo].[DEF_DATE_RECALC_SUM_KONTRAKT](RESIDENT_ID, DOG_ID, DOG_NPP), ISNULL(D_DOPSOGL, D_KONTR))
	WHERE	KVALK		<> '840'

	--	-----------------------------------------------------------------------------------------------
	--	ШАГ 4: Выполняем пересчёт суммы контракта в рубли (для ПС с КВЦ = 840 и 643 не выполняется)
	--	-----------------------------------------------------------------------------------------------
	UPDATE	@PS_TO_CLOSE_2557U
	SET		SUMK_RUB		= [dbo].[U_CONVERT_SUM_TO_ANOTHER_VAL](SUMK, D_RECALC, KVALK, '643', NULL, NULL),
			D_FIND_KURS_RUB	= [dbo].[U_FIND_NEAR_DATE_KURS](KVALK, D_RECALC) 
	WHERE	KVALK		<> '840'	AND
			KVALK		<> '643'	

	--	----------------------------------------------------------------------------------------------------------
	--	ШАГ 5: Выполняем пересчёт суммы контракта из рублей в доллары США (для ПС с КВЦ = 840 не выполняется)
	--	----------------------------------------------------------------------------------------------------------
	UPDATE	@PS_TO_CLOSE_2557U
	SET		SUMK_USD		= [dbo].[U_CONVERT_SUM_TO_ANOTHER_VAL](SUMK_RUB, D_RECALC, '643', '840', NULL, NULL),
			D_FIND_KURS_USD	= [dbo].[U_FIND_NEAR_DATE_KURS]('643', D_RECALC) 
	WHERE	KVALK		<> '840'	AND
			SUMK_RUB	IS NOT NULL

	--	----------------------------------------------------------------------------------------------------
	--	ШАГ 6: Выводим список КВЦ, для которых кросскурс на дату пересчёта или более раннюю дату не найден
	--	----------------------------------------------------------------------------------------------------
	SELECT	DISTINCT 
			KVALK, D_RECALC 
	FROM	@PS_TO_CLOSE_2557U
	WHERE	D_FIND_KURS_RUB	IS NULL		AND
			KVALK			<> '840'	AND
			KVALK			<> '643'
	UNION
	SELECT	DISTINCT	
			'840', D_RECALC
	FROM	@PS_TO_CLOSE_2557U
	WHERE	D_FIND_KURS_USD	IS NULL		AND
			KVALK			<> '840'	
	ORDER	BY KVALK, D_RECALC
GO

GRANT  EXECUTE  ON [dbo].[U_PS_TO_CLOSE_2557U_PROTOCOL]  TO [OPERS], [AUDITS]
GO

--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[U_CALENDAR_CHECK]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[U_CALENDAR_CHECK]
GO

CREATE PROCEDURE [dbo].[U_CALENDAR_CHECK]
--	----------------------------------------------------------------------------------------------------
--	Проверка на необходимость обновления календаря системы
--	----------------------------------------------------------------------------------------------------
--	Возвращает: 
--	RC=	0	- в календаре системы есть хотя бы одна запись за текущий год 							
--		10	- календарь системы пустой (необходимо его заполнить)
--		20  - в календаре системы нет ни одной записи за текущий год (необходимо его обновить)
--	----------------------------------------------------------------------------------------------------
--	(Создание	в версии 2.1.0)
--	----------------------------------------------------------------------------------------------------
(
	@RC		AS	INTEGER OUTPUT
)
AS
	SET NOCOUNT ON

	--	---------------------------------------------------
	--	Объявляем рабочие переменные переменных
	--	---------------------------------------------------
	DECLARE	@MAX_YEAR	AS INTEGER

	--	-------------------------------------
	--	Начальные значения
	--	-------------------------------------
	SELECT	@RC			= 0
	SELECT	@MAX_YEAR	= NULL

	SELECT	@MAX_YEAR	= DATEPART( YY, MAX(DATE_HW))
	FROM	U_CALENDAR (NOLOCK)

	IF	@MAX_YEAR	IS NULL
		BEGIN			
			SELECT	@RC		= 10
			GOTO	EXIT_CALENDAR_CHECK
		END	

	IF	@MAX_YEAR >= DATEPART( YY, GETDATE() )
		SELECT	@RC	= 0
	ELSE
		SELECT	@RC	= 20

--
--	Возврат кода завершения
--
EXIT_CALENDAR_CHECK:
	SELECT	RC = @RC
GO

GRANT  EXECUTE  ON [dbo].[U_CALENDAR_CHECK]  TO [OPERS], [AUDITS]
GO

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

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

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

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

--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
--	****************************************************
--	****************************************************
--	(6*) Модификация существующих хранимых процедур 
--	****************************************************
--	****************************************************
--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[U_SPR_VAL_OPR_CALC_DATE_CHECK]') and xtype in (N'FN', N'IF', N'TF'))
drop function [dbo].[U_SPR_VAL_OPR_CALC_DATE_CHECK]
GO

CREATE FUNCTION [dbo].[U_SPR_VAL_OPR_CALC_DATE_CHECK] 
--	---------------------------------------------------------------------------------
--	Расчёт контрольных сроков для документа справки о валютных операциях
--	Контроль по 117 И пункт 1.3 (в части, касающейся зачислений)
--	---------------------------------------------------------------------------------
--	Возвращает: 	- дату контрольного срока или NULL
--	---------------------------------------------------------------------------------
--	(Модификация	в версии 2.1.0)
--	---------------------------------------------------------------------------------
(
	@RESIDENT_ID	AS INTEGER,
	@SPR_ID			AS INTEGER,
	@NPP			AS INTEGER
)
RETURNS SMALLDATETIME
AS
BEGIN
	--	---------------------------------------------------
	--	Объявляем рабочие переменные переменных
	--	---------------------------------------------------
	DECLARE	@VALP		AS CHAR(3),
			@D_SPR		AS SMALLDATETIME,
			@DIRECTION	AS CHAR(1),
			@DATE_CHECK	AS SMALLDATETIME,
			@D_2557U	AS SMALLDATETIME

	--	-----------------------------------------------------
	--	Дата вступления в силу Указания 2557-У 
	--	-----------------------------------------------------
	SELECT	@D_2557U	= CONVERT( SMALLDATETIME, '20110227' )

	--	---------------------------------------------------
	--	Начальные значения некоторых переменных
	--	---------------------------------------------------
	SELECT	@DATE_CHECK	= NULL
	SELECT	@VALP		= NULL

	--	---------------------------------------------------
	--	Считываем информацию о валютной операции
	--	---------------------------------------------------
	SELECT	@VALP		= U_SPR_VAL_OPR.VALP,
			@D_SPR		= U_SPR_VAL_OPR.D_SPR,
			@DIRECTION	= U_SPR_VAL_OPR.DIRECTION
	FROM	U_SPR_VAL_OPR (NOLOCK)
	WHERE	U_SPR_VAL_OPR.RESIDENT_ID	= @RESIDENT_ID	AND
			U_SPR_VAL_OPR.SPR_ID		= @SPR_ID		AND
			U_SPR_VAL_OPR.NPP			= @NPP			AND
			U_SPR_VAL_OPR.DEL_FLAG		IS NULL

	--	---------------------------------------------------
	--	Для рублей контрольная дата = NULL
	--	---------------------------------------------------
	IF	ISNULL(@VALP, '643')	= '643'
		GOTO	EXIT_FUN

	--	---------------------------------------------------
	--	Для Списаний контрольная дата = NULL
	--	---------------------------------------------------
	IF	ISNULL(@DIRECTION, '2')	= '2'
		GOTO	EXIT_FUN
	
	--	---------------------------------------------------------------
	--	Для валютных операций до '2004-06-15' контрольная дата = NULL
	--	---------------------------------------------------------------
	IF	ISNULL(@D_SPR, CONVERT( SMALLDATETIME, '20040615' ))	<= CONVERT( SMALLDATETIME, '20040615' )
		GOTO	EXIT_FUN
	
	--	---------------------------------------------------------------
	--	Вычисляем контрольную дату 
	--	---------------------------------------------------------------	
	IF	@D_SPR < @D_2557U
		-- дата ВО до вступления в силу Указания 2557-У
		SELECT	@DATE_CHECK = [dbo].[U_DATE_ADD_WORK_DAYS](7, @D_SPR)
	ELSE
		-- дата ВО после вступления в силу Указания 2557-У
		SELECT	@DATE_CHECK = [dbo].[U_DATE_ADD_WORK_DAYS](15, @D_SPR)
		
EXIT_FUN:
	RETURN @DATE_CHECK
END
GO

GRANT  EXECUTE  ON [dbo].[U_SPR_VAL_OPR_CALC_DATE_CHECK]  TO [OPERS], [AUDITS]
GO

--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[U_VID_KONTR_SELECT]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[U_VID_KONTR_SELECT]
GO

CREATE PROCEDURE [dbo].[U_VID_KONTR_SELECT]
--	----------------------------------------------------------------------------------------------------------------------------------------
--	Чтение видов контрактов (кредитных договоров)
--	----------------------------------------------------------------------------------------------------------------------------------------
--	@TYPE	= 0-все виды для ПС (без Z), 1-Контракты, 2-Кредитные договоры, 3-все виды для Договора (с Z), 4-Контракты для Договора (с Z)
--	----------------------------------------------------------------------------------------------------------------------------------------
--	(Модификация	в версии 2.1.0)
--	----------------------------------------------------------------------------------------------------------------------------------------
(
	@TYPE		AS INTEGER
) 
AS
	--
	--	Все виды для ПС (без Z)
	--
	IF	@TYPE = 0  
		SELECT	VID_KONTR.* FROM VID_KONTR (NOLOCK)
		WHERE	KOD <> 'Z'
		ORDER BY KOD

	--
	--	Контракты
	--
	IF	@TYPE = 1  
		SELECT VID_KONTR.* FROM VID_KONTR (NOLOCK)
		WHERE	
			(
			 KOD = '1'	OR
			 KOD = '2'	OR
			 KOD = '3'	OR
			 KOD = '4'	OR
			 KOD = '9'
			)

	--
	--	Кредитные договоры
	--
	IF	@TYPE = 2  
		SELECT	VID_KONTR.* FROM VID_KONTR (NOLOCK)
		WHERE	(  KOD = '5'	OR  KOD = '6' )

	--
	--	Все виды для Договора
	--
	IF	@TYPE = 3
		SELECT VID_KONTR.* FROM VID_KONTR (NOLOCK)
		ORDER BY KOD

--
	--	Контракты для Договора (с Z)
	--
	IF	@TYPE = 4 
		SELECT VID_KONTR.* FROM VID_KONTR (NOLOCK)
		WHERE	
			(
			 KOD = '1'	OR
			 KOD = '2'	OR
			 KOD = '3'	OR
			 KOD = '4'	OR
			 KOD = '9'	OR
			 KOD = 'Z'
			)

GO

GRANT  EXECUTE  ON [dbo].[U_VID_KONTR_SELECT]  TO [OPERS], [AUDITS]
GO

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

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

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

--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[U_RESIDENTS_INSERT]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[U_RESIDENTS_INSERT]
GO

CREATE PROCEDURE [dbo].[U_RESIDENTS_INSERT]
--	------------------------------------------------------------------------------------------------------------------------
--	Добавление Участника ВЭД
--	------------------------------------------------------------------------------------------------------------------------
--
--	Возвращает:
--	1. RC 				
--	   RC =	0	- Участник ВЭД был добавлен							
--			10	- Ошибка при добавлении Участника ВЭД
--			20	- Ошибка при вычислении идентификатора Участника ВЭД
--			30	- Дублирование информации
--			40	- Участник ВЭД с таким ИНН уже есть в базе данных
--			50  - Ошибка при выдаче прав пользователю (добавление в таблицу U_USERS_RESIDENTS)
--
--	2. RESIDENT_ID
--		0		- Участник ВЭД не был добавлен	
--		> 0		- Идентификатор добавленного Участника ВЭД	
--	------------------------------------------------------------------------------------------------------------------------
--	(Модификация	в версии 2.1.0)
--	------------------------------------------------------------------------------------------------------------------------
(
	@NAMER			AS VARCHAR (300),
	@NAMER_S		AS VARCHAR (300)	=	NULL,
	@SUB			AS VARCHAR (50)		=	NULL,
	@REGION			AS VARCHAR (50)		=	NULL,
	@CITY			AS VARCHAR (50)		=	NULL,
	@PUNKT			AS VARCHAR (50)		=	NULL,
	@STREET			AS VARCHAR (250)	=	NULL,
	@HOUSE			AS VARCHAR (50)		=	NULL,
	@KORPUS			AS VARCHAR (50)		=	NULL,
	@OFFICE			AS VARCHAR (50)		=	NULL,
	@OGRN			AS VARCHAR (15)		=	NULL,
	@DGR			AS SMALLDATETIME	=	NULL,
	@INN			AS VARCHAR (12)		=	NULL,
	@KPP			AS CHAR (9)			=	NULL,
	@PRIM			AS VARCHAR (250)	=	NULL,
	@KEY_PRG		AS CHAR(20)			=	NULL,
	@USER_ID		AS VARCHAR(30), 
	@RESIDENT_ID	AS INTEGER OUTPUT,
	@RC				AS INTEGER OUTPUT
)
AS
	SET NOCOUNT ON
	--
	--	Рабочие переменные
	--
	DECLARE	@NEW_RES_ID	AS INTEGER

	--
	--	Начальные значения
	--
	SELECT	@NEW_RES_ID	= 0			

	--
	--	Проверка на дублирование ИНН
	--
	IF	EXISTS (
				SELECT	*	
				FROM	U_RESIDENTS (NOLOCK)
				WHERE	ISNULL(INN, '')				=	ISNULL(@INN, '')				AND
						DEL_FLAG					IS NULL
				)
		BEGIN	
			SELECT	@RESIDENT_ID = 0
			SELECT	@RC = 40
			GOTO	EXIT_RESIDENTS_INSERT
		END
	
	--
	--	Проверка на дублирование информации
	--
	IF	EXISTS (
				SELECT	*	
				FROM	U_RESIDENTS (NOLOCK)
				WHERE	UPPER(LTRIM(RTRIM(NAMER)))			=	UPPER(LTRIM(RTRIM(@NAMER)))			AND
						UPPER(LTRIM(RTRIM(ISNULL(NAMER_S, ''))))	=	UPPER(LTRIM(RTRIM(ISNULL(@NAMER_S, ''))))	AND
						UPPER(LTRIM(RTRIM(ISNULL(SUB, ''))))		=	UPPER(LTRIM(RTRIM(ISNULL(@SUB, ''))))		AND
						UPPER(LTRIM(RTRIM(ISNULL(REGION, ''))))		=	UPPER(LTRIM(RTRIM(ISNULL(@REGION, ''))))	AND
						UPPER(LTRIM(RTRIM(ISNULL(CITY, ''))))		=	UPPER(LTRIM(RTRIM(ISNULL(@CITY, ''))))		AND
						UPPER(LTRIM(RTRIM(ISNULL(PUNKT, ''))))		=	UPPER(LTRIM(RTRIM(ISNULL(@PUNKT, ''))))		AND
						UPPER(LTRIM(RTRIM(ISNULL(STREET, ''))))		=	UPPER(LTRIM(RTRIM(ISNULL(@STREET, ''))))	AND
						UPPER(LTRIM(RTRIM(ISNULL(HOUSE, ''))))		=	UPPER(LTRIM(RTRIM(ISNULL(@HOUSE, ''))))		AND
						UPPER(LTRIM(RTRIM(ISNULL(KORPUS, ''))))		=	UPPER(LTRIM(RTRIM(ISNULL(@KORPUS, ''))))	AND
						UPPER(LTRIM(RTRIM(ISNULL(OFFICE, ''))))		=	UPPER(LTRIM(RTRIM(ISNULL(@OFFICE, ''))))	AND
						ISNULL(OGRN, '')				=	ISNULL(@OGRN, '')				AND
						ISNULL(DGR, CONVERT( SMALLDATETIME, '19370101'))	=	ISNULL(@DGR, CONVERT( SMALLDATETIME, '19370101'))	AND
						ISNULL(KPP, '')					=	ISNULL(@KPP, '')				AND
						ISNULL(INN, '')					=	ISNULL(@INN, '')				AND
						UPPER(LTRIM(RTRIM(ISNULL(PRIM, ''))))		=	UPPER(LTRIM(RTRIM(ISNULL(@PRIM, ''))))		AND
						DEL_FLAG					IS NULL
				)
		BEGIN	
			SELECT	@RESIDENT_ID = 0
			SELECT	@RC = 30
			GOTO	EXIT_RESIDENTS_INSERT
		END
	
	--
	--	Определяем новый ID
	--
	SELECT	@NEW_RES_ID = MAX( RESIDENT_ID ) + 1
	FROM	U_RESIDENTS (NOLOCK)
		
	IF	@@ERROR <> 0
		BEGIN	
			SELECT	@RESIDENT_ID = 0
			SELECT	@RC = 20
			GOTO	EXIT_RESIDENTS_INSERT
		END
	
	SELECT	@NEW_RES_ID	= ISNULL( @NEW_RES_ID,  1 )

	BEGIN TRANSACTION
	--
	--	Добавляем новую запись
	--
	INSERT	INTO	U_RESIDENTS
			(
			RESIDENT_ID, 
			NAMER, 
			NAMER_S, 
			SUB,   
			REGION, 
			CITY, 
			PUNKT, 
			STREET, 
			HOUSE, 
			KORPUS, 
			OFFICE, 
			OGRN, 
			DGR, 
			INN, 
			KPP, 
			PRIM,
			KEY_PRG,
			DKOR
			)
	VALUES		(
			@NEW_RES_ID, 
			@NAMER, 
			@NAMER_S, 
			@SUB,   
			@REGION, 
			@CITY, 
			@PUNKT, 
			@STREET, 
			@HOUSE, 
			@KORPUS, 
			@OFFICE, 
			@OGRN, 
			@DGR, 
			@INN,
			@KPP, 
			@PRIM, 
			@KEY_PRG,
			CONVERT(SMALLDATETIME,GETDATE())
			)

	IF	@@ERROR <> 0
		BEGIN
			ROLLBACK TRANSACTION	
			SELECT	@RC = 10
			SELECT	@RESIDENT_ID = 0
			GOTO	EXIT_RESIDENTS_INSERT
		END
	
	--
	--	Добавляем запись в таблицу U_USERS_RESIDENTS (выдача прав пользователю)
	--
	INSERT	INTO	U_USERS_RESIDENTS	(	RESIDENT_ID,	[USER_ID])
			VALUES						(	@NEW_RES_ID,	@USER_ID)

	IF	@@ERROR <> 0
		BEGIN	
			ROLLBACK TRANSACTION	
			SELECT	@RC = 50
			SELECT	@RESIDENT_ID = 0
			GOTO	EXIT_RESIDENTS_INSERT
		END
	ELSE
		BEGIN
			COMMIT TRANSACTION
			SELECT	@RC = 0
			SELECT	@RESIDENT_ID = @NEW_RES_ID
		END

--
--	Возврат кода завершения и идентификатора Участника ВЭД
--
EXIT_RESIDENTS_INSERT:
	SELECT	RC = @RC, RESIDENT_ID = @RESIDENT_ID
GO

GRANT  EXECUTE  ON [dbo].[U_RESIDENTS_INSERT]  TO [OPERS]
GO

--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[U_RESIDENTS_UPDATE]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[U_RESIDENTS_UPDATE]
GO

CREATE PROCEDURE [dbo].[U_RESIDENTS_UPDATE]
--	------------------------------------------------------------------------------------------------------------------------
--	Обновление информации об Участнике ВЭД
--	------------------------------------------------------------------------------------------------------------------------
--
--	Возвращает:
--	1. RC 				
--	   RC =	0	- нормальное завершение							
--			10	- Ошибка при обновлении информации
--			15	- Участник ВЭД не найден
--			30	- Дублирование информации
--			40	- Участник ВЭД с таким ИНН уже есть в базе данных
--	------------------------------------------------------------------------------------------------------------------------
--	(Модификация	в версии 2.1.0)
--	------------------------------------------------------------------------------------------------------------------------
(
	@RESIDENT_ID	AS INTEGER,
	@NAMER			AS VARCHAR (300),
	@NAMER_S		AS VARCHAR (300)	=	NULL,
	@SUB			AS VARCHAR (50)		=	NULL,
	@REGION			AS VARCHAR (50)		=	NULL,
	@CITY			AS VARCHAR (50)		=	NULL,
	@PUNKT			AS VARCHAR (50)		=	NULL,
	@STREET			AS VARCHAR (250)	=	NULL,
	@HOUSE			AS VARCHAR (50)		=	NULL,
	@KORPUS			AS VARCHAR (50)		=	NULL,
	@OFFICE			AS VARCHAR (50)		=	NULL,
	@OGRN			AS VARCHAR (15)		=	NULL,
	@DGR			AS SMALLDATETIME	=	NULL,
	@KPP			AS CHAR	(9)			=	NULL,
	@INN			AS VARCHAR	(12)	=	NULL,
	@PRIM			AS VARCHAR (250)	=	NULL,
	@KEY_PRG		AS CHAR(20)			=	NULL,
	@RC				AS INTEGER OUTPUT
)
AS
	SET NOCOUNT ON
	--
	--	Рабочие переменные
	--
	DECLARE	
	 		@MY_ERROR		AS INTEGER,
			@MY_ROWCOUNT	AS INTEGER
	--
	--	Начальные значения
	--

	SELECT	@MY_ERROR		= 0
	SELECT	@MY_ROWCOUNT	= 0		

	--
	--	Проверка на дублирование ИНН
	--
	IF	EXISTS (
				SELECT	*	
				FROM	U_RESIDENTS (NOLOCK)
				WHERE	ISNULL(INN, '')			=	ISNULL(@INN, '')	AND
						RESIDENT_ID				<>	@RESIDENT_ID		AND
						DEL_FLAG				IS NULL
				)
		BEGIN	
			SELECT	@RESIDENT_ID	= 0
			SELECT	@RC 			= 40
			GOTO	EXIT_RESIDENTS_UPDATE
		END
	
	--
	--	Проверка на дублирование информации
	--
	IF	EXISTS (
				SELECT	*	
				FROM	U_RESIDENTS (NOLOCK)
				WHERE	RESIDENT_ID									<>	@RESIDENT_ID					AND	
						UPPER(LTRIM(RTRIM(NAMER)))					=	UPPER(LTRIM(RTRIM(@NAMER)))			AND
						UPPER(LTRIM(RTRIM(ISNULL(NAMER_S, ''))))	=	UPPER(LTRIM(RTRIM(ISNULL(@NAMER_S, ''))))	AND
						UPPER(LTRIM(RTRIM(ISNULL(SUB, ''))))		=	UPPER(LTRIM(RTRIM(ISNULL(@SUB, ''))))		AND
						UPPER(LTRIM(RTRIM(ISNULL(REGION, ''))))		=	UPPER(LTRIM(RTRIM(ISNULL(@REGION, ''))))	AND
						UPPER(LTRIM(RTRIM(ISNULL(CITY, ''))))		=	UPPER(LTRIM(RTRIM(ISNULL(@CITY, ''))))		AND
						UPPER(LTRIM(RTRIM(ISNULL(PUNKT, ''))))		=	UPPER(LTRIM(RTRIM(ISNULL(@PUNKT, ''))))		AND
						UPPER(LTRIM(RTRIM(ISNULL(STREET, ''))))		=	UPPER(LTRIM(RTRIM(ISNULL(@STREET, ''))))	AND
						UPPER(LTRIM(RTRIM(ISNULL(HOUSE, ''))))		=	UPPER(LTRIM(RTRIM(ISNULL(@HOUSE, ''))))		AND
						UPPER(LTRIM(RTRIM(ISNULL(KORPUS, ''))))		=	UPPER(LTRIM(RTRIM(ISNULL(@KORPUS, ''))))	AND
						UPPER(LTRIM(RTRIM(ISNULL(OFFICE, ''))))		=	UPPER(LTRIM(RTRIM(ISNULL(@OFFICE, ''))))	AND
						ISNULL(OGRN, '')							=	ISNULL(@OGRN, '')				AND
						ISNULL(DGR, CONVERT( SMALLDATETIME, '19370101'))	=	ISNULL(@DGR, CONVERT( SMALLDATETIME, '19370101'))	AND
						ISNULL(INN, '')								=	ISNULL(@INN, '')				AND
						ISNULL(KPP, '')								=	ISNULL(@KPP, '')				AND
						DEL_FLAG									IS NULL
				)
		BEGIN	
			SELECT	@RC = 30
			GOTO	EXIT_RESIDENTS_UPDATE
		END
	--
	--	Обновление информации
	--
	UPDATE	U_RESIDENTS	SET
			NAMER		= @NAMER,
			NAMER_S		= @NAMER_S,
			SUB			= @SUB,
			REGION		= @REGION,
			CITY		= @CITY,
			PUNKT		= @PUNKT,
			STREET		= @STREET,
			HOUSE		= @HOUSE,
			KORPUS		= @KORPUS,
			OFFICE		= @OFFICE,
			OGRN		= @OGRN,
			DGR			= @DGR,
			INN			= @INN,
			KPP			= @KPP,
			PRIM		= @PRIM,
			KEY_PRG		= @KEY_PRG,
			DKOR		= CONVERT(SMALLDATETIME,GETDATE())
	WHERE	RESIDENT_ID	= @RESIDENT_ID	AND
			DEL_FLAG	IS NULL

	SELECT	@MY_ERROR = @@ERROR, @MY_ROWCOUNT = @@ROWCOUNT

	IF	@MY_ERROR <> 0
		BEGIN
			SELECT	@RC = 10
			GOTO	EXIT_RESIDENTS_UPDATE
		END

	IF	@MY_ROWCOUNT = 0
		BEGIN	
			SELECT	@RC = 15
			GOTO	EXIT_RESIDENTS_UPDATE
		END

	SELECT	@RC	= 0

--
--	Возврат кода завершения 
--
EXIT_RESIDENTS_UPDATE:
	SELECT	RC = @RC
GO

GRANT  EXECUTE  ON [dbo].[U_RESIDENTS_UPDATE]  TO [OPERS]
GO

--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[U_RESIDENTS_SEARCH]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[U_RESIDENTS_SEARCH]
GO

CREATE PROCEDURE [dbo].[U_RESIDENTS_SEARCH]
--	------------------------------------------------------------------------------------------------------------------------
--	Поиск Участника ВЭД по ИНН
--	------------------------------------------------------------------------------------------------------------------------
--
--	Возвращает:
--	1. RC 				
--	   RC =	0	- Участник ВЭД найден							
--			10	- Участник ВЭД не найден
--
--	2. RESIDENT_ID
--		0		- Участник ВЭД не найден
--		> 0		- Идентификатор найденного Участника ВЭД	
--	------------------------------------------------------------------------------------------------------------------------
--	(Модификация	в версии 2.1.0)
--	------------------------------------------------------------------------------------------------------------------------
(
	@USER_ID		AS VARCHAR (30),
	@INN			AS VARCHAR (12),
	@NAMER			AS VARCHAR (300) OUTPUT,
	@RESIDENT_ID	AS INTEGER OUTPUT,
	@RC				AS INTEGER OUTPUT
)
AS
	SET NOCOUNT ON
	
	--
	--	Поиск Участника ВЭД
	--
	SELECT	@RESIDENT_ID	= U_RESIDENTS.RESIDENT_ID,
			@NAMER			= U_RESIDENTS.NAMER
	FROM	U_RESIDENTS (NOLOCK)
	INNER	JOIN U_USERS_RESIDENTS (NOLOCK) ON
			U_RESIDENTS.RESIDENT_ID		= U_USERS_RESIDENTS.RESIDENT_ID	AND
			U_USERS_RESIDENTS.USER_ID	= @USER_ID
	WHERE	ISNULL(INN, '')		=	ISNULL(@INN, '')	AND
			DEL_FLAG			IS NULL
	
	IF	ISNULL(@RESIDENT_ID, 0) = 0
		BEGIN	
			SELECT	@RC = 10
			SELECT	@RESIDENT_ID = 0
			GOTO	EXIT_RESIDENTS_SEARCH
		END
	ELSE
		SELECT	@RC = 0
--
--	Возврат кода завершения и идентификатора Участника ВЭД и наименования
--
EXIT_RESIDENTS_SEARCH:
	SELECT	RC = @RC, RESIDENT_ID = @RESIDENT_ID, NAMER = @NAMER
GO

GRANT  EXECUTE  ON [dbo].[U_RESIDENTS_SEARCH]  TO [OPERS]
GO

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

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

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

--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[U_IN_PART_INSERT]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[U_IN_PART_INSERT]
GO

CREATE PROCEDURE [dbo].[U_IN_PART_INSERT]
--	--------------------------------------------------------------------------------------------------------------------------
--	Добавление информации об Иностранном контрагенте 
--	--------------------------------------------------------------------------------------------------------------------------
--
--	Возвращает: 
--	1. RC 				
--	   RC =	0	- нормальное завершение							
--			10	- ошибка при добавлении  
--			20  	- ошибка при вычислении идентификатора 
--			30	- иностранный партнер уже есть в базе данных (дублирование записи)
--			90	- код страны отсутствует в справочнике
--
--	2. PARTNER_ID
--			0	- Иностраннный контрагент Клиента Банка не был добавлен	
--		>	0	- Идентификатор добавленного Иностранного контрагента 
--	------------------------------------------------------------------------------------------------------------------------
--	(Модификация	в версии 2.1.0)
--	------------------------------------------------------------------------------------------------------------------------
(
	@NAMEP			AS VARCHAR (300),
	@KODS			AS CHAR (3),
	@INN			AS VARCHAR (12)	 = NULL,	
	@ADRES			AS VARCHAR (300) = NULL,
	@TYPE			AS CHAR (1)	 = NULL,
	@PARTNER_ID		AS INTEGER OUTPUT,
	@RC				AS INTEGER OUTPUT 
)
AS

	SET NOCOUNT ON

	--
	--	Рабочие переменные
	--
	DECLARE 	@NEW_ID	AS INTEGER,
				@KOL	AS INTEGER			

	--
	--	Начальные значения
	--
	SELECT	@NEW_ID	= 0			
	SELECT	@KOL	= 0			

	--
	--	Проверка на дублирование
	--
	IF	EXISTS (
			SELECT	* 	
			FROM	U_IN_PART (NOLOCK)
			WHERE	KODS					= @KODS						AND
					UPPER(LTRIM(RTRIM(NAMEP)))		= UPPER(LTRIM(RTRIM(@NAMEP)))			AND
					ISNULL(INN, '')				= ISNULL(@INN, '')				AND
					UPPER(LTRIM(RTRIM(ISNULL(ADRES, ''))))	= UPPER(LTRIM(RTRIM(ISNULL(@ADRES, ''))))	AND
					ISNULL(TYPE, '')			= ISNULL(@TYPE, '')				AND
					DEL_FLAG				IS NULL
			)
		BEGIN
			SELECT	@RC		= 30
			SELECT	@PARTNER_ID	= 0
			GOTO	EXIT_PARTNER_INSERT
		END

	--
	--	Проверка кода страны
	--
	SELECT	@KOL = COUNT(*)
	FROM	OKSMT (NOLOCK)
	WHERE	KOD	=  @KODS	

	IF	@KOL = 0
		BEGIN
			SELECT	@RC		= 90
			SELECT	@PARTNER_ID	= 0
			GOTO	EXIT_PARTNER_INSERT
		END

	--
	--	Определяем новый ID 
	--
	SELECT	@NEW_ID = MAX( PARTNER_ID ) + 1
	FROM	U_IN_PART (NOLOCK)


	IF	@@ERROR <> 0
		BEGIN	
			SELECT	@PARTNER_ID = 0
			SELECT	@RC = 20
			GOTO	EXIT_PARTNER_INSERT
		END

	SELECT	@NEW_ID	= ISNULL( @NEW_ID,  1 )

	--	
	--	Добавляем новую запись
	--
	INSERT	INTO	U_IN_PART  	
			( PARTNER_ID, NAMEP,  KODS, INN, ADRES, TYPE, DEL_FLAG )
	VALUES
			( @NEW_ID, @NAMEP, @KODS,  @INN, @ADRES, @TYPE, NULL )

	IF	@@ERROR <> 0
		BEGIN	
			SELECT	@RC = 10
			SELECT	@PARTNER_ID = 0
		END
	ELSE
		BEGIN	
			SELECT	@RC = 0
			SELECT	@PARTNER_ID = @NEW_ID
		END

--
--	Возврат кода завершения и идентификатора Иностранного контрагента 
--
EXIT_PARTNER_INSERT:
	SELECT	RC = @RC, PARTNER_ID = @PARTNER_ID
GO

GRANT  EXECUTE  ON [dbo].[U_IN_PART_INSERT]  TO [OPERS]
GO

--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[U_IN_PART_UPDATE]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[U_IN_PART_UPDATE]
GO

CREATE PROCEDURE [dbo].[U_IN_PART_UPDATE]
--	-------------------------------------------------------------------------------------------------------------------------
--	Изменение информации об Иностранном контрагенте 
--	-------------------------------------------------------------------------------------------------------------------------
--
--	Возвращает RC: 
--	RC =	0	- нормальное завершение							
--		10	- ошибка при обновлении информации 
--		15	- иностранный контрагент не найден 
--		30	- иностранный партнер уже есть в базе данных (дублирование записи)
--		90	- код страны отсутствует в справочнике
--	------------------------------------------------------------------------------------------------------------------------
--	(Модификация	в версии 2.1.0)
--	------------------------------------------------------------------------------------------------------------------------
(
	@PARTNER_ID	AS INTEGER,
	@NAMEP		AS VARCHAR (300),
	@KODS		AS CHAR (3),
	@INN		AS VARCHAR (12)	= NULL,	
	@ADRES		AS VARCHAR (300)= NULL,
	@TYPE		AS CHAR (1)	= NULL,
	@RC			AS INTEGER OUTPUT
) 
AS

	SET NOCOUNT ON

	--
	--	Рабочие переменные
	--
	DECLARE @KOL			AS INTEGER,
			@MY_ERROR		AS INTEGER,
			@MY_ROWCOUNT	AS INTEGER

	--
	--	Начальные значения
	--
	SELECT	@KOL		= 0	
	SELECT	@MY_ERROR	= 0
	SELECT	@MY_ROWCOUNT	= 0		

	--
	--	Проверка кода страны
	--
	SELECT	@KOL = COUNT(*)
	FROM	OKSMT (NOLOCK)
	WHERE	KOD	=  @KODS	

	IF	@KOL = 0
		BEGIN
			SELECT	@RC	= 90
			GOTO	EXIT_PARTNER_UPDATE
		END

	--
	--	Проверка на дублирование
	--
	IF	EXISTS (
				SELECT	* 	
				FROM	U_IN_PART (NOLOCK)
				WHERE	PARTNER_ID				<>	@PARTNER_ID								AND
						KODS					=	@KODS									AND
						UPPER(LTRIM(RTRIM(NAMEP)))		=	UPPER(LTRIM(RTRIM(@NAMEP)))				AND
						ISNULL(INN, '')				=	ISNULL(@INN, '')						AND
						UPPER(LTRIM(RTRIM(ISNULL(ADRES, ''))))	=	UPPER(LTRIM(RTRIM(ISNULL(@ADRES, ''))))	AND
						ISNULL(TYPE, '')			=	ISNULL(@TYPE, '')						AND
						DEL_FLAG				IS	NULL
				)
		BEGIN
			SELECT	@RC	= 30
			GOTO	EXIT_PARTNER_UPDATE
		END

	--
	--	Изменение информации
	--
	UPDATE	U_IN_PART	
	SET		NAMEP		= @NAMEP,
			KODS		= @KODS,
			INN			= @INN,
			ADRES		= @ADRES,
			TYPE		= @TYPE  
	WHERE
			PARTNER_ID	= @PARTNER_ID	AND
			DEL_FLAG	IS NULL

	SELECT	@MY_ERROR = @@ERROR, @MY_ROWCOUNT = @@ROWCOUNT

	IF	@MY_ERROR <> 0
		BEGIN
			SELECT	@RC	= 10
			GOTO	EXIT_PARTNER_UPDATE
		END

	IF	@MY_ROWCOUNT = 0
		BEGIN	
			SELECT	@RC	= 15
			GOTO	EXIT_PARTNER_UPDATE
		END

	SELECT	@RC	= 0

--
--	Возврат кода завершения
--
EXIT_PARTNER_UPDATE:
	SELECT	RC = @RC
GO

GRANT  EXECUTE  ON [dbo].[U_IN_PART_UPDATE]  TO [OPERS]
GO

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

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

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

--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[U_DOGOVOR_INSERT]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[U_DOGOVOR_INSERT]
GO

CREATE PROCEDURE [dbo].[U_DOGOVOR_INSERT]
--	------------------------------------------------------------------------------------------------------------------------
--	Добавление Договора
--	------------------------------------------------------------------------------------------------------------------------
--
--	Возвращает: 
--	1. RC 				
--	   RC =	0	- Договор был добавлен							
--		10	- Ошибка при добавлении Договора
--		20  - Ошибка при вычислении идентификатора Договора
--		23  - Ошибка при коррекции заголовочной части Договора
--		30	- Дублирование Договора
--		40	- Код валюты контракта отсутствует в справочнике
--		50	- вид Договора отсутствует в справочнике
-- 		90	- Код вида работ, услуг, передачи информации, результатов интеллектуальной деятельности, операций неторгового характера отсутствует в справочнике
--		100	- Ошибка при регистрации события
-- 		140	- Не указан вид Договора
-- 		150	- Не указан Иностранный контрагент
-- 		160	- Не указан номер контракта
-- 		170	- Не указана дата контракта
-- 		180	- Не указан код валюты цены контракта
-- 		350	- Код срока погашения (раздел 3 графа 10 форма 2) отсутствует в справочнике 
-- 		400	- Неверный символ в разделе 3 графа 8 (форма 1)
-- 		410	- Неверный символ в разделе 3 графа 9 (форма 1)
-- 		420	- Неверный символ в разделе 3 графа 10 (форма 1)
-- 		430	- Неверный символ в разделе 3 графа 9 (форма 2)
-- 		540	- Дата контракта больше текущей даты
-- 		550	- Дата окончания исполнения обязательств меньше даты подписания контракта 
--
--	2. DOG_ID, DOG_NPP
--		= 0	- Договор не был добавлен	
--		> 0	- Идентификаторы добавленного Договора	
--	------------------------------------------------------------------------------------------------------------------------
--	(Модификация	в версии 2.1.0)
--	------------------------------------------------------------------------------------------------------------------------
(
	@RESIDENT_ID		AS	INTEGER,
	@VID_KONTR			AS	CHAR (1), 
	@PARTNER_ID			AS	INTEGER,
	@N_KONTR			AS	VARCHAR (100), 
	@D_KONTR			AS	SMALLDATETIME,  
	@N_DOPSOGL			AS	VARCHAR (100), 
	@D_DOPSOGL			AS	SMALLDATETIME,  
	@KVALK				AS	CHAR (3), 
	@SUMK				AS	DECIMAL (16, 2), 
	@D_BEGIN			AS	SMALLDATETIME		= NULL,  
	@D_END				AS	DATETIME			= NULL,  
	@R3_G7				AS	DECIMAL (16, 2)		= NULL, 
	@F1_R3_G8			AS	CHAR (1)			= NULL, 
	@F1_R3_G9			AS	CHAR (1)			= NULL,
	@F1_R3_G10			AS	CHAR (1)			= NULL,
	@F2_R3_G8			AS	DECIMAL (16, 2)		= NULL,
	@F2_R3_G9			AS	CHAR (1)			= NULL, 
	@F2_R3_G10			AS	CHAR (1)			= NULL, 
	@VID_USLUG  		AS	VARCHAR (7)			= NULL,
	@KOD_CONTROL  		AS	VARCHAR (4)			= NULL,
	@PR_NOT_REQ_PS 		AS	CHAR (1)			= NULL,
	@KONTR_SROK  		AS	CHAR (4)			= NULL,
	@DESCR_VID_KONTR	AS	VARCHAR (500)		= NULL,
	@PARTNER_ID2		AS	INTEGER				= NULL,
	@USER_ID			AS	VARCHAR (30),
	@PRIM				AS	VARCHAR (2000)		= NULL,
	@PRIM_PREDMET		AS	VARCHAR (200)		= NULL,
	@PRIM_FIO_OTV		AS	VARCHAR (100)		= NULL,
	@BANK_ID			AS	INTEGER				= NULL,
	@UNI_ID				AS	UNIQUEIDENTIFIER	= NULL,
	@DOG_ID_BANK		AS	INTEGER				= NULL,
	@DOG_NPP_BANK		AS	INTEGER				= NULL,
	@D_LOAD				AS	SMALLDATETIME		= NULL,  
	@SRC_LOAD			AS	VARCHAR (15)		= NULL,  
	@DOG_ID				AS	INTEGER OUTPUT,
	@DOG_NPP			AS	INTEGER OUTPUT,
  	@RC					AS	INTEGER OUTPUT
)
 AS

	SET NOCOUNT ON

	--
	--	Рабочие переменные
	--
	DECLARE	@RETURN_STATUS	AS INTEGER
			
	--
	--	Начальные значения
	--
	SELECT	@RETURN_STATUS	= 0

	--	Проверка указания вида Договора
	IF	@VID_KONTR	IS NULL
		BEGIN
				SELECT	@RC = 140
				GOTO	EXIT_DOGOVOR_INSERT
		END	

	--	Проверка указания Иностранного контрагента
	IF	@PARTNER_ID	IS NULL
		BEGIN
				SELECT	@RC = 150
				GOTO	EXIT_DOGOVOR_INSERT
		END	

	--	Проверка указания номера контракта
	IF	@N_KONTR	IS NULL
		BEGIN
				SELECT	@RC = 160
				GOTO	EXIT_DOGOVOR_INSERT
		END	

	--	Проверка указания даты контракта
	IF	@D_KONTR	IS NULL
		BEGIN
				SELECT	@RC = 170
				GOTO	EXIT_DOGOVOR_INSERT
		END	

	--	Проверка указания кода валюты цены контракта / кредитного договора
	IF	@KVALK	IS NULL
		BEGIN
				SELECT	@RC = 180
				GOTO	EXIT_DOGOVOR_INSERT
		END	
	
	--
	--	Проверка кода валюты контракта
	--
	IF NOT EXISTS	(
						SELECT	* 
						FROM	VALW (NOLOCK)
						WHERE	KOD	= @KVALK
					)
		BEGIN
			SELECT	@RC			= 40
			GOTO	EXIT_DOGOVOR_INSERT
		END

	--
	--	Проверка вид Договора 
	--
	IF NOT EXISTS	(
						SELECT	* 
						FROM	VID_KONTR (NOLOCK)
						WHERE	KOD	= @VID_KONTR
					)
		BEGIN
			SELECT	@RC			= 50
			GOTO	EXIT_DOGOVOR_INSERT
		END

	--	------------------------------------------------------------------------
	--	Проверка кода вида работ, услуг, передачи информации, результатов интеллектуальной деятельности, операций неторгового характера отсутствует в справочнике
	--	------------------------------------------------------------------------
	IF	@VID_USLUG	IS NOT NULL
		BEGIN
			IF	NOT	EXISTS (
								SELECT	*
								FROM	VID_USLUG (NOLOCK)
								WHERE	KOD	= @VID_USLUG
							)

				BEGIN
					SELECT	@RC = 90
					GOTO	EXIT_DOGOVOR_INSERT
				END
		END

	--	---------------------------------------------------------------------------
	--	Проверка кода срока погашения суммы кредитного договора (раздел 3 графа 10)
	--	---------------------------------------------------------------------------
	IF	@F2_R3_G10	IS NOT NULL
		BEGIN
			IF	NOT	EXISTS (
								SELECT	*
								FROM	POGASHEN (NOLOCK)
								WHERE	KOD	= @F2_R3_G10
							)
				BEGIN
					SELECT	@RC = 350
					GOTO	EXIT_DOGOVOR_INSERT
				END
		END

	--	------------------------------------------------------------------------
	--	Валютная оговорка (символ X)
	--	------------------------------------------------------------------------
	IF	@F1_R3_G8	IS NOT NULL
		BEGIN
			IF	@F1_R3_G8	<> 'X'
				BEGIN
					SELECT	@RC = 400
					GOTO	EXIT_DOGOVOR_INSERT
				END
		END

	--	--------------------------------------------------------------------------
	--	ввоз\вывоз товаров 16,17,19 разделов Товарной номенклатуры ВЭД (символ X)
	--	--------------------------------------------------------------------------
	IF	@F1_R3_G9	IS NOT NULL
		BEGIN
			IF	@F1_R3_G9	<> 'X'
				BEGIN
					SELECT	@RC = 410
					GOTO	EXIT_DOGOVOR_INSERT
				END
		END

	--	---------------------------------------------------------------------------
	--	Проведение строительных работ и подрядных работ за пределами РФ (символ X)
	--	---------------------------------------------------------------------------
	IF	@F1_R3_G10	IS NOT NULL
		BEGIN
			IF	@F1_R3_G10	<> 'X'
				BEGIN
					SELECT	@RC = 420
					GOTO	EXIT_DOGOVOR_INSERT
				END
		END

	--	------------------------------------------------------------------------
	--	Валютная оговорка (символ X)
	--	------------------------------------------------------------------------
	IF	@F2_R3_G9	IS NOT NULL
		BEGIN
			IF	@F2_R3_G9	<> 'X'
				BEGIN
					SELECT	@RC = 430
					GOTO	EXIT_DOGOVOR_INSERT
				END
		END

	--	--------------------------------------------------------
	--	Контроль даты контракта 
	--	--------------------------------------------------------
	IF	@D_KONTR	> CONVERT( SMALLDATETIME, GETDATE() ) 
		BEGIN
			SELECT	@RC = 540
			GOTO   	EXIT_DOGOVOR_INSERT	
		END

	--	------------------------------------------------------------------------------------------------
	--	Котроль, что дата окончания исполнения обязательств больше или равна дате подписания контракта
	--	------------------------------------------------------------------------------------------------
	IF	@D_END	IS NOT NULL
		BEGIN
			IF	@D_END	< @D_KONTR  	
				BEGIN
					SELECT	@RC = 550
					GOTO   	EXIT_DOGOVOR_INSERT	
				END
		END

	--	--------------------------------------------------------
	--	Контроль дублирования Договора
	--	Проверка на уникальность: Номер контракта + Дата контракта + Номер доп.соглашения + Дата доп.соглашения
	--	в пределах Участника ВЭД и Иностранного контрагента
	--	При приёме(@D_LOAD	IS	NOT NULL) НЕ выполняется!
	--	--------------------------------------------------------
	IF @D_LOAD	IS	NULL
		BEGIN
			IF	UPPER(RTRIM(LTRIM(@N_KONTR)))	<> 'Б/Н'	AND
				UPPER(RTRIM(LTRIM(@N_KONTR)))	<> 'Б\Н'	
				BEGIN
					IF EXISTS	(	
									SELECT	*
									FROM	U_DOGOVOR (NOLOCK)
									WHERE	RESIDENT_ID						= @RESIDENT_ID					AND
											PARTNER_ID						= @PARTNER_ID					AND
											UPPER(RTRIM(LTRIM(N_KONTR)))	= UPPER(RTRIM(LTRIM(@N_KONTR)))	AND 
											D_KONTR							= @D_KONTR						AND
											UPPER(RTRIM(LTRIM(ISNULL(N_DOPSOGL, ''))))				= UPPER(RTRIM(LTRIM(ISNULL(@N_DOPSOGL, ''))))				AND 	
											ISNULL(D_DOPSOGL, CONVERT( SMALLDATETIME, '19370101'))	= ISNULL(@D_DOPSOGL, CONVERT( SMALLDATETIME, '19370101'))	AND
											DEL_FLAG						IS NULL	
								)
						BEGIN
		
							SELECT	@RC	= 30
							GOTO	EXIT_DOGOVOR_INSERT
						END
				END
		END

		--	-------------------------------------------	
		--	Добавляем новую запись
		--	-------------------------------------------
		IF	@DOG_ID	IS NULL OR @DOG_ID = 0
			BEGIN	
				--
				--	Определяем новый DOG_ID 
				--
				SELECT	@DOG_ID = ISNULL( MAX( DOG_ID ), 0) + 1
				FROM	U_DOGOVOR (NOLOCK)
				WHERE	RESIDENT_ID	= @RESIDENT_ID	
				IF	@@ERROR <> 0
					BEGIN	
						SELECT	@RC	= 20
						GOTO	EXIT_DOGOVOR_INSERT
					END
			END	

		--
		--	Определяем новый DOG_NPP
		--
		SELECT	@DOG_NPP = ISNULL( MAX( DOG_NPP ), 0) + 1
		FROM	U_DOGOVOR (NOLOCK)
		WHERE	RESIDENT_ID	= @RESIDENT_ID	AND
				DOG_ID		= @DOG_ID
		IF	@@ERROR <> 0
			BEGIN	
				SELECT	@RC	= 20
				GOTO	EXIT_DOGOVOR_INSERT
			END

			--	-------------------------------------------	
			--	Добавляем новую запись
			--	-------------------------------------------
			BEGIN	TRANSACTION

			INSERT	INTO	U_DOGOVOR
				(
					RESIDENT_ID,
					DOG_ID,
					DOG_NPP,
					VID_KONTR,								
					PARTNER_ID,
					N_KONTR,
					D_KONTR,
					N_DOPSOGL,
					D_DOPSOGL,
					KVALK,
					SUMK,
					D_BEGIN,
					D_END,
					R3_G7,
					F1_R3_G8,
					F1_R3_G9,
					F1_R3_G10,
					F2_R3_G8,
					F2_R3_G9,
					F2_R3_G10,
					VID_USLUG,
					KOD_CONTROL,
					PR_NOT_REQ_PS,
					KONTR_SROK,
					DESCR_VID_KONTR,
					PARTNER_ID2,
					PRIM,
					PRIM_PREDMET,
					PRIM_FIO_OTV,
					BANK_ID,
					DEL_FLAG,
					UNI_ID,
					DOG_ID_BANK,
					DOG_NPP_BANK,
					D_LOAD,
					SRC_LOAD,
					DKOR
				)
			VALUES
				(
					@RESIDENT_ID,
					@DOG_ID,
					@DOG_NPP,
					@VID_KONTR,								
					@PARTNER_ID,
					@N_KONTR,
					@D_KONTR,
					@N_DOPSOGL,
					@D_DOPSOGL,
					@KVALK,
					@SUMK,
					@D_BEGIN,
					@D_END,
					@R3_G7,
					@F1_R3_G8,
					@F1_R3_G9,
					@F1_R3_G10,
					@F2_R3_G8,
					@F2_R3_G9,
					@F2_R3_G10,
					@VID_USLUG,
					@KOD_CONTROL,
					@PR_NOT_REQ_PS,
					@KONTR_SROK,
					@DESCR_VID_KONTR,
					@PARTNER_ID2,
					@PRIM,
					@PRIM_PREDMET,
					@PRIM_FIO_OTV,
					@BANK_ID,
					NULL,
					@UNI_ID,
					@DOG_ID_BANK,
					@DOG_NPP_BANK,
					@D_LOAD,
					@SRC_LOAD,
					CONVERT(SMALLDATETIME, GETDATE())
				)

			IF	@@ERROR <> 0
				BEGIN	
					ROLLBACK TRANSACTION 
					SELECT	@RC	= 10
					GOTO	EXIT_DOGOVOR_INSERT
				END
			ELSE
				SELECT	@RC 	= 0
					
	--	-------------------------------------------------------------------------------------
	--	Во всех записях по Договору проставляем одинаковые:
	--	иностранного контрагента 				- PARTNER_ID; 
	--	номер договора							- N_KONTR;  
	--	дата договора							- D_KONTR;
	--	вид контракта							- VID_KONTR;
	--	описание для вида "Прочее"				- DESCR_VID_KONTR;
	--	признак Договор под особым контролем	- KOD_CONTROL
	--	признак Договор не требует ПС			- PR_NOT_REQ_PS
	--	-------------------------------------------------------------------------------------
	UPDATE	U_DOGOVOR
	SET 	PARTNER_ID		=	@PARTNER_ID,
			N_KONTR			=	@N_KONTR,
			D_KONTR			=	@D_KONTR,
			VID_KONTR		=	@VID_KONTR,
			DESCR_VID_KONTR	=	@DESCR_VID_KONTR,
			KOD_CONTROL		=	@KOD_CONTROL,
			PR_NOT_REQ_PS	=	@PR_NOT_REQ_PS,
			DKOR			=	CONVERT(SMALLDATETIME, GETDATE())
	WHERE	RESIDENT_ID		=	@RESIDENT_ID 	AND
			DOG_ID 			=	@DOG_ID   		AND		
			DOG_NPP 		<>	@DOG_NPP   		AND								
			(
				PARTNER_ID									<>	@PARTNER_ID									OR
				N_KONTR										<>	@N_KONTR									OR
				D_KONTR										<>	@D_KONTR									OR	
				RTRIM(LTRIM(VID_KONTR))						<>	RTRIM(LTRIM(@VID_KONTR))					OR	
				RTRIM(LTRIM(ISNULL(DESCR_VID_KONTR, '')))	<>	RTRIM(LTRIM(ISNULL(@DESCR_VID_KONTR, '')))	OR			
				RTRIM(LTRIM(ISNULL(KOD_CONTROL, '')))		<>	RTRIM(LTRIM(ISNULL(@KOD_CONTROL, '')))		OR					
				RTRIM(LTRIM(ISNULL(PR_NOT_REQ_PS, '')))		<>	RTRIM(LTRIM(ISNULL(@PR_NOT_REQ_PS, '')))													
			)									AND
			DEL_FLAG 	IS	NULL 

	IF	@@ERROR <> 0
		BEGIN	
			ROLLBACK TRANSACTION 
			SELECT	@RC	= 23
			GOTO	EXIT_DOGOVOR_INSERT
		END

	--
	--	Добавление события в журнал событий
	--
	EXECUTE	@RETURN_STATUS	= U_EVENT_INSERT
			@EVENT_NAME		= 'INS_DOG',
			@USER_ID		= @USER_ID,
			@BANK_ID		= @BANK_ID,
			@RESIDENT_ID	= @RESIDENT_ID,
			@PS_ID			= @DOG_ID,
			@NPP			= @DOG_NPP

	IF	@RETURN_STATUS <> 0
		ROLLBACK TRANSACTION
	ELSE 
		COMMIT TRANSACTION 
--
--	Возврат кода завершения и идентификатора добавленного Договора
--
EXIT_DOGOVOR_INSERT:
	SELECT	RC = @RC + @RETURN_STATUS, DOG_ID = @DOG_ID, DOG_NPP = @DOG_NPP
GO

GRANT  EXECUTE  ON [dbo].[U_DOGOVOR_INSERT]  TO [OPERS]
GO

--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[U_DOGOVOR_UPDATE]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[U_DOGOVOR_UPDATE]
GO

CREATE PROCEDURE [dbo].[U_DOGOVOR_UPDATE]
--	------------------------------------------------------------------------	
--	Изменение информации Договора (строки)
--	------------------------------------------------------------------------
--
--	Возвращает RC: 				
--	   RC =	0	- Информация Договора была изменена							
--		10	- Ошибка при изменении информации Договора
--		11	- Договор не найден в БД
--		12	- Ошибка при изменении информации о Договоре в ПС (не используется)
--		23  - Ошибка при коррекции заголовочной части Договора
--		30	- Дублирование Договора
--		40	- Код валюты цены контракта отсутствует в справочнике
--		50	- вид Договора отсутствует в справочнике
-- 		90	- Код вида работ, услуг, передачи информации, результатов интеллектуальной деятельности, операций неторгового характера отсутствует в справочнике
--		100	- Ошибка при регистрации события
-- 		140	- Не указан вид Договора
-- 		150	- Не указан Иностранный контрагент
-- 		160	- Не указан номер контракта
-- 		170	- Не указана дата контракта
-- 		180	- Не указан код валюты цены контракта
--		350	- Код срока погашения (раздел 3 графа 10 форма 2) отсутствует в справочнике 
-- 		400	- Неверный символ в разделе 3 графа 8 (форма 1)
-- 		410	- Неверный символ в разделе 3 графа 9 (форма 1)
-- 		420	- Неверный символ в разделе 3 графа 10 (форма 1)
-- 		430	- Неверный символ в разделе 3 графа 9 (форма 2)
-- 		540	- Дата контракта больше текущей даты
-- 		550	- Дата окончания исполнения обязательств меньше даты подписания контракта 
--		901	- Невозможно изменить код валюты цены - в базе данных есть Разрешения с таким кодом валюты цены
--		902	- Невозможно изменить код валюты цены - в базе данных есть Изменения задолженности с таким кодом валюты цены
--		903	- Невозможно изменить код валюты цены - в базе данных есть График платежей с таким кодом валюты цены
--		904	- Невозможно изменить код валюты цены - в базе данных есть График возвратов с таким кодом валюты цены
--		905	- Невозможно изменить код валюты цены - в базе данных есть Займы с таким кодом валюты цены
--		906	- Невозможно изменить код валюты цены - в базе данных есть Транши с таким кодом валюты цены
--		907	- Невозможно изменить код валюты цены - в базе данных есть Обеспечения исполнения обязательств с таким кодом валюты цены
--		908	- Невозможно изменить код валюты цены - в базе данных есть Кредиты с таким кодом валюты цены
--		909	- Невозможно изменить код валюты цены - в базе данных есть Исполнения обязательств с таким кодом валюты цены
--		910	- Невозможно изменить код валюты цены - в базе данных есть Платежи с таким кодом валюты цены
--		911	- Невозможно изменить код валюты цены - в базе данных есть Валютные операции с таким кодом валюты цены
--		912	- Невозможно изменить код валюты цены - в базе данных есть Подтверждающие документы с таким кодом валюты цены
--		913	- Невозможно изменить код валюты цены - в базе данных есть Поступления валюты РФ с таким кодом валюты цены
--		914	- Невозможно изменить код валюты цены - в базе данных есть Начальная задолженность с таким кодом валюты цены
--	------------------------------------------------------------------------------------------------------------------------
--	(Модификация	в версии 2.1.0)
--	------------------------------------------------------------------------------------------------------------------------
(
	@RESIDENT_ID		AS	INTEGER,
	@DOG_ID				AS	INTEGER,
	@DOG_NPP			AS	INTEGER,
	@VID_KONTR			AS	CHAR (1), 
	@PARTNER_ID			AS	INTEGER,
	@N_KONTR			AS	VARCHAR (100), 
	@D_KONTR			AS	SMALLDATETIME,  
	@N_DOPSOGL			AS	VARCHAR (100), 
	@D_DOPSOGL			AS	SMALLDATETIME,  
	@KVALK				AS	CHAR (3), 
	@SUMK				AS	DECIMAL (16, 2), 
	@D_BEGIN			AS	SMALLDATETIME		= NULL,  
	@D_END				AS	DATETIME			= NULL,  
	@R3_G7				AS	DECIMAL (16, 2)		= NULL, 
	@F1_R3_G8			AS	CHAR (1)			= NULL, 
	@F1_R3_G9			AS	CHAR (1)			= NULL,
	@F1_R3_G10			AS	CHAR (1)			= NULL,
	@F2_R3_G8			AS	DECIMAL (16, 2)		= NULL,
	@F2_R3_G9			AS	CHAR (1)			= NULL, 
	@F2_R3_G10			AS	CHAR (1)			= NULL, 
	@VID_USLUG  		AS	VARCHAR (7)			= NULL,
	@KOD_CONTROL  		AS	VARCHAR (4)			= NULL,
	@PR_NOT_REQ_PS 		AS	CHAR (1)			= NULL,
	@KONTR_SROK  		AS	CHAR (4)			= NULL,
	@DESCR_VID_KONTR	AS	VARCHAR (500)		= NULL,
	@PARTNER_ID2		AS	INTEGER				= NULL,
	@USER_ID			AS	VARCHAR (30),
	@PRIM				AS	VARCHAR (2000)		= NULL,
	@PRIM_PREDMET		AS	VARCHAR (200)		= NULL,
	@PRIM_FIO_OTV		AS	VARCHAR (100)		= NULL,
	@BANK_ID			AS	INTEGER				= NULL,
	@UNI_ID				AS	UNIQUEIDENTIFIER	= NULL,
	@DOG_ID_BANK		AS	INTEGER				= NULL,
	@DOG_NPP_BANK		AS	INTEGER				= NULL,
	@D_LOAD				AS	SMALLDATETIME		= NULL,  
	@SRC_LOAD			AS	VARCHAR (15)		= NULL,  
	@RC					AS	INTEGER OUTPUT
)
 AS

	SET NOCOUNT ON

	--
	--	Рабочие переменные
	--
	DECLARE	@RETURN_STATUS		AS INTEGER,
			@KOL				AS INTEGER,
			@PRIZ_LOAD			AS INTEGER,
			@KVALK_OLD			AS CHAR (3),
			@PRIZ_CHECK_KVALK	AS INTEGER
			
	--
	--	Начальные значения
	--
	SELECT	@RETURN_STATUS		= 0
	SELECT	@KOL				= 0 
	SELECT	@RC					= 0
	SELECT	@KVALK_OLD			= NULL 
	SELECT	@PRIZ_CHECK_KVALK	= 1 

	--	Проверка указания вида Договора
	IF	@VID_KONTR	IS NULL
		BEGIN
				SELECT	@RC = 140
				GOTO	EXIT_DOGOVOR_UPDATE
		END	

	--	Проверка указания Иностранного контрагента
	IF	@PARTNER_ID	IS NULL
		BEGIN
				SELECT	@RC = 150
				GOTO	EXIT_DOGOVOR_UPDATE
		END	

	--	Проверка указания номера контракта
	IF	@N_KONTR	IS NULL
		BEGIN
				SELECT	@RC = 160
				GOTO	EXIT_DOGOVOR_UPDATE
		END	

	--	Проверка указания даты контракта
	IF	@D_KONTR	IS NULL
		BEGIN
				SELECT	@RC = 170
				GOTO	EXIT_DOGOVOR_UPDATE
		END	


	--	Проверка указания кода валюты цены контракта / кредитного договора
	IF	@KVALK	IS NULL
		BEGIN
				SELECT	@RC = 180
				GOTO	EXIT_DOGOVOR_UPDATE
		END	

	-- Если параметр @D_LOAD не NULL, то это обновление Договора при повторной загрузке из XML-файла.
	-- @PRIZ_LOAD используется ниже для проверки с кодом возврата 345: при повторной загрузке проверка НЕ выполняется!
	-- Проверки с кодом возврата 345 это Контроль кода валюты цены кредитного договора (пункт 6.2 графа 1)
	-- А также при проверке с кодом возврата 901-914 (на возможность изменить КВЦ) 
	IF	@D_LOAD	IS	NOT NULL
		SELECT	@PRIZ_LOAD	= 1
	ELSE
		SELECT	@PRIZ_LOAD	= 0

	--
	--	Старое значение кода валюты цены
	--
	SELECT	@KVALK_OLD	= KVALK
	FROM	U_DOGOVOR (NOLOCK)
	WHERE	RESIDENT_ID	= @RESIDENT_ID	AND
			DOG_ID		= @DOG_ID		AND
			DOG_NPP		= @DOG_NPP		AND
			DEL_FLAG	IS NULL
	IF	@KVALK_OLD	IS NULL
		BEGIN
			SELECT	@RC	= 11
			GOTO	EXIT_DOGOVOR_UPDATE
		END

	--	--------------------------------------------------------------------
	--	Контроль возможности изменения кода валюты цены  
	--	При загрузке из файла обмена не выполняется!
	--	--------------------------------------------------------------------
	IF	@PRIZ_LOAD = 0
		BEGIN
		--
		--	Проверка возможности изменения кода валюты цены (если новый код не равен старому)
		--
		IF	ISNULL(@KVALK, '')	<> ISNULL(@KVALK_OLD, '')
			BEGIN
				--
				--	Если в таблице U_DOGOVOR есть другие записи по DOG_ID со старым КВЦ - 
				--	проверка возможности изменения кода валюты цены НЕ выполняется (@PRIZ_CHECK_KVALK = 0)
				--	
				IF	EXISTS	(
								SELECT	*
								FROM	U_DOGOVOR (NOLOCK)
								WHERE	RESIDENT_ID	= 	@RESIDENT_ID	AND
										DOG_ID		= 	@DOG_ID			AND
										DOG_NPP		<> 	@DOG_NPP		AND
										KVALK		= 	@KVALK_OLD		AND
										DEL_FLAG	IS 	NULL				
							)
	
					SELECT	@PRIZ_CHECK_KVALK	= 0
					
				--					
				--	Начало проверки возможности изменения кода валюты цены
				--
				IF	@PRIZ_CHECK_KVALK = 1
					BEGIN
						--
						--	1. По таблице U_RAZRESH
						--
						IF	EXISTS	(
										SELECT	*
										FROM	U_RAZRESH (NOLOCK)
										WHERE	RESIDENT_ID	= @RESIDENT_ID	AND
												PS_ID		IN (
																	SELECT	PS_ID 
																	FROM	U_PS (NOLOCK)
																	WHERE 	U_PS.RESIDENT_ID	= @RESIDENT_ID	AND
																			U_PS.DOG_ID			= @DOG_ID		AND
																			U_PS.DEL_FLAG		IS NULL
																)			AND
												DEL_FLAG	IS NULL			AND
												VALK		= @KVALK_OLD	
									)			
							BEGIN
								SELECT	@RC	= 901
								GOTO	EXIT_DOGOVOR_UPDATE
							END
	
						--
						--	2. По таблице U_PS_IZMEN_ZADOL
						--
						IF	EXISTS	(
										SELECT	*
										FROM	U_PS_IZMEN_ZADOL (NOLOCK)
										WHERE	RESIDENT_ID	= @RESIDENT_ID	AND
												PS_ID		IN (
																	SELECT	PS_ID 
																	FROM	U_PS (NOLOCK)
																	WHERE 	U_PS.RESIDENT_ID		= @RESIDENT_ID	AND
																			ISNULL(U_PS.DOG_ID, 0)	= @DOG_ID		AND
																			U_PS.DEL_FLAG			IS NULL
																)			AND
												DEL_FLAG	IS NULL			AND
												VALK		= @KVALK_OLD	
									)			
							BEGIN
								SELECT	@RC	= 902
								GOTO	EXIT_DOGOVOR_UPDATE
							END
	
						--
						--	3. По таблице U_GRAF_PLAT
						--
						IF	EXISTS	(
										SELECT	*
										FROM	U_GRAF_PLAT (NOLOCK)
										WHERE	RESIDENT_ID	= @RESIDENT_ID	AND
												PS_ID		IN (
																	SELECT	PS_ID 
																	FROM	U_PS (NOLOCK)
																	WHERE 	U_PS.RESIDENT_ID		= @RESIDENT_ID	AND
																			ISNULL(U_PS.DOG_ID, 0)	= @DOG_ID		AND
																			U_PS.DEL_FLAG			IS NULL
																)			AND
												DEL_FLAG	IS NULL			AND
												VALP		= @KVALK_OLD	
									)			
							BEGIN
								SELECT	@RC	= 903
								GOTO	EXIT_DOGOVOR_UPDATE
							END
	
						--
						--	4. По таблице U_GRAF_VOZVR
						--
						IF	EXISTS	(
										SELECT	*
										FROM	U_GRAF_VOZVR (NOLOCK)
										WHERE	RESIDENT_ID	= @RESIDENT_ID	AND
												PS_ID		IN (
																	SELECT	PS_ID 
																	FROM	U_PS (NOLOCK)
																	WHERE 	U_PS.RESIDENT_ID		= @RESIDENT_ID	AND
																			ISNULL(U_PS.DOG_ID, 0)	= @DOG_ID		AND
																			U_PS.DEL_FLAG			IS NULL
																)			AND
												DEL_FLAG	IS NULL			AND
												VALK		= @KVALK_OLD	
									)			
							BEGIN
								SELECT	@RC	= 904
								GOTO	EXIT_DOGOVOR_UPDATE
							END
	
						--
						--	5. По таблице U_ZAIM
						--
						IF	EXISTS	(
										SELECT	*
										FROM	U_ZAIM (NOLOCK)
										WHERE	RESIDENT_ID	= @RESIDENT_ID	AND
												PS_ID		IN (
																	SELECT	PS_ID 
																	FROM	U_PS (NOLOCK)
																	WHERE 	U_PS.RESIDENT_ID		= @RESIDENT_ID	AND
																			ISNULL(U_PS.DOG_ID, 0)	= @DOG_ID		AND
																			U_PS.DEL_FLAG			IS NULL
																)			AND
												DEL_FLAG	IS NULL			AND
												VALK		= @KVALK_OLD	
									)			
							BEGIN
								SELECT	@RC	= 905
								GOTO	EXIT_DOGOVOR_UPDATE
							END
	
						--
						--	6. По таблице U_TRANSH
						--
						IF	EXISTS	(
										SELECT	*
										FROM	U_TRANSH (NOLOCK)
										WHERE	RESIDENT_ID	= @RESIDENT_ID	AND
												PS_ID		IN (
																	SELECT	PS_ID 
																	FROM	U_PS (NOLOCK)
																	WHERE 	U_PS.RESIDENT_ID		= @RESIDENT_ID	AND
																			ISNULL(U_PS.DOG_ID, 0)	= @DOG_ID		AND
																			U_PS.DEL_FLAG			IS NULL
																)			AND
												DEL_FLAG	IS NULL			AND
												VALK		= @KVALK_OLD	
									)			
							BEGIN
								SELECT	@RC	= 906
								GOTO	EXIT_DOGOVOR_UPDATE
							END
	
						--
						--	7. По таблице U_OBESPECH
						--
						IF	EXISTS	(
										SELECT	*
										FROM	U_OBESPECH (NOLOCK)
										WHERE	RESIDENT_ID	= @RESIDENT_ID	AND
												PS_ID		IN (
																	SELECT	PS_ID 
																	FROM	U_PS (NOLOCK)
																	WHERE 	U_PS.RESIDENT_ID		= @RESIDENT_ID	AND
																			ISNULL(U_PS.DOG_ID, 0)	= @DOG_ID		AND
																			U_PS.DEL_FLAG			IS NULL
																)			AND
												DEL_FLAG	IS NULL			AND
												VALK		= @KVALK_OLD	
									)			
							BEGIN
								SELECT	@RC	= 907
								GOTO	EXIT_DOGOVOR_UPDATE
							END
	
						--
						--	8. По таблице U_KREDIT
						--
						IF	EXISTS	(
										SELECT	*
										FROM	U_KREDIT (NOLOCK)
										WHERE	RESIDENT_ID	= @RESIDENT_ID	AND
												PS_ID		IN (
																	SELECT	PS_ID 
																	FROM	U_PS (NOLOCK)
																	WHERE 	U_PS.RESIDENT_ID		= @RESIDENT_ID	AND
																			ISNULL(U_PS.DOG_ID, 0)	= @DOG_ID		AND
																			U_PS.DEL_FLAG			IS NULL
																)			AND
												DEL_FLAG	IS NULL			AND
												VALK		= @KVALK_OLD	
									)			
							BEGIN
								SELECT	@RC	= 908
								GOTO	EXIT_DOGOVOR_UPDATE
							END
	
						--
						--	9. По таблице U_ISPOLNEN
						--
						IF	EXISTS	(
										SELECT	*
										FROM	U_ISPOLNEN (NOLOCK)
										WHERE	RESIDENT_ID	= @RESIDENT_ID	AND
												PS_ID		IN (
																	SELECT	PS_ID 
																	FROM	U_PS (NOLOCK)
																	WHERE 	U_PS.RESIDENT_ID		= @RESIDENT_ID	AND
																			ISNULL(U_PS.DOG_ID, 0)	= @DOG_ID		AND
																			U_PS.DEL_FLAG			IS NULL
																)			AND
												DEL_FLAG	IS NULL			AND
												VALK		= @KVALK_OLD	
									)			
							BEGIN
								SELECT	@RC	= 909
								GOTO	EXIT_DOGOVOR_UPDATE
							END
	
						--
						--	10. По таблице U_OPLATA
						--
						IF	EXISTS	(
										SELECT	*
										FROM	U_OPLATA (NOLOCK)
										WHERE	RESIDENT_ID	= @RESIDENT_ID	AND
												(
													ISNULL(PS_ID, 0) IN (
																			SELECT	PS_ID 
																			FROM	U_PS (NOLOCK)
																			WHERE 	U_PS.RESIDENT_ID		= @RESIDENT_ID	AND
																					ISNULL(U_PS.DOG_ID, 0)	= @DOG_ID		AND
																					U_PS.DEL_FLAG			IS NULL
																		)			
													OR
													ISNULL(DOG_ID, 0)	= @DOG_ID
												)							AND
												DEL_FLAG	IS NULL			AND
												VALK		= @KVALK_OLD	
									)			
							BEGIN
								SELECT	@RC	= 910
								GOTO	EXIT_DOGOVOR_UPDATE
							END
	
						--
						--	11. По таблице U_SPR_VAL_OPR
						--
						IF	EXISTS	(
										SELECT	*
										FROM	U_SPR_VAL_OPR (NOLOCK)
										WHERE	RESIDENT_ID	= @RESIDENT_ID	AND
												(
													ISNULL(PS_ID, 0) IN (
																			SELECT	PS_ID 
																			FROM	U_PS (NOLOCK)
																			WHERE 	U_PS.RESIDENT_ID		= @RESIDENT_ID	AND
																					ISNULL(U_PS.DOG_ID, 0)	= @DOG_ID		AND
																					U_PS.DEL_FLAG			IS NULL
																		)			
													--OR
													--ISNULL(DOG_ID, 0)	= @DOG_ID
												)							AND
												DEL_FLAG	IS NULL			AND
												VALK		= @KVALK_OLD	
									)			
							BEGIN
								SELECT	@RC	= 911
								GOTO	EXIT_DOGOVOR_UPDATE
							END
	
						--
						--	12. По таблице U_SPR_CONFIRM
						--
						IF	EXISTS	(
										SELECT	*
										FROM	U_SPR_CONFIRM (NOLOCK)
										WHERE	RESIDENT_ID	= @RESIDENT_ID	AND
												(
													ISNULL(PS_ID, 0) IN (
																			SELECT	PS_ID 
																			FROM	U_PS (NOLOCK)
																			WHERE 	U_PS.RESIDENT_ID		= @RESIDENT_ID	AND
																					ISNULL(U_PS.DOG_ID, 0)	= @DOG_ID		AND
																					U_PS.DEL_FLAG			IS NULL
																		)			
													--OR
													--ISNULL(DOG_ID, 0)	= @DOG_ID
												)							AND
												DEL_FLAG	IS NULL			AND
												VALK		= @KVALK_OLD	
									)			
							BEGIN
								SELECT	@RC	= 912
								GOTO	EXIT_DOGOVOR_UPDATE
							END
	
						--
						--	13. По таблице U_SPR_RUB
						--
						IF	EXISTS	(
										SELECT	*
										FROM	U_SPR_RUB (NOLOCK)
										WHERE	RESIDENT_ID	= @RESIDENT_ID	AND
												PS_ID		IN (
																	SELECT	PS_ID 
																	FROM	U_PS (NOLOCK)
																	WHERE 	U_PS.RESIDENT_ID		= @RESIDENT_ID	AND
																			ISNULL(U_PS.DOG_ID, 0)	= @DOG_ID		AND
																			U_PS.DEL_FLAG			IS NULL
																)			AND
												DEL_FLAG	IS NULL			AND
												VALK		= @KVALK_OLD	
									)			
							BEGIN
								SELECT	@RC	= 913
								GOTO	EXIT_DOGOVOR_UPDATE
							END
	
						--
						--	14. По таблице U_PS (6.2)
						--
						IF	EXISTS	(
										SELECT	*
										FROM	U_PS (NOLOCK)
										WHERE	RESIDENT_ID	= @RESIDENT_ID	AND
												DOG_ID		= @DOG_ID		AND
												DEL_FLAG	IS NULL			AND
												F2_R62_G1	= @KVALK_OLD	
									)			
							BEGIN
								SELECT	@RC	= 914
								GOTO	EXIT_DOGOVOR_UPDATE
							END
	
					END	-- @PRIZ_CHECK_KVALK = 1
			END	-- ISNULL(@KVALK, '')	<> ISNULL(@KVALK_OLD, '')
		END	-- @PRIZ_LOAD = 0


	--
	--	@DOG_ID_BANK, @DOG_NPP_BANK, @UNI_ID, дата загрузки @D_LOAD и источник @SRC_LOAD (если не переданы на вход, то берём значения из записи)
	--
	IF @DOG_ID_BANK	IS	NULL
		SELECT	@DOG_ID_BANK	= DOG_ID_BANK
		FROM	U_DOGOVOR (NOLOCK)
		WHERE	RESIDENT_ID	= 	@RESIDENT_ID	AND
				DOG_ID		=	@DOG_ID			AND
				DOG_NPP		=	@DOG_NPP		AND
				DEL_FLAG	IS NULL		
	IF @DOG_NPP_BANK	IS	NULL
		SELECT	@DOG_NPP_BANK	= DOG_NPP_BANK
		FROM	U_DOGOVOR (NOLOCK)
		WHERE	RESIDENT_ID	= 	@RESIDENT_ID	AND
				DOG_ID		=	@DOG_ID			AND
				DOG_NPP		=	@DOG_NPP		AND
				DEL_FLAG	IS NULL		
	IF @UNI_ID	IS	NULL 
		SELECT	@UNI_ID		= UNI_ID
		FROM	U_DOGOVOR (NOLOCK)
		WHERE	RESIDENT_ID	= 	@RESIDENT_ID	AND
				DOG_ID		=	@DOG_ID			AND
				DOG_NPP		=	@DOG_NPP		AND
				DEL_FLAG	IS NULL		
	IF @D_LOAD	IS	NULL 
		SELECT	@D_LOAD		= D_LOAD
		FROM	U_DOGOVOR (NOLOCK)
		WHERE	RESIDENT_ID	= 	@RESIDENT_ID	AND
				DOG_ID		=	@DOG_ID			AND
				DOG_NPP		=	@DOG_NPP		AND
				DEL_FLAG	IS NULL		
	IF @SRC_LOAD	IS	NULL 
		SELECT	@SRC_LOAD	= SRC_LOAD
		FROM	U_DOGOVOR (NOLOCK)
		WHERE	RESIDENT_ID	= 	@RESIDENT_ID	AND
				DOG_ID		=	@DOG_ID			AND
				DOG_NPP		=	@DOG_NPP		AND
				DEL_FLAG	IS NULL		

	
	--	--------------------------------------------------------
	--	Контроль дублирования Договора
	--	Проверка на уникальность: Номер контракта + Дата контракта + Номер доп.соглашения + Дата доп.соглашения
	--	в пределах Участника ВЭД и Иностранного контрагента
	--	При приёме (@PRIZ_LOAD = 1) НЕ выполняется!
	--	--------------------------------------------------------
	IF	@PRIZ_LOAD = 0
		BEGIN
			IF	UPPER(RTRIM(LTRIM(@N_KONTR)))	<> 'Б/Н'	AND
				UPPER(RTRIM(LTRIM(@N_KONTR)))	<> 'Б\Н'	
				BEGIN
					IF EXISTS	(	
									SELECT	*
									FROM	U_DOGOVOR (NOLOCK)
									WHERE	RESIDENT_ID							= @RESIDENT_ID					AND
											PARTNER_ID							= @PARTNER_ID					AND
											NOT (DOG_ID = @DOG_ID AND DOG_NPP	= @DOG_NPP)						AND
											UPPER(RTRIM(LTRIM(N_KONTR)))		= UPPER(RTRIM(LTRIM(@N_KONTR)))	AND 
											D_KONTR								= @D_KONTR						AND
											UPPER(RTRIM(LTRIM(ISNULL(N_DOPSOGL, ''))))				= UPPER(RTRIM(LTRIM(ISNULL(@N_DOPSOGL, ''))))				AND 	
											ISNULL(D_DOPSOGL, CONVERT( SMALLDATETIME, '19370101'))	= ISNULL(@D_DOPSOGL, CONVERT( SMALLDATETIME, '19370101'))	AND
											DEL_FLAG							IS NULL	
								)
						BEGIN
							SELECT	@RC	= 30
							GOTO	EXIT_DOGOVOR_UPDATE
						END
				END
		END
	
	--
	--	Проверка кода валюты контракта
	--
	IF NOT EXISTS 	(	
						SELECT	*
						FROM	VALW (NOLOCK)
						WHERE	KOD	= @KVALK
					)			
		BEGIN
			SELECT	@RC		= 40
			GOTO	EXIT_DOGOVOR_UPDATE
		END

	--
	--	Проверка вид Договора 
	--
	IF NOT EXISTS	(
						SELECT	* 
						FROM	VID_KONTR (NOLOCK)
						WHERE	KOD	= @VID_KONTR
					)
		BEGIN
			SELECT	@RC			= 50
			GOTO	EXIT_DOGOVOR_UPDATE
		END

	--
	--	Проверка кода вида работ, услуг, передачи информации, результатов интеллектуальной деятельности, операций неторгового характера отсутствует в справочнике
	--
	IF	@VID_USLUG	IS NOT NULL
		BEGIN
			IF	NOT	EXISTS (
								SELECT	*
								FROM	VID_USLUG (NOLOCK)
								WHERE	KOD	= @VID_USLUG
							)

				BEGIN
					SELECT	@RC = 90
					GOTO	EXIT_DOGOVOR_UPDATE
				END
		END


	--
	--	Проверка кода срока погашения суммы кредитного договора (раздел 3 графа 10 форма 2)
	--
	IF	@F2_R3_G10	IS NOT NULL
		BEGIN
			IF	NOT	EXISTS (
								SELECT	*
								FROM	POGASHEN (NOLOCK)
								WHERE	KOD	= @F2_R3_G10
							)
				BEGIN
					SELECT	@RC = 350
					GOTO	EXIT_DOGOVOR_UPDATE
				END
		END

--	Валютная оговорка (символ X)
	IF	@F1_R3_G8	IS NOT NULL
		BEGIN
			IF	@F1_R3_G8	<> 'X'
				BEGIN
					SELECT	@RC = 400
					GOTO	EXIT_DOGOVOR_UPDATE
				END
		END

	--	ввоз\вывоз товаров 16,17,19 разделов Товарной номенклатуры ВЭД (символ X)
	IF	@F1_R3_G9	IS NOT NULL
		BEGIN
			IF	@F1_R3_G9	<> 'X'
				BEGIN
					SELECT	@RC = 410
					GOTO	EXIT_DOGOVOR_UPDATE
				END
		END

	--	Проведение строительных работ и подрядных работ за пределами РФ (символ X)
	IF	@F1_R3_G10	IS NOT NULL
		BEGIN
			IF	@F1_R3_G10	<> 'X'
				BEGIN
					SELECT	@RC = 420
					GOTO	EXIT_DOGOVOR_UPDATE
				END
		END

	--	Валютная оговорка (символ X)
	IF	@F2_R3_G9	IS NOT NULL
		BEGIN
			IF	@F2_R3_G9	<> 'X'
				BEGIN
					SELECT	@RC = 430
					GOTO	EXIT_DOGOVOR_UPDATE
				END
		END

	--	----------------------------------------------------------
	--	Контроль даты контракта 
	--	----------------------------------------------------------
	IF	@D_KONTR	> CONVERT( SMALLDATETIME, GETDATE() ) 
		BEGIN
			SELECT	@RC = 540
			GOTO   	EXIT_DOGOVOR_UPDATE	
		END

	--	------------------------------------------------------------------------------------------------
	--	Контроль, что дата окончания исполнения обязательств больше или равна дате подписания контракта
	--	------------------------------------------------------------------------------------------------
	IF	@D_END	IS NOT NULL
		BEGIN
			IF	@D_END	< @D_KONTR  	
				BEGIN
					SELECT	@RC = 550
					GOTO   	EXIT_DOGOVOR_UPDATE	
				END
		END

	--
	--	Обновление информации
	--
	BEGIN	TRANSACTION

	UPDATE	U_DOGOVOR
	SET 	VID_KONTR		=	@VID_KONTR,
			PARTNER_ID		=	@PARTNER_ID,
			N_KONTR			=	@N_KONTR,
			D_KONTR			=	@D_KONTR,
			N_DOPSOGL		=	@N_DOPSOGL,
			D_DOPSOGL		=	@D_DOPSOGL,
			KVALK			=	@KVALK,
			SUMK			=	@SUMK,
			D_BEGIN			=	@D_BEGIN,
			D_END			=	@D_END,
			R3_G7			=	@R3_G7,
			F1_R3_G8		=	@F1_R3_G8,
			F1_R3_G9		=	@F1_R3_G9,
			F1_R3_G10		=	@F1_R3_G10,
			F2_R3_G8		=	@F2_R3_G8,
			F2_R3_G9		=	@F2_R3_G9,
			F2_R3_G10		=	@F2_R3_G10,
			VID_USLUG		=	@VID_USLUG,
			KOD_CONTROL		=	@KOD_CONTROL,
			KONTR_SROK		=	@KONTR_SROK,
			PR_NOT_REQ_PS	=	@PR_NOT_REQ_PS,
			DESCR_VID_KONTR	=	@DESCR_VID_KONTR,
			PARTNER_ID2		=	@PARTNER_ID2,
			PRIM			=	@PRIM,
			PRIM_PREDMET	=	@PRIM_PREDMET,
			PRIM_FIO_OTV	=	@PRIM_FIO_OTV,
			BANK_ID			=	@BANK_ID,
			UNI_ID			=	@UNI_ID,
			DOG_ID_BANK		=	@DOG_ID_BANK,
			DOG_NPP_BANK	=	@DOG_NPP_BANK,
			D_LOAD			=	@D_LOAD,
			SRC_LOAD		=	@SRC_LOAD,
			DKOR			=	CONVERT(SMALLDATETIME, GETDATE())
	WHERE	RESIDENT_ID		= @RESIDENT_ID 	AND
			DOG_ID 			= @DOG_ID   	AND		
			DOG_NPP			= @DOG_NPP   	AND		
			DEL_FLAG 		IS NULL 
	IF	@@ERROR <> 0
		BEGIN	
			ROLLBACK TRANSACTION 
			SELECT	@RC		= 10
			GOTO	EXIT_DOGOVOR_UPDATE
		END
	
	--	-------------------------------------------------------------------------------------
	--	Во всех записях по Договору проставляем одинаковые:
	--	иностранного контрагента 				- PARTNER_ID; 
	--	номер договора							- N_KONTR;  
	--	дата договора							- D_KONTR;
	--	вид контракта							- VID_KONTR;
	--	описание для вида "Прочее"				- DESCR_VID_KONTR;
	--	признак Договор под особым контролем	- KOD_CONTROL
	--	признак Договор не требует ПС			- PR_NOT_REQ_PS
	--	-------------------------------------------------------------------------------------
	UPDATE	U_DOGOVOR
	SET 	PARTNER_ID		=	@PARTNER_ID,
			N_KONTR			=	@N_KONTR,
			D_KONTR			=	@D_KONTR,
			VID_KONTR		=	@VID_KONTR,
			DESCR_VID_KONTR	=	@DESCR_VID_KONTR,
			KOD_CONTROL		=	@KOD_CONTROL,
			PR_NOT_REQ_PS	=	@PR_NOT_REQ_PS,
			DKOR			=	CONVERT(SMALLDATETIME, GETDATE())
	WHERE	RESIDENT_ID		=	@RESIDENT_ID 	AND
			DOG_ID 			=	@DOG_ID   		AND		
			DOG_NPP 		<>	@DOG_NPP   		AND								
			(
				PARTNER_ID									<>	@PARTNER_ID									OR
				N_KONTR										<>	@N_KONTR									OR
				D_KONTR										<>	@D_KONTR									OR	
				RTRIM(LTRIM(VID_KONTR))						<>	RTRIM(LTRIM(@VID_KONTR))					OR	
				RTRIM(LTRIM(ISNULL(DESCR_VID_KONTR, '')))	<>	RTRIM(LTRIM(ISNULL(@DESCR_VID_KONTR, '')))	OR			
				RTRIM(LTRIM(ISNULL(KOD_CONTROL, '')))		<>	RTRIM(LTRIM(ISNULL(@KOD_CONTROL, '')))		OR					
				RTRIM(LTRIM(ISNULL(PR_NOT_REQ_PS, '')))		<>	RTRIM(LTRIM(ISNULL(@PR_NOT_REQ_PS, '')))													
			)									AND
			DEL_FLAG 	IS	NULL 

	IF	@@ERROR <> 0
		BEGIN	
			ROLLBACK TRANSACTION 
			SELECT	@RC	= 23
			GOTO	EXIT_DOGOVOR_UPDATE
		END
	
	--
	--	Добавление события в журнал событий
	--
	EXECUTE	@RETURN_STATUS	= U_EVENT_INSERT
			@EVENT_NAME		= 'EDIT_DOG',
			@USER_ID		= @USER_ID,
			@BANK_ID		= @BANK_ID,
			@RESIDENT_ID	= @RESIDENT_ID,
			@PS_ID			= @DOG_ID,
			@NPP			= @DOG_NPP
			
	IF	@RETURN_STATUS <> 0
		ROLLBACK TRANSACTION
	ELSE 
		COMMIT TRANSACTION 

--
--	Возврат кода завершения
--
EXIT_DOGOVOR_UPDATE:
	SELECT	RC = @RC + @RETURN_STATUS
GO

GRANT  EXECUTE  ON [dbo].[U_DOGOVOR_UPDATE]  TO [OPERS]
GO

--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[U_DOGOVOR_LOAD]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[U_DOGOVOR_LOAD]
GO

CREATE PROCEDURE [dbo].[U_DOGOVOR_LOAD]
--	---------------------------------------------------------
--	Приём Договора
--	(для версии АСВКБ 7.14 и ранее)
--	---------------------------------------------------------
--
--	Возвращает: 
--	1. RC 				
--	   RC =	0	- нормальное завершение			
--			2	- ПС не найден	
--			10	- Ошибка при приёме Договора
--			11	- Договор не найден в БД (приём-обновление)
--			12	- Ошибка при изменении информации о Договоре в ПС (приём-обновление)
--			20 	- Ошибка при вычислении идентификатора Договора (приём-добавление)
--			30	- Дублирование Договора
--			40	- Код валюты контракта отсутствует в справочнике
--			50	- вид Договора отсутствует в справочнике
-- 			90	- Код вида работ, услуг, передачи информации, результатов интеллектуальной деятельности, операций неторгового характера отсутствует в справочнике
--			100	- Ошибка при регистрации события
-- 			140	- Не указан вид Договора
-- 			150	- Не указан Иностранный контрагент
-- 			160	- Не указан номер Договора
-- 			170	- Не указана дата Договора
-- 			180	- Не указан код валюты цены Договора
-- 			350	- Код срока погашения (раздел 3 графа 10 форма 2) отсутствует в справочнике 
-- 			400	- Неверный символ в разделе 3 графа 8 (форма 1)
-- 			410	- Неверный символ в разделе 3 графа 9 (форма 1)
-- 			420	- Неверный символ в разделе 3 графа 10 (форма 1)
-- 			430	- Неверный символ в разделе 3 графа 9 (форма 2)
-- 			540	- Дата Договора больше текущей даты
-- 			550	- Дата окончания исполнения обязательств меньше даты подписания Договора 
--	2.FLAG_LOAD = 	1 - приём-добавление,
--					2 - приём-обновление
--	------------------------------------------------------------------------------------------------------------------------
--	(Модификация	в версии 2.1.0)
--	------------------------------------------------------------------------------------------------------------------------
(
	@RESIDENT_ID	AS INTEGER,
	@PS__N_PS		AS CHAR(22),
	@PS__UNI_ID		AS UNIQUEIDENTIFIER,
	@UNI_ID			AS UNIQUEIDENTIFIER,
	@N_DOPSOGL		AS VARCHAR(100), 
	@D_DOPSOGL		AS SMALLDATETIME,  
	@KVALK			AS CHAR(3), 
	@SUMK			AS DECIMAL(16, 2), 
	@D_END			AS DATETIME,  
	@R3_G7			AS DECIMAL(16, 2), 
	@F1_R3_G8		AS CHAR(1), 
	@F1_R3_G9		AS CHAR(1),
	@F1_R3_G10		AS CHAR(1),
	@F2_R3_G8		AS DECIMAL(16, 2),
	@F2_R3_G9		AS CHAR(1), 
	@F2_R3_G10		AS CHAR(1), 
	@USER_ID		AS VARCHAR(30),
	@FLAG_LOAD		AS INTEGER OUTPUT,
	@RC				AS INTEGER OUTPUT
)
 AS
	SET NOCOUNT ON

	--
	--	Рабочие переменные
	--
	DECLARE	@RC1			AS INTEGER,
			@RC2			AS INTEGER,
			@PS_ID_OLD		AS INTEGER,
			@DOG_ID_OLD		AS INTEGER,
			@DOG_NPP_OLD	AS INTEGER,
			@D_TODAY		AS SMALLDATETIME,
			-- заголовок Договора
			@VID_KONTR		AS CHAR (1), 
			@PARTNER_ID		AS INTEGER,
			@N_KONTR		AS VARCHAR (100), 
			@D_KONTR		AS SMALLDATETIME,  
			-- поля для перезаписи при приёме-обновлении
			@D_BEGIN		AS SMALLDATETIME,  
			@VID_USLUG  	AS VARCHAR (7),
			@KOD_CONTROL  	AS VARCHAR (4),
			@PARTNER_ID2	AS INTEGER,
			@PRIM			AS VARCHAR (2000),
			@PRIM_PREDMET	AS VARCHAR (200),
			@PRIM_FIO_OTV	AS VARCHAR (100),
			@BANK_ID		AS INTEGER	

	--
	--	Начальные значения
	--
	SELECT	@FLAG_LOAD		= 1
	SELECT	@D_TODAY		= CONVERT(SMALLDATETIME,GETDATE())
	SELECT	@RC1 			= 0
	SELECT	@RC2 			= 0
	SELECT	@DOG_ID_OLD		= NULL
	SELECT	@PS_ID_OLD		= NULL
	SELECT	@DOG_NPP_OLD	= NULL
	-- заголовок Договора
	SELECT	@VID_KONTR		= NULL
	SELECT	@PARTNER_ID		= NULL
	SELECT	@N_KONTR		= NULL
	SELECT	@D_KONTR		= NULL
	-- поля для перезаписи при приёме-обновлении
	SELECT	@D_BEGIN		= NULL
	SELECT	@VID_USLUG		= NULL
	SELECT	@KOD_CONTROL	= NULL
	SELECT	@PARTNER_ID2	= NULL
	SELECT	@PRIM			= NULL
	SELECT	@PRIM_PREDMET	= NULL
	SELECT	@PRIM_FIO_OTV	= NULL
	SELECT	@BANK_ID		= NULL

	--
	--	1. Поиск ПС по UNI_ID
	--
	SELECT	@PS_ID_OLD		= PS_ID,
			@DOG_ID_OLD		= DOG_ID,
			@DOG_NPP_OLD	= DOG_NPP
	FROM	U_PS (NOLOCK)
	WHERE	RESIDENT_ID		= @RESIDENT_ID	AND
			UNI_ID			= @PS__UNI_ID	AND
			DEL_FLAG		IS NULL 
			
	IF @PS_ID_OLD IS NULL 
	-- ПС НЕ найден по UNI_ID 
	BEGIN
		--
		--	2. Поиск ПС по Номеру ПС
		--
		SELECT	@PS_ID_OLD		= PS_ID,
				@DOG_ID_OLD		= DOG_ID,
				@DOG_NPP_OLD	= DOG_NPP
		FROM	U_PS (NOLOCK)
		WHERE	RESIDENT_ID		= @RESIDENT_ID	AND
				BANK_ID			= @BANK_ID		AND
				N_PS			= @PS__N_PS		AND
				DEL_FLAG		IS NULL 
	
		IF @PS_ID_OLD IS NULL OR @DOG_ID_OLD IS NULL OR @DOG_NPP_OLD IS NULL
		-- ПС НЕ найден по Номеру ПС -> завершаем приём 
		BEGIN
			SELECT	@RC = 2
			GOTO	EXIT_DOGOVOR_LOAD
		END
	END	

	--
	--	3. Поиск Договора по DOG_ID и DOG_NPP из ПС для получения заголовка Договора
	--
	SELECT	@VID_KONTR	= VID_KONTR,
			@PARTNER_ID	= PARTNER_ID,
			@N_KONTR	= N_KONTR,
			@D_KONTR	= D_KONTR
	FROM	U_DOGOVOR (NOLOCK)
	WHERE	RESIDENT_ID	= @RESIDENT_ID	AND
			DOG_ID		= @DOG_ID_OLD	AND
			DOG_NPP		= @DOG_NPP_OLD	AND
			DEL_FLAG	IS NULL 

	--
	--	4. Если @N_KONTR = @N_DOPSOGL -> обнуляем @N_DOPSOGL и @D_DOPSOGL, считаем, что это первая запись о Договоре (это НЕ доп.соглашение)
	--
	--IF	UPPER(LTRIM(RTRIM(@N_KONTR)))	= UPPER(LTRIM(RTRIM(@N_DOPSOGL)))
	--	BEGIN
	--		SELECT	@N_DOPSOGL	= NULL
	--		SELECT	@D_DOPSOGL	= NULL
	--	END

	--
	--	5. Поиск Договора по UNI_ID в рамках DOG_ID
	--
		SELECT	@DOG_NPP_OLD	= NULL

		SELECT	@DOG_NPP_OLD	= DOG_NPP,	
				@D_BEGIN		= D_BEGIN,
				@VID_USLUG		= VID_USLUG,
				@KOD_CONTROL	= KOD_CONTROL,
				@PARTNER_ID2	= PARTNER_ID2,
				@PRIM			= PRIM,
				@PRIM_PREDMET	= PRIM_PREDMET,
				@PRIM_FIO_OTV	= PRIM_FIO_OTV,
				@BANK_ID		= BANK_ID
		FROM	U_DOGOVOR (NOLOCK)
		WHERE	RESIDENT_ID		= @RESIDENT_ID	AND
				UNI_ID			= @UNI_ID		AND
				DOG_ID			= @DOG_ID_OLD	AND
				DEL_FLAG		IS NULL 
		IF	@DOG_NPP_OLD IS NOT NULL
		-- Договор найден по UNI_ID -> приём-обновление
			SELECT	@FLAG_LOAD = 2
		ELSE
		BEGIN
			--
			--	6. Поиск Договора по ключевым реквизитам в рамках DOG_ID
			--
			SELECT	@DOG_NPP_OLD	= DOG_NPP,
					@D_BEGIN		= D_BEGIN,
					@VID_USLUG		= VID_USLUG,
					@KOD_CONTROL	= KOD_CONTROL,
					@PARTNER_ID2	= PARTNER_ID2,
					@PRIM			= PRIM,
					@PRIM_PREDMET	= PRIM_PREDMET,
					@PRIM_FIO_OTV	= PRIM_FIO_OTV,
					@BANK_ID		= BANK_ID
			FROM	U_DOGOVOR (NOLOCK)
			WHERE	RESIDENT_ID				= @RESIDENT_ID																				AND
					DOG_ID					= @DOG_ID_OLD																				AND
					N_KONTR					= @N_KONTR																					AND
					D_KONTR					= @D_KONTR																					AND
					ISNULL(N_DOPSOGL, '')	= ISNULL(@N_DOPSOGL, '')																	AND
					ISNULL(D_DOPSOGL, CONVERT( SMALLDATETIME, '19370101')) = ISNULL(@D_DOPSOGL, CONVERT( SMALLDATETIME, '19370101'))	AND
					KVALK					= @KVALK																					AND
					SUMK					= @SUMK																						AND
					ISNULL(D_END, CONVERT(DATETIME, '19370101')) = ISNULL(@D_END, CONVERT(DATETIME, '19370101'))						AND
					ISNULL(R3_G7, 0)		= ISNULL(@R3_G7, 0)																			AND
					ISNULL(F1_R3_G8, '')	= ISNULL(@F1_R3_G8, '')																		AND
					ISNULL(F1_R3_G9, '')	= ISNULL(@F1_R3_G9, '')																		AND
					ISNULL(F1_R3_G10, '')	= ISNULL(@F1_R3_G10, '')																	AND
					ISNULL(F2_R3_G8, 0)		= ISNULL(@F2_R3_G8, 0)																		AND
					ISNULL(F2_R3_G9, '')	= ISNULL(@F2_R3_G9, '')																		AND
					ISNULL(F2_R3_G10, '')	= ISNULL(@F2_R3_G10, '')																	AND
					DEL_FLAG				IS NULL 																					AND
					UNI_ID					IS NULL
			IF	@DOG_NPP_OLD IS NOT NULL
			-- Договор найден по ключевым реквизитам -> приём-обновление
				SELECT	@FLAG_LOAD = 2
		END
	
	IF	@FLAG_LOAD = 2 
	-- приём-обновление
	BEGIN
		EXECUTE U_DOGOVOR_UPDATE
				@RESIDENT_ID	= @RESIDENT_ID,
				@DOG_ID			= @DOG_ID_OLD,
				@DOG_NPP		= @DOG_NPP_OLD,
				@VID_KONTR		= @VID_KONTR,
				@PARTNER_ID		= @PARTNER_ID,
				@N_KONTR		= @N_KONTR, 
				@D_KONTR		= @D_KONTR,
				@N_DOPSOGL		= @N_DOPSOGL, 
				@D_DOPSOGL		= @D_DOPSOGL,
				@KVALK			= @KVALK, 
				@SUMK			= @SUMK,  
				@D_END			= @D_END, 
				@R3_G7			= @R3_G7,  
				@F1_R3_G8		= @F1_R3_G8, 
				@F1_R3_G9		= @F1_R3_G9, 
				@F1_R3_G10		= @F1_R3_G10, 
				@F2_R3_G8		= @F2_R3_G8, 
				@F2_R3_G9		= @F2_R3_G9, 
				@F2_R3_G10		= @F2_R3_G10,
				@D_BEGIN		= @D_BEGIN,  
				@VID_USLUG  	= @VID_USLUG,
				@KOD_CONTROL  	= @KOD_CONTROL,
				@PARTNER_ID2	= @PARTNER_ID2,
				@PRIM			= @PRIM,
				@PRIM_PREDMET	= @PRIM_PREDMET,
				@PRIM_FIO_OTV	= @PRIM_FIO_OTV,
				@BANK_ID		= @BANK_ID,
	 			@USER_ID		= 'SYSTEM',
				@UNI_ID			= @UNI_ID,
				@D_LOAD			= @D_TODAY,
				@SRC_LOAD		= 'АСВКБ',
				@RC				= @RC1 OUTPUT 

			IF	@RC1 > 0					
				BEGIN
					SELECT	@RC = @RC1
					GOTO	EXIT_DOGOVOR_LOAD
				END	
	END

	IF	@FLAG_LOAD = 1 
	-- приём-добавление
	BEGIN
		EXECUTE U_DOGOVOR_INSERT
				@RESIDENT_ID	= @RESIDENT_ID,
				@VID_KONTR		= @VID_KONTR,
				@PARTNER_ID		= @PARTNER_ID,
				@N_KONTR		= @N_KONTR, 
				@D_KONTR		= @D_KONTR,
				@N_DOPSOGL		= @N_DOPSOGL, 
				@D_DOPSOGL		= @D_DOPSOGL,
				@KVALK			= @KVALK, 
				@SUMK			= @SUMK,  
				@D_END			= @D_END,  
				@R3_G7			= @R3_G7,  
				@F1_R3_G8		= @F1_R3_G8,  
				@F1_R3_G9		= @F1_R3_G9,  
				@F1_R3_G10		= @F1_R3_G10,  
				@F2_R3_G8		= @F2_R3_G8,  
				@F2_R3_G9		= @F2_R3_G9,  
				@F2_R3_G10		= @F2_R3_G10,  
				@D_BEGIN		= @D_BEGIN,  
				@VID_USLUG  	= @VID_USLUG,
				@KOD_CONTROL  	= @KOD_CONTROL,
				@PARTNER_ID2	= @PARTNER_ID2,
				@PRIM			= @PRIM,
				@PRIM_PREDMET	= @PRIM_PREDMET,
				@PRIM_FIO_OTV	= @PRIM_FIO_OTV,
				@BANK_ID		= @BANK_ID,
				@USER_ID		= 'SYSTEM',
				@UNI_ID			= @UNI_ID,
				@D_LOAD			= @D_TODAY,
				@SRC_LOAD		= 'АСВКБ',
				@DOG_ID			= @DOG_ID_OLD OUTPUT,
				@DOG_NPP		= @RC1 OUTPUT, 
				@RC				= @RC2 OUTPUT 

			IF	NOT ( @RC2 = 0 AND @RC1 > 0 )	
				BEGIN
					SELECT	@RC = @RC2
					GOTO	EXIT_DOGOVOR_LOAD
				END
	END		

--
--	Возврат кода завершения и признака приёма
--
EXIT_DOGOVOR_LOAD:
	SELECT	RC = @RC, FLAG_LOAD = @FLAG_LOAD
GO

GRANT  EXECUTE  ON [dbo].[U_DOGOVOR_LOAD]  TO [OPERS]
GO

--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[U_DOGOVOR_LOAD_800]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[U_DOGOVOR_LOAD_800]
GO

CREATE PROCEDURE [dbo].[U_DOGOVOR_LOAD_800]
--	------------------------------------------------------------------------------------------------------------------------
--	Приём Договора	(для версии АСВКБ 8.0.0 и более поздних)
--	------------------------------------------------------------------------------------------------------------------------
--
--	Возвращает: 
--	1. RC 				
--	   RC =	0	- нормальное завершение			
--			10	- Ошибка при приёме Договора
--			11	- Договор не найден в БД (приём-обновление)
--			20 	- Ошибка при вычислении идентификатора Договора (приём-добавление)
--			23  - Ошибка при коррекции заголовочной части Договора
--			30	- Дублирование Договора
--			40	- Код валюты Договора отсутствует в справочнике
--			50	- вид Договора отсутствует в справочнике
-- 			90	- Код вида работ, услуг, передачи информации, результатов интеллектуальной деятельности, операций неторгового характера отсутствует в справочнике
--			91	- Код страны Иностранного контрагента отсутствует в справочнике
--			92	- Ошибка при вычислении идентификатора Иностранного контрагента
--			93	- Ошибка при добавлении Иностранного контрагента
--			94	- Код страны 2-ого Иностранного контрагента отсутствует в справочнике
--			100	- Ошибка при регистрации события
-- 			140	- Не указан вид Договора
-- 			150	- Не указан Иностранный контрагент
-- 			160	- Не указан номер Договора
-- 			170	- Не указана дата Договора
-- 			180	- Не указан код валюты цены Договора
-- 			350	- Код срока погашения (раздел 3 графа 10 форма 2 ПС) отсутствует в справочнике 
-- 			400	- Неверный символ в разделе 3 графа 8 (форма 1 ПС)
-- 			410	- Неверный символ в разделе 3 графа 9 (форма 1 ПС)
-- 			420	- Неверный символ в разделе 3 графа 10 (форма 1 ПС)
-- 			430	- Неверный символ в разделе 3 графа 9 (форма 2 ПС)
-- 			540	- Дата Договора больше текущей даты
-- 			550	- Дата окончания исполнения обязательств меньше даты подписания Договора 
--	2.FLAG_LOAD = 	1 - приём-добавление,
--					2 - приём-обновление
--	------------------------------------------------------------------------------------------------------------------------
--	(Модификация	в версии 2.1.0)
--	------------------------------------------------------------------------------------------------------------------------
(
	@RESIDENT_ID		AS INTEGER,
	@BANK_ID			AS INTEGER,
	@IN_PART__NAMEP		AS VARCHAR (300),
	@IN_PART__KODS		AS CHAR (3),
	@IN_PART__INN		AS VARCHAR (12),
	@IN_PART__ADRES		AS VARCHAR (300),
	@IN_PART__TYPE		AS CHAR (1),
	@IN_PART__NAMEP2	AS VARCHAR (300),
	@IN_PART__KODS2		AS CHAR (3),
	@IN_PART__INN2		AS VARCHAR (12),
	@IN_PART__ADRES2	AS VARCHAR (300),
	@IN_PART__TYPE2		AS CHAR (1),
	@UNI_ID				AS UNIQUEIDENTIFIER,
	@DOG_ID_BANK		AS INTEGER,
	@DOG_NPP_BANK		AS INTEGER,
	@VID_KONTR			AS CHAR (1), 
	@N_KONTR			AS VARCHAR (100), 
	@D_KONTR			AS SMALLDATETIME,  
	@N_DOPSOGL			AS VARCHAR(100), 
	@D_DOPSOGL			AS SMALLDATETIME,  
	@KVALK				AS CHAR(3), 
	@SUMK				AS DECIMAL(16, 2), 
	@D_BEGIN			AS SMALLDATETIME,  
	@D_END				AS DATETIME,  
	@R3_G7				AS DECIMAL(16, 2), 
	@F1_R3_G8			AS CHAR(1), 
	@F1_R3_G9			AS CHAR(1),
	@F1_R3_G10			AS CHAR(1),
	@F2_R3_G8			AS DECIMAL(16, 2),
	@F2_R3_G9			AS CHAR(1), 
	@F2_R3_G10			AS CHAR(1), 
	@VID_USLUG			AS VARCHAR (7),
	@KOD_CONTROL		AS VARCHAR (4),
	@PR_NOT_REQ_PS		AS CHAR (1),
	@PRIM				AS VARCHAR (2000),
	@PRIM_PREDMET		AS VARCHAR (200),
	@PRIM_FIO_OTV		AS VARCHAR (100),
	@KONTR_SROK  		AS CHAR (4),
	@DESCR_VID_KONTR	AS VARCHAR (500),
	@USER_ID			AS VARCHAR(30),
	@FLAG_LOAD			AS INTEGER OUTPUT,
	@RC					AS INTEGER OUTPUT
)
 AS
	SET NOCOUNT ON

	--
	--	Рабочие переменные
	--
	DECLARE	@RC1			AS INTEGER,
			@RC2			AS INTEGER,
			@DOG_ID_OLD		AS INTEGER,
			@DOG_NPP_OLD	AS INTEGER,
			@D_TODAY		AS SMALLDATETIME,
			@PARTNER_ID		AS INTEGER,
			@PARTNER_ID2	AS INTEGER

	--
	--	Начальные значения
	--
	SELECT	@FLAG_LOAD		= 1
	SELECT	@D_TODAY		= CONVERT(SMALLDATETIME,GETDATE())
	SELECT	@RC1 			= 0
	SELECT	@RC2 			= 0
	SELECT	@DOG_ID_OLD		= NULL
	SELECT	@DOG_NPP_OLD	= NULL
	SELECT	@PARTNER_ID		= NULL
	SELECT	@PARTNER_ID2	= NULL

	--
	--	1. Поиск Иностранного контрагента 1 по переданным реквизитам
	--	
	SELECT	@PARTNER_ID					= PARTNER_ID 	
	FROM	U_IN_PART (NOLOCK)
	WHERE	KODS									= @IN_PART__KODS										AND
			UPPER(LTRIM(RTRIM(NAMEP)))				= UPPER(LTRIM(RTRIM(@IN_PART__NAMEP)))					AND
			ISNULL(INN, '')							= ISNULL(@IN_PART__INN, '')								AND
			UPPER(LTRIM(RTRIM(ISNULL(ADRES, ''))))	= UPPER(LTRIM(RTRIM(ISNULL(@IN_PART__ADRES, ''))))		AND
			ISNULL(TYPE, '')						= ISNULL(@IN_PART__TYPE, '')							AND
			DEL_FLAG								IS NULL
	
	IF ISNULL(@PARTNER_ID, 0) = 0 
	-- Иностранный контрагент 1 не найден - будем добалять
	BEGIN
		--
		--	Проверка кода страны
		--
		IF NOT EXISTS	(	SELECT	*
							FROM	OKSMT (NOLOCK)
							WHERE	KOD	=  @IN_PART__KODS	
						)
			BEGIN
				SELECT	@RC		= 91
				GOTO	EXIT_DOGOVOR_LOAD_800
			END
	
		--
		--	Определяем ID Иностранного контрагента 1
		--
		SELECT	@PARTNER_ID = MAX(PARTNER_ID) + 1
		FROM	U_IN_PART (NOLOCK)
			
		IF	@@ERROR <> 0
			BEGIN	
				SELECT	@RC		= 92
				GOTO	EXIT_DOGOVOR_LOAD_800
			END
	
		SELECT	@PARTNER_ID	= ISNULL(@PARTNER_ID, 1)
	
		--	
		--	Добавляем новую запись об Иностранном контрагенте 1
		--
		INSERT	INTO	U_IN_PART  	
				( PARTNER_ID, NAMEP,  KODS, INN, ADRES, TYPE, DEL_FLAG )
		VALUES
				( @PARTNER_ID, @IN_PART__NAMEP, @IN_PART__KODS, @IN_PART__INN, @IN_PART__ADRES, @IN_PART__TYPE, NULL )
	
		IF	@@ERROR <> 0
			BEGIN	
				SELECT	@RC		= 93
				GOTO	EXIT_DOGOVOR_LOAD_800
			END
	END	-- добавления Иностранного контрагента 1

	--
	--	2. Поиск Иностранного контрагента 2 по переданным реквизитам
	--	
	IF	@IN_PART__KODS2	IS NOT NULL
		BEGIN
			SELECT	@PARTNER_ID2				= PARTNER_ID 	
			FROM	U_IN_PART (NOLOCK)
			WHERE	KODS									= @IN_PART__KODS2										AND
					UPPER(LTRIM(RTRIM(NAMEP)))				= UPPER(LTRIM(RTRIM(@IN_PART__NAMEP2)))					AND
					ISNULL(INN, '')							= ISNULL(@IN_PART__INN2, '')							AND
					UPPER(LTRIM(RTRIM(ISNULL(ADRES, ''))))	= UPPER(LTRIM(RTRIM(ISNULL(@IN_PART__ADRES2, ''))))		AND
					ISNULL(TYPE, '')						= ISNULL(@IN_PART__TYPE2, '')							AND
					DEL_FLAG								IS NULL
			
			IF ISNULL(@PARTNER_ID2, 0) = 0 
			-- Иностранный контрагент 2 не найден - будем добалять
			BEGIN
				--
				--	Проверка кода страны
				--
				IF NOT EXISTS	(	SELECT	*
									FROM	OKSMT (NOLOCK)
									WHERE	KOD	=  @IN_PART__KODS2	
								)
					BEGIN
						SELECT	@RC		= 94
						GOTO	EXIT_DOGOVOR_LOAD_800
					END
			
				--
				--	Определяем ID Иностранного контрагента 2
				--
				SELECT	@PARTNER_ID2 = MAX(PARTNER_ID) + 1
				FROM	U_IN_PART (NOLOCK)
					
				IF	@@ERROR <> 0
					BEGIN	
						SELECT	@RC		= 92
						GOTO	EXIT_DOGOVOR_LOAD_800
					END
			
				SELECT	@PARTNER_ID2	= ISNULL(@PARTNER_ID2, 1)
			
				--	
				--	Добавляем новую запись об Иностранном контрагенте 2
				--
				INSERT	INTO	U_IN_PART  	
						( PARTNER_ID, NAMEP,  KODS, INN, ADRES, TYPE, DEL_FLAG )
				VALUES
						( @PARTNER_ID2, @IN_PART__NAMEP2, @IN_PART__KODS2, @IN_PART__INN2, @IN_PART__ADRES2, @IN_PART__TYPE2, NULL )
			
				IF	@@ERROR <> 0
					BEGIN	
						SELECT	@RC		= 93
						GOTO	EXIT_DOGOVOR_LOAD_800
					END
			END	-- добавления Иностранного контрагента 2
		END

	--
	--	3. Поиск Договора по UNI_ID
	--
	SELECT	@DOG_ID_OLD		= DOG_ID,
			@DOG_NPP_OLD	= DOG_NPP
	FROM	U_DOGOVOR (NOLOCK)	
	WHERE	RESIDENT_ID	= @RESIDENT_ID	AND
			UNI_ID		= @UNI_ID		AND
			DEL_FLAG	IS NULL
	IF	@DOG_ID_OLD	IS NOT NULL
		--	Договор найден по UNI_ID -> приём-обновление
		SELECT	@FLAG_LOAD = 2
	ELSE
		BEGIN
		--	Договор не найден по UNI_ID -> Поиск Договора по ключевым реквизитам 
		--  (для Договоров Б/Н сознательно не выполняется - такой договор, не найденный по UNI_ID, будет всегда добавляться)
		--	(условие UNI_ID	IS NULL исключено из запроса из-за возможной загрузки из разных банков
			IF	UPPER(RTRIM(LTRIM(@N_KONTR)))	<> 'Б/Н'	AND
				UPPER(RTRIM(LTRIM(@N_KONTR)))	<> 'Б\Н'	
				BEGIN
					SELECT	@DOG_ID_OLD		= DOG_ID,
							@DOG_NPP_OLD	= DOG_NPP
					FROM	U_DOGOVOR (NOLOCK)
					WHERE	RESIDENT_ID					= @RESIDENT_ID																				AND
							PARTNER_ID					= @PARTNER_ID																				AND
							VID_KONTR					= @VID_KONTR																				AND
							UPPER(RTRIM(LTRIM(N_KONTR)))= UPPER(RTRIM(LTRIM(@N_KONTR)))																AND
							D_KONTR						= @D_KONTR																					AND
							ISNULL(N_DOPSOGL, '')		= ISNULL(@N_DOPSOGL, '')																	AND
							ISNULL(D_DOPSOGL, CONVERT( SMALLDATETIME, '19370101'))	= ISNULL(@D_DOPSOGL, CONVERT( SMALLDATETIME, '19370101'))		AND
							KVALK						= @KVALK																					AND
							SUMK						= @SUMK																						AND
							ISNULL(D_END, CONVERT(DATETIME, '19370101')) 			= ISNULL(@D_END, CONVERT(DATETIME, '19370101'))					AND
							ISNULL(R3_G7, 0)			= ISNULL(@R3_G7, 0)																			AND
							ISNULL(F1_R3_G8, '')		= ISNULL(@F1_R3_G8, '')																		AND
							ISNULL(F1_R3_G9, '')		= ISNULL(@F1_R3_G9, '')																		AND
							ISNULL(F1_R3_G10, '')		= ISNULL(@F1_R3_G10, '')																	AND
							ISNULL(F2_R3_G8, 0)			= ISNULL(@F2_R3_G8, 0)																		AND
							ISNULL(F2_R3_G9, '')		= ISNULL(@F2_R3_G9, '')																		AND
							ISNULL(F2_R3_G10, '')		= ISNULL(@F2_R3_G10, '')																	AND
							DEL_FLAG		IS NULL 																							--AND
							--UNI_ID			IS NULL
			
					IF	@DOG_ID_OLD IS NOT NULL
						-- Договор найден по ключевым реквизитам -> приём-обновление
						SELECT	@FLAG_LOAD = 2
				END
				
		END --@ELSE DOG_ID IS NOT NULL Договор не найден по UNI_ID


	IF	@FLAG_LOAD = 2 
	-- приём-обновление
	BEGIN
		EXECUTE U_DOGOVOR_UPDATE
				@RESIDENT_ID	= @RESIDENT_ID,
				@DOG_ID			= @DOG_ID_OLD,
				@DOG_NPP		= @DOG_NPP_OLD,
				@VID_KONTR		= @VID_KONTR,
				@PARTNER_ID		= @PARTNER_ID,
				@N_KONTR		= @N_KONTR, 
				@D_KONTR		= @D_KONTR,
				@N_DOPSOGL		= @N_DOPSOGL, 
				@D_DOPSOGL		= @D_DOPSOGL,
				@KVALK			= @KVALK, 
				@SUMK			= @SUMK,  
				@D_BEGIN		= @D_BEGIN,  
				@D_END			= @D_END, 
				@R3_G7			= @R3_G7,  
				@F1_R3_G8		= @F1_R3_G8, 
				@F1_R3_G9		= @F1_R3_G9, 
				@F1_R3_G10		= @F1_R3_G10, 
				@F2_R3_G8		= @F2_R3_G8, 
				@F2_R3_G9		= @F2_R3_G9, 
				@F2_R3_G10		= @F2_R3_G10,
				@VID_USLUG  	= @VID_USLUG,
				@KOD_CONTROL  	= @KOD_CONTROL,
				@PR_NOT_REQ_PS  = @PR_NOT_REQ_PS,
				@KONTR_SROK		= @KONTR_SROK,
				@DESCR_VID_KONTR= @DESCR_VID_KONTR,
				@PARTNER_ID2	= @PARTNER_ID2,
				@USER_ID		= 'SYSTEM',
				@PRIM			= @PRIM,
				@PRIM_PREDMET	= @PRIM_PREDMET,
				@PRIM_FIO_OTV	= @PRIM_FIO_OTV,
				@BANK_ID		= @BANK_ID,
	 			@UNI_ID			= @UNI_ID,
				@DOG_ID_BANK	= @DOG_ID_BANK,
				@DOG_NPP_BANK	= @DOG_NPP_BANK,
				@D_LOAD			= @D_TODAY,
				@SRC_LOAD		= 'АСВКБ',
				@RC				= @RC1 OUTPUT 

			IF	@RC1 > 0					
				BEGIN
					SELECT	@RC = @RC1
					GOTO	EXIT_DOGOVOR_LOAD_800
				END	
	END

	IF	@FLAG_LOAD = 1 
	-- приём-добавление
	BEGIN
		--	----------------------------------------------------------
		--	Поиск Договора, к которому будем добавлять доп.соглашение	
		--	----------------------------------------------------------
		SELECT	@DOG_ID_OLD		= DOG_ID
		FROM	U_DOGOVOR	(NOLOCK)
		WHERE	RESIDENT_ID		= @RESIDENT_ID	AND
				BANK_ID			= @BANK_ID		AND
				DOG_ID_BANK		= @DOG_ID_BANK	AND
				DEL_FLAG		IS NULL
		
		EXECUTE U_DOGOVOR_INSERT
				@RESIDENT_ID		= @RESIDENT_ID,
				@VID_KONTR			= @VID_KONTR,
				@PARTNER_ID			= @PARTNER_ID,
				@N_KONTR			= @N_KONTR, 
				@D_KONTR			= @D_KONTR,
				@N_DOPSOGL			= @N_DOPSOGL, 
				@D_DOPSOGL			= @D_DOPSOGL,
				@KVALK				= @KVALK, 
				@SUMK				= @SUMK,  
				@D_BEGIN			= @D_BEGIN, 
				@D_END				= @D_END,  
				@R3_G7				= @R3_G7,  
				@F1_R3_G8			= @F1_R3_G8,  
				@F1_R3_G9			= @F1_R3_G9,  
				@F1_R3_G10			= @F1_R3_G10,  
				@F2_R3_G8			= @F2_R3_G8,  
				@F2_R3_G9			= @F2_R3_G9,  
				@F2_R3_G10			= @F2_R3_G10,  
				@VID_USLUG  		= @VID_USLUG,
				@KOD_CONTROL  		= @KOD_CONTROL,
				@PR_NOT_REQ_PS  	= @PR_NOT_REQ_PS,
				@KONTR_SROK			= @KONTR_SROK,
				@DESCR_VID_KONTR	= @DESCR_VID_KONTR,
				@PARTNER_ID2		= @PARTNER_ID2,
				@USER_ID			= 'SYSTEM',
				@PRIM				= @PRIM,
				@PRIM_PREDMET		= @PRIM_PREDMET,
				@PRIM_FIO_OTV		= @PRIM_FIO_OTV,
				@BANK_ID			= @BANK_ID,
				@UNI_ID				= @UNI_ID,
				@DOG_ID_BANK		= @DOG_ID_BANK,
				@DOG_NPP_BANK		= @DOG_NPP_BANK,
				@D_LOAD				= @D_TODAY,
				@SRC_LOAD			= 'АСВКБ',
				@DOG_ID				= @DOG_ID_OLD OUTPUT,
				@DOG_NPP			= @RC1 OUTPUT, 
				@RC					= @RC2 OUTPUT 

			IF	NOT ( @RC2 = 0 AND @RC1 > 0 )	
				BEGIN
					SELECT	@RC = @RC2
					GOTO	EXIT_DOGOVOR_LOAD_800
				END
	END		

--
--	Возврат кода завершения и признака приёма
--
EXIT_DOGOVOR_LOAD_800:
	SELECT	RC = @RC, FLAG_LOAD = @FLAG_LOAD
GO

GRANT  EXECUTE  ON [dbo].[U_DOGOVOR_LOAD_800]  TO [OPERS]
GO

--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[U_DOGOVOR_LOAD_XML_CB]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[U_DOGOVOR_LOAD_XML_CB]
GO

CREATE PROCEDURE [dbo].[U_DOGOVOR_LOAD_XML_CB]
--	------------------------------------------------------------------------------------------------------------------------
--	Загрузка Договора из XML-файла формата ЦБ РФ
--	------------------------------------------------------------------------------------------------------------------------
--
--	Возвращает: 
--	1. RC 				
--	   RC =	0	- нормальное завершение			
--			10	- Ошибка при загрузке Договора
--			11	- Договор не найден в БД (загрузка-обновление)
--			20 	- Ошибка при вычислении идентификатора Договора (загрузка-добавление)
--			23  - Ошибка при коррекции заголовочной части Договора
--			30	- Дублирование Договора
--			40	- Код валюты Договора отсутствует в справочнике
--			50	- вид Договора отсутствует в справочнике
-- 			90	- Код вида работ, услуг, передачи информации, результатов интеллектуальной деятельности, операций неторгового характера отсутствует в справочнике
--			91	- Код страны Иностранного контрагента отсутствует в справочнике
--			92	- Ошибка при вычислении идентификатора Иностранного контрагента
--			93	- Ошибка при добавлении Иностранного контрагента
--			100	- Ошибка при регистрации события
-- 			140	- Не указан вид Договора
-- 			150	- Не указан Иностранный контрагент
-- 			160	- Не указан номер Договора
-- 			170	- Не указана дата Договора
-- 			180	- Не указан код валюты цены Договора
-- 			350	- Код срока погашения (раздел 3 графа 10 форма 2 ПС) отсутствует в справочнике 
-- 			400	- Неверный символ в разделе 3 графа 8 (форма 1 ПС)
-- 			410	- Неверный символ в разделе 3 графа 9 (форма 1 ПС)
-- 			420	- Неверный символ в разделе 3 графа 10 (форма 1 ПС)
-- 			430	- Неверный символ в разделе 3 графа 9 (форма 2 ПС)
-- 			540	- Дата Договора больше текущей даты
-- 			550	- Дата окончания исполнения обязательств меньше даты подписания Договора 
--
--	2.FLAG_LOAD = 	1 - загрузка-добавление,
--					2 - загрузка-обновление
--	------------------------------------------------------------------------------------------------------------------------
--	(Создание	в версии 2.1.0)
--	------------------------------------------------------------------------------------------------------------------------
(
	@RESIDENT_ID		AS INTEGER,
	@BANK_ID			AS INTEGER,
	@IN_PART__NAMEP		AS VARCHAR (300),
	@IN_PART__KODS		AS CHAR (3),
	@VID_KONTR			AS CHAR (1), 
	@N_KONTR			AS VARCHAR (100), 
	@D_KONTR			AS SMALLDATETIME,  
	@N_DOPSOGL			AS VARCHAR(100), 
	@D_DOPSOGL			AS SMALLDATETIME,  
	@KVALK				AS CHAR(3), 
	@SUMK				AS DECIMAL(16, 2), 
	@D_END				AS DATETIME,  
	@R3_G7				AS DECIMAL(16, 2), 
	@F1_R3_G8			AS CHAR(1), 
	@F1_R3_G9			AS CHAR(1),
	@F1_R3_G10			AS CHAR(1),
	@F2_R3_G8			AS DECIMAL(16, 2),
	@F2_R3_G9			AS CHAR(1), 
	@F2_R3_G10			AS CHAR(1), 
	@USER_ID			AS VARCHAR(30),
	@DOG_ID				AS INTEGER OUTPUT,
	@DOG_NPP			AS INTEGER OUTPUT,
	@FLAG_LOAD			AS INTEGER OUTPUT,
	@RC					AS INTEGER OUTPUT
)
 AS
	SET NOCOUNT ON

	--
	--	Рабочие переменные
	--
	DECLARE	@RC1			AS INTEGER,
			@RC2			AS INTEGER,
			@D_TODAY		AS SMALLDATETIME,
			@PARTNER_ID		AS INTEGER

	--
	--	Переменные для перезаписи полей при загрузке-обновлении
	--
	DECLARE	@D_BEGIN			AS SMALLDATETIME,  
			@VID_USLUG			AS VARCHAR (7),
			@KOD_CONTROL		AS VARCHAR (4),
			@PR_NOT_REQ_PS		AS CHAR (1),
			@PRIM				AS VARCHAR (2000),
			@PRIM_PREDMET		AS VARCHAR (200),
			@PRIM_FIO_OTV		AS VARCHAR (100),
			@KONTR_SROK  		AS CHAR (4)

	--
	--	Начальные значения
	--
	SELECT	@FLAG_LOAD		= 1
	SELECT	@D_TODAY		= CONVERT(SMALLDATETIME,GETDATE())
	SELECT	@RC 			= 0
	SELECT	@RC1 			= 0
	SELECT	@RC2 			= 0
	SELECT	@PARTNER_ID		= NULL
	
	--
	--	1. Поиск Иностранного контрагента по переданным реквизитам
	--	
	SELECT	@PARTNER_ID					= PARTNER_ID 	
	FROM	U_IN_PART (NOLOCK)
	WHERE	KODS						= @IN_PART__KODS										AND
			UPPER(LTRIM(RTRIM(NAMEP)))	= UPPER(LTRIM(RTRIM(@IN_PART__NAMEP)))					AND
			DEL_FLAG					IS NULL
	
	IF ISNULL(@PARTNER_ID, 0) = 0 
	-- Иностранный контрагент не найден - будем добалять
	BEGIN
		--
		--	Проверка кода страны
		--
		IF NOT EXISTS	(	SELECT	*
							FROM	OKSMT (NOLOCK)
							WHERE	KOD	=  @IN_PART__KODS	
						)
			BEGIN
				SELECT	@RC		= 91
				GOTO	EXIT_DOGOVOR_LOAD_XML_CB
			END
	
		--
		--	Определяем ID Иностранного контрагента
		--
		SELECT	@PARTNER_ID = MAX(PARTNER_ID) + 1
		FROM	U_IN_PART (NOLOCK)
			
		IF	@@ERROR <> 0
			BEGIN	
				SELECT	@RC		= 92
				GOTO	EXIT_DOGOVOR_LOAD_XML_CB
			END
	
		SELECT	@PARTNER_ID	= ISNULL(@PARTNER_ID, 1)
	
		--	
		--	Добавляем новую запись об Иностранном контрагенте
		--
		INSERT	INTO	U_IN_PART  	
				( PARTNER_ID, NAMEP,  KODS, INN, ADRES, TYPE, DEL_FLAG )
		VALUES
				( @PARTNER_ID, @IN_PART__NAMEP, @IN_PART__KODS, NULL, NULL, NULL, NULL )
	
		IF	@@ERROR <> 0
			BEGIN	
				SELECT	@RC		= 93
				GOTO	EXIT_DOGOVOR_LOAD_XML_CB
			END
	END	-- добавления Иностранного контрагента 

	
	--
	--	2. Определяем режим загрузки Договора по DOG_ID, DOG_NPP (если переданы на вход)
	--
	IF	@DOG_ID > 0 AND @DOG_NPP > 0
		BEGIN
		--	ключ полностью передан -> загрузка-обновление
		SELECT	@FLAG_LOAD = 2

		-- Запоминаем некоторые поля из Договора, отсутствующие в XML-файле формата ЦБ РФ
		SELECT	@D_BEGIN			= D_BEGIN,  
				@VID_USLUG			= VID_USLUG,
				@KOD_CONTROL		= KOD_CONTROL,
				@PR_NOT_REQ_PS		= PR_NOT_REQ_PS,
				@PRIM				= PRIM,
				@PRIM_PREDMET		= PRIM_PREDMET,
				@PRIM_FIO_OTV		= PRIM_FIO_OTV,
				@KONTR_SROK  		= KONTR_SROK
		FROM	U_DOGOVOR (NOLOCK)
		WHERE	RESIDENT_ID		= @RESIDENT_ID	AND
				DOG_ID			= @DOG_ID		AND
				DOG_NPP			= @DOG_NPP		AND
				DEL_FLAG		IS NULL
		END
	
	IF	@FLAG_LOAD = 2 
	-- загрузка-обновление
	BEGIN
		EXECUTE U_DOGOVOR_UPDATE
				@RESIDENT_ID	= @RESIDENT_ID,
				@DOG_ID			= @DOG_ID,
				@DOG_NPP		= @DOG_NPP,
				@VID_KONTR		= @VID_KONTR,
				@PARTNER_ID		= @PARTNER_ID,
				@N_KONTR		= @N_KONTR, 
				@D_KONTR		= @D_KONTR,
				@N_DOPSOGL		= @N_DOPSOGL, 
				@D_DOPSOGL		= @D_DOPSOGL,
				@KVALK			= @KVALK, 
				@SUMK			= @SUMK, 
				@D_BEGIN		= @D_BEGIN,   
				@D_END			= @D_END, 
				@R3_G7			= @R3_G7,  
				@F1_R3_G8		= @F1_R3_G8, 
				@F1_R3_G9		= @F1_R3_G9, 
				@F1_R3_G10		= @F1_R3_G10, 
				@F2_R3_G8		= @F2_R3_G8, 
				@F2_R3_G9		= @F2_R3_G9, 
				@F2_R3_G10		= @F2_R3_G10,
				@VID_USLUG  	= @VID_USLUG,
				@KOD_CONTROL  	= @KOD_CONTROL,
				@PR_NOT_REQ_PS  = @PR_NOT_REQ_PS,
				@KONTR_SROK		= @KONTR_SROK,
				@USER_ID		= 'SYSTEM',
				@PRIM			= @PRIM,
				@PRIM_PREDMET	= @PRIM_PREDMET,
				@PRIM_FIO_OTV	= @PRIM_FIO_OTV,
				@BANK_ID		= @BANK_ID,
	 			@D_LOAD			= @D_TODAY,
				@SRC_LOAD		= 'Формат ЦБ РФ',
				@RC				= @RC1 OUTPUT 

			IF	@RC1 > 0					
				BEGIN
					SELECT	@RC = @RC1
					GOTO	EXIT_DOGOVOR_LOAD_XML_CB
				END	
	END

	IF	@FLAG_LOAD = 1 
	-- загрузка-добавление
	BEGIN
		EXECUTE U_DOGOVOR_INSERT
				@RESIDENT_ID		= @RESIDENT_ID,
				@VID_KONTR			= @VID_KONTR,
				@PARTNER_ID			= @PARTNER_ID,
				@N_KONTR			= @N_KONTR, 
				@D_KONTR			= @D_KONTR,
				@N_DOPSOGL			= @N_DOPSOGL, 
				@D_DOPSOGL			= @D_DOPSOGL,
				@KVALK				= @KVALK, 
				@SUMK				= @SUMK,  
				@D_BEGIN			= @D_BEGIN, 
				@D_END				= @D_END,  
				@R3_G7				= @R3_G7,  
				@F1_R3_G8			= @F1_R3_G8,  
				@F1_R3_G9			= @F1_R3_G9,  
				@F1_R3_G10			= @F1_R3_G10,  
				@F2_R3_G8			= @F2_R3_G8,  
				@F2_R3_G9			= @F2_R3_G9,  
				@F2_R3_G10			= @F2_R3_G10,  
				@VID_USLUG  		= @VID_USLUG,
				@KOD_CONTROL  		= @KOD_CONTROL,
				@PR_NOT_REQ_PS  	= @PR_NOT_REQ_PS,
				@KONTR_SROK			= @KONTR_SROK,
				@USER_ID			= 'SYSTEM',
				@PRIM				= @PRIM,
				@PRIM_PREDMET		= @PRIM_PREDMET,
				@PRIM_FIO_OTV		= @PRIM_FIO_OTV,
				@BANK_ID			= @BANK_ID,
				@D_LOAD				= @D_TODAY,
				@SRC_LOAD			= 'Формат ЦБ РФ',
				@DOG_ID				= @DOG_ID OUTPUT,
				@DOG_NPP			= @RC1 OUTPUT, 
				@RC					= @RC2 OUTPUT 

			IF	NOT ( @RC2 = 0 AND @RC1 > 0 )	
				BEGIN
					SELECT	@RC = @RC2
					GOTO	EXIT_DOGOVOR_LOAD_XML_CB
				END
			ELSE
				SELECT	@DOG_ID = @DOG_ID, @DOG_NPP	= @RC1
	END		

--
--	Возврат кода завершения, признака загрузки и идентификаторов Договора
--
EXIT_DOGOVOR_LOAD_XML_CB:
	RETURN	
GO

GRANT  EXECUTE  ON [dbo].[U_DOGOVOR_LOAD_XML_CB]  TO [OPERS]
GO

--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[U_DOGOVOR_SALDO]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[U_DOGOVOR_SALDO]
GO

CREATE PROCEDURE [dbo].[U_DOGOVOR_SALDO]
--	----------------------------------------------------------------------------------------------------
--	Сальдо расчётов по Договору (контракту)
--	@DOG_NPP = 0	- по Договору + по предыдущим условиям Договора
--	@DOG_NPP > 0    - только по Договору (DOG_NPP)
--	----------------------------------------------------------------------------------------------------
--	Примечание:
--	для контрактов с типом 1,2,3,4 и 9
--	----------------------------------------------------------------------------------------------------
--	(Модификация	в версии 2.1.0)
--	----------------------------------------------------------------------------------------------------
(
	@RESIDENT_ID	AS INTEGER,
	@DOG_ID			AS INTEGER,
	@DOG_NPP		AS INTEGER			=	0,
	@D_CALC			AS SMALLDATETIME	=	NULL
)
AS
	SET NOCOUNT ON

	--	-------------------------------------
	--	Нвчальные значения
	--	-------------------------------------
	--	Ecли не указана дата расчёта, то расчёт производится на текущую дату
	IF	@D_CALC	IS NULL
		SELECT	@D_CALC	= CONVERT( SMALLDATETIME, GETDATE() )

	--	Для точности расчёта будем применять "<" вместо "<="
	--	Поэтому увеличиваем расчётную дату на 1-н день
	SELECT	@D_CALC	= DATEADD( day, 1, @D_CALC )

	IF	@DOG_NPP = 0
		SELECT	@DOG_NPP = NULL 

	DECLARE @VID_KONTR	AS CHAR (1)

	--	--------------------------------------------
	--	Определяем тип контракта
	--	--------------------------------------------
	SELECT	TOP 1
			@VID_KONTR	= RTRIM(LTRIM(VID_KONTR))
	FROM	U_DOGOVOR (NOLOCK)
	WHERE	RESIDENT_ID	=	@RESIDENT_ID	AND
			DOG_ID		=	@DOG_ID			AND
			DEL_FLAG	IS	NULL

	--	-----------------------------------------------------
	--	Выводим составляющие для расчёта Сальдо и само Сальдо
	--	-----------------------------------------------------
	SELECT	DISTINCT 
			--	-------------------------------
			--	Тип контракта	
			--	-------------------------------
			@VID_KONTR			AS VID_KONTR,

			--	-------------------------------
			--	Код валюты контракта	
			--	-------------------------------
			U_DOGOVOR.KVALK		AS KVALK,

			--	-------------------------------
			--	Сумма зачислений
			--	-------------------------------
			(
				SELECT	ISNULL( SUM( U_OPLATA.SUMK ), 0 )
				FROM	U_OPLATA (NOLOCK)
				INNER	JOIN VIDOP	(NOLOCK)	ON	
						U_OPLATA.KODOP	=	VIDOP.KOD	AND	
						VIDOP.PR_SALDO	=	1
				LEFT	OUTER JOIN U_PS (NOLOCK)	ON	
						U_PS.RESIDENT_ID		=	U_OPLATA.RESIDENT_ID	AND
						U_PS.PS_ID				=	U_OPLATA.PS_ID			AND
						U_PS.DEL_FLAG 			IS	NULL
				WHERE	U_OPLATA.RESIDENT_ID	=	@RESIDENT_ID			AND
						U_OPLATA.VALK			=	U_DOGOVOR.KVALK			AND
						U_OPLATA.DIRECTION		=	'1'						AND						
						U_OPLATA.D_REFER		<	@D_CALC					AND
						(
							--	Платёж ссылается на Контракт (Договор) через Паспорт сделки
							(
								U_OPLATA.PS_ID		IS	NOT NULL			AND
								U_OPLATA.DOG_ID		IS	NULL				AND
								U_OPLATA.DOG_NPP	IS	NULL				AND
								U_OPLATA.PS_ID		=	U_PS.PS_ID			AND
								U_PS.DOG_ID			=	@DOG_ID				AND
								( 
									@DOG_NPP		IS	NULL			OR
									U_PS.DOG_NPP	=	@DOG_NPP
								)												
							)
							OR
							--	Платёж ссылается на Контракт (Договор) напрямую
							(
								U_OPLATA.PS_ID		IS	NULL				AND
								U_OPLATA.DOG_ID		IS	NOT NULL			AND
								U_OPLATA.DOG_NPP	IS	NOT NULL			AND
								U_OPLATA.DOG_ID		=	@DOG_ID				AND
								( 
									@DOG_NPP			IS	NULL			OR
									U_OPLATA.DOG_NPP	=	@DOG_NPP
								)												
							)
						)													AND	
						U_OPLATA.DEL_FLAG		IS	NULL					
			)		AS SUM_ZACH,

			--	-------------------------------
			--	Сумма списаний
			--	-------------------------------
			(
				SELECT	ISNULL( SUM( U_OPLATA.SUMK ), 0 )
				FROM	U_OPLATA (NOLOCK)
				INNER	JOIN VIDOP	(NOLOCK)	ON	
						U_OPLATA.KODOP	=	VIDOP.KOD	AND	
						VIDOP.PR_SALDO	=	1
				LEFT	OUTER JOIN U_PS (NOLOCK)	ON	
						U_PS.RESIDENT_ID		=	U_OPLATA.RESIDENT_ID	AND
						U_PS.PS_ID				=	U_OPLATA.PS_ID			AND
						U_PS.DEL_FLAG 			IS	NULL
				WHERE	U_OPLATA.RESIDENT_ID	=	@RESIDENT_ID			AND
						U_OPLATA.VALK			=	U_DOGOVOR.KVALK			AND
						U_OPLATA.DIRECTION		=	'2'						AND						
						U_OPLATA.D_REFER		<	@D_CALC					AND
						(
							--	Платёж ссылается на Контракт (Договор) через Паспорт сделки
							(
								U_OPLATA.PS_ID		IS	NOT NULL			AND
								U_OPLATA.DOG_ID		IS	NULL				AND
								U_OPLATA.DOG_NPP	IS	NULL				AND
								U_OPLATA.PS_ID		=	U_PS.PS_ID			AND
								U_PS.DOG_ID			=	@DOG_ID				AND
								( 
									@DOG_NPP		IS	NULL			OR
									U_PS.DOG_NPP	=	@DOG_NPP
								)												
							)
							OR
							--	Платёж ссылается на Контракт (Договор) напрямую
							(
								U_OPLATA.PS_ID		IS	NULL				AND
								U_OPLATA.DOG_ID		IS	NOT NULL			AND
								U_OPLATA.DOG_NPP	IS	NOT NULL			AND
								U_OPLATA.DOG_ID		=	@DOG_ID				AND
								( 
									@DOG_NPP			IS	NULL			OR
									U_OPLATA.DOG_NPP	=	@DOG_NPP
								)												
							)
						)													AND	
						U_OPLATA.DEL_FLAG		IS	NULL					
			)		AS SUM_SPIS,

			--	----------------------------------------------------
			--	в том числе Сумма списаний в виде авансовых платежей
			--	----------------------------------------------------
			(
				SELECT	ISNULL( SUM( U_OPLATA.SUMK ), 0 )
				FROM	U_OPLATA (NOLOCK)
				INNER	JOIN VIDOP	(NOLOCK)	ON	
						U_OPLATA.KODOP	=	VIDOP.KOD	AND	
						VIDOP.PR_SALDO	=	1
				LEFT	OUTER JOIN U_PS (NOLOCK)	ON	
						U_PS.RESIDENT_ID		=	U_OPLATA.RESIDENT_ID	AND
						U_PS.PS_ID				=	U_OPLATA.PS_ID			AND
						U_PS.DEL_FLAG 			IS	NULL
				WHERE	U_OPLATA.RESIDENT_ID	=	@RESIDENT_ID			AND
						U_OPLATA.VALK			=	U_DOGOVOR.KVALK			AND
						U_OPLATA.DIRECTION		=	'2'						AND						
						U_OPLATA.D_REFER		<	@D_CALC					AND
						(
							--	Платёж ссылается на Контракт (Договор) через Паспорт сделки
							(
								U_OPLATA.PS_ID		IS	NOT NULL			AND
								U_OPLATA.DOG_ID		IS	NULL				AND
								U_OPLATA.DOG_NPP	IS	NULL				AND
								U_OPLATA.PS_ID		=	U_PS.PS_ID			AND
								U_PS.DOG_ID			=	@DOG_ID				AND
								( 
									@DOG_NPP		IS	NULL			OR
									U_PS.DOG_NPP	=	@DOG_NPP
								)												
							)
							OR
							--	Платёж ссылается на Контракт (Договор) напрямую
							(
								U_OPLATA.PS_ID		IS	NULL				AND
								U_OPLATA.DOG_ID		IS	NOT NULL			AND
								U_OPLATA.DOG_NPP	IS	NOT NULL			AND
								U_OPLATA.DOG_ID		=	@DOG_ID				AND
								( 
									@DOG_NPP			IS	NULL			OR
									U_OPLATA.DOG_NPP	=	@DOG_NPP
								)												
							)
						)													AND	
						--	Код вида валютной операции входит в допустимый перечень авансовых платежей
						(
							U_OPLATA.KODOP	= '11030' OR
							U_OPLATA.KODOP	= '11040' OR
							U_OPLATA.KODOP	= '11050' OR
							U_OPLATA.KODOP	= '11060' OR
							U_OPLATA.KODOP  = '21020' OR  
							U_OPLATA.KODOP  = '21040'	
						)													AND
						U_OPLATA.DEL_FLAG		IS	NULL					
			)		AS	SUM_SPIS_AVANS,

			--	----------------------------------------------------
			--	Сумма подтверждающих документов со знаком (+)
			--	----------------------------------------------------
			(
				 SELECT ISNULL( SUM( U_SPR_CONFIRM.SUMK ), 0 )
				 FROM	U_SPR_CONFIRM (NOLOCK)
				 LEFT	OUTER JOIN U_PS (NOLOCK)	ON	
						U_PS.RESIDENT_ID			=	U_SPR_CONFIRM.RESIDENT_ID	AND
						U_PS.PS_ID					=	U_SPR_CONFIRM.PS_ID			AND
						U_PS.DEL_FLAG 				IS	NULL
				 WHERE	U_SPR_CONFIRM.RESIDENT_ID	=	@RESIDENT_ID	AND
						U_SPR_CONFIRM.VALK			=	U_DOGOVOR.KVALK	AND
						U_SPR_CONFIRM.D_DOC			<	@D_CALC			AND
						(
							--	ПД ссылается на Контракт (Договор) через Паспорт сделки
							(
								U_SPR_CONFIRM.PS_ID		IS	NOT NULL	AND
								U_SPR_CONFIRM.DOG_ID	IS	NULL		AND
								U_SPR_CONFIRM.DOG_NPP	IS	NULL		AND
								U_SPR_CONFIRM.PS_ID		=	U_PS.PS_ID	AND
								U_PS.DOG_ID				=	@DOG_ID		AND
								( 
									@DOG_NPP		IS	NULL			OR
									U_PS.DOG_NPP	=	@DOG_NPP
								)												
							)
							OR
							--	ПД ссылается на Контракт (Договор) напрямую
							(
								U_SPR_CONFIRM.PS_ID		IS	NULL		AND
								U_SPR_CONFIRM.DOG_ID	IS	NOT NULL	AND
								U_SPR_CONFIRM.DOG_NPP	IS	NOT NULL	AND
								U_SPR_CONFIRM.DOG_ID	=	@DOG_ID		AND
								( 
									@DOG_NPP				IS	NULL	OR
									U_SPR_CONFIRM.DOG_NPP	=	@DOG_NPP
								)												
							)
						)												AND	
						(
							--	ПД с кодами 01, 02, 04
							(		
								--	Детализация явно не указана
								( 
									(
										U_SPR_CONFIRM.KODD	=	'01'	OR 
										U_SPR_CONFIRM.KODD	=	'02'	OR
										U_SPR_CONFIRM.KODD	=	'04' 
									)									AND  
									U_SPR_CONFIRM.DIRECTION	IS	NULL	AND
									(
										@VID_KONTR	=	'2'	OR
										@VID_KONTR	=	'4'	OR
										(
											@VID_KONTR	=	'9' AND 
											(
												U_SPR_CONFIRM.TYPE	=	'2'	OR 
												U_SPR_CONFIRM.TYPE	=	'4' 
											) 
										) 
									)
								)		
								OR
								--	Детализация явно указана
								(
									(
										U_SPR_CONFIRM.KODD	=	'01'	OR 
										U_SPR_CONFIRM.KODD	=	'02'	OR
										U_SPR_CONFIRM.KODD	=	'04'
									)									AND  
									U_SPR_CONFIRM.DIRECTION		= '1'				
								)			
							)											
							OR
							--	ПД с кодами	12, 13
							(
								U_SPR_CONFIRM.KODD	= '12'	OR
								U_SPR_CONFIRM.KODD	= '13'				
							)
							OR
							--	ПД	с кодами 14 
							(		
								--	Детализация явно не указана
								( 
									U_SPR_CONFIRM.KODD		= '14'		AND  
									U_SPR_CONFIRM.DIRECTION	IS NULL		AND
									(
										@VID_KONTR	=	'1'	OR
										@VID_KONTR	=	'3'	OR  
										(
											@VID_KONTR	=	'9'	AND	
											(	
												U_SPR_CONFIRM.TYPE	=	'1'	OR
												U_SPR_CONFIRM.TYPE	=	'3'
											) 
										) 
									)
								)		
								OR
								--	Детализация явно указана
								(
									U_SPR_CONFIRM.KODD		=	'14'	AND  
									U_SPR_CONFIRM.DIRECTION	=	'2'				
								)								
							)
						)												AND
	      				U_SPR_CONFIRM.PR_NOT_CALC	IS NULL			    AND
						U_SPR_CONFIRM.DEL_FLAG		IS NULL	
			)		AS	SUM_CONFIRM_PLUS,

			--	---------------------------------------------------------
			--	В том числе Сумма по документам, подтверждающим исполнение 
			--	обязательств иным способом
			--	со знаком (+)
			--	---------------------------------------------------------
			(
				 SELECT ISNULL( SUM( U_SPR_CONFIRM.SUMK ), 0 )
				 FROM	U_SPR_CONFIRM (NOLOCK)
				 LEFT	OUTER JOIN U_PS (NOLOCK)	ON	
						U_PS.RESIDENT_ID			=	U_SPR_CONFIRM.RESIDENT_ID	AND
						U_PS.PS_ID					=	U_SPR_CONFIRM.PS_ID			AND
						U_PS.DEL_FLAG 				IS	NULL
				 WHERE	U_SPR_CONFIRM.RESIDENT_ID	=	@RESIDENT_ID	AND
						U_SPR_CONFIRM.VALK			=	U_DOGOVOR.KVALK	AND
						U_SPR_CONFIRM.D_DOC			<	@D_CALC			AND
						(
							--	ПД ссылается на Контракт (Договор) через Паспорт сделки
							(
								U_SPR_CONFIRM.PS_ID		IS	NOT NULL	AND
								U_SPR_CONFIRM.DOG_ID	IS	NULL		AND
								U_SPR_CONFIRM.DOG_NPP	IS	NULL		AND
								U_SPR_CONFIRM.PS_ID		=	U_PS.PS_ID	AND
								U_PS.DOG_ID				=	@DOG_ID		AND
								( 
									@DOG_NPP		IS	NULL			OR
									U_PS.DOG_NPP	=	@DOG_NPP
								)												
							)
							OR
							--	ПД ссылается на Контракт (Договор) напрямую
							(
								U_SPR_CONFIRM.PS_ID		IS	NULL		AND
								U_SPR_CONFIRM.DOG_ID	IS	NOT NULL	AND
								U_SPR_CONFIRM.DOG_NPP	IS	NOT NULL	AND
								U_SPR_CONFIRM.DOG_ID	=	@DOG_ID		AND
								( 
									@DOG_NPP				IS	NULL	OR
									U_SPR_CONFIRM.DOG_NPP	=	@DOG_NPP
								)												
							)
						)												AND	
						--	ПД	с кодами 14 
						(		
							--	Детализация явно не указана
							( 
								U_SPR_CONFIRM.KODD		= '14'		AND  
								U_SPR_CONFIRM.DIRECTION	IS NULL		AND
								(
									@VID_KONTR	=	'1'	OR
									@VID_KONTR	=	'3'	OR  
									(
										@VID_KONTR	=	'9'	AND	
										(	
											U_SPR_CONFIRM.TYPE	=	'1'	OR
											U_SPR_CONFIRM.TYPE	=	'3'
										) 
									) 
								)
							)		
							OR
							--	Детализация явно указана
							(
								U_SPR_CONFIRM.KODD		=	'14'	AND  
								U_SPR_CONFIRM.DIRECTION	=	'2'				
							)								
						)											AND
	      				U_SPR_CONFIRM.PR_NOT_CALC	IS NULL		    AND
						U_SPR_CONFIRM.DEL_FLAG		IS NULL	
			)		AS	SUM_CONFIRM_14_PLUS,

			--	----------------------------------------------------
			--	Сумма подтверждающих документов со знаком (-)
			--	----------------------------------------------------
			(
				 SELECT ISNULL( SUM( U_SPR_CONFIRM.SUMK ), 0 )
				 FROM	U_SPR_CONFIRM (NOLOCK)
				 LEFT	OUTER JOIN U_PS (NOLOCK)	ON	
						U_PS.RESIDENT_ID			=	U_SPR_CONFIRM.RESIDENT_ID	AND
						U_PS.PS_ID					=	U_SPR_CONFIRM.PS_ID			AND
						U_PS.DEL_FLAG 				IS	NULL
				 WHERE	U_SPR_CONFIRM.RESIDENT_ID	=	@RESIDENT_ID	AND
						U_SPR_CONFIRM.VALK			=	U_DOGOVOR.KVALK	AND
						U_SPR_CONFIRM.D_DOC			<	@D_CALC			AND
						(
							--	ПД ссылается на Контракт (Договор) через Паспорт сделки
							(
								U_SPR_CONFIRM.PS_ID		IS	NOT NULL	AND
								U_SPR_CONFIRM.DOG_ID	IS	NULL		AND
								U_SPR_CONFIRM.DOG_NPP	IS	NULL		AND
								U_SPR_CONFIRM.PS_ID		=	U_PS.PS_ID	AND
								U_PS.DOG_ID				=	@DOG_ID		AND
								( 
									@DOG_NPP		IS	NULL			OR
									U_PS.DOG_NPP	=	@DOG_NPP
								)												
							)
							OR
							--	ПД ссылается на Контракт (Договор) напрямую
							(
								U_SPR_CONFIRM.PS_ID		IS	NULL		AND
								U_SPR_CONFIRM.DOG_ID	IS	NOT NULL	AND
								U_SPR_CONFIRM.DOG_NPP	IS	NOT NULL	AND
								U_SPR_CONFIRM.DOG_ID	=	@DOG_ID		AND
								( 
									@DOG_NPP				IS	NULL	OR
									U_SPR_CONFIRM.DOG_NPP	=	@DOG_NPP
								)												
							)
						)												AND	
						(
							--	ПД с кодами 01, 02, 04
							(		
								--	Детализация явно не указана
								( 
									(
										U_SPR_CONFIRM.KODD	=	'01'	OR
										U_SPR_CONFIRM.KODD	=	'02'	OR
										U_SPR_CONFIRM.KODD	=	'04'
									)									AND  
									U_SPR_CONFIRM.DIRECTION IS NULL		AND
									(
										@VID_KONTR	=	'1'	OR
										@VID_KONTR	=	'3'	OR
										(
											@VID_KONTR	=	'9'	AND
											(
												U_SPR_CONFIRM.TYPE	=	'1'	OR
												U_SPR_CONFIRM.TYPE	=	'3'
											)
										) 
									)
								)		
								OR
								--	Детализация явно указана
								(
									(
										U_SPR_CONFIRM.KODD	=	'01'	OR
										U_SPR_CONFIRM.KODD	=	'02'	OR
										U_SPR_CONFIRM.KODD	=	'04'
									)									AND  
									U_SPR_CONFIRM.DIRECTION	= '2'				
								)			
							)						
							OR
							--	ПД с кодами	03, 05, 10, 11
							(
								U_SPR_CONFIRM.KODD	= '03'	OR
								U_SPR_CONFIRM.KODD	= '05'	OR
								U_SPR_CONFIRM.KODD	= '10'	OR
								U_SPR_CONFIRM.KODD	= '11'				
							)
							OR
							--	ПД с кодами 14
							(
								--	Детализация явно не указана
								( 
									U_SPR_CONFIRM.KODD		=	'14'	AND  
									U_SPR_CONFIRM.DIRECTION	IS	NULL	AND
									(
										@VID_KONTR	=	'2'	OR
										@VID_KONTR	=	'4'	OR
										(
											@VID_KONTR	=	'9'	AND
											(	
												U_SPR_CONFIRM.TYPE	=	'2'	OR
												U_SPR_CONFIRM.TYPE	=	'4'
											)
										)
									)
								)		
								OR
								--	Детализация явно указана
								(
									U_SPR_CONFIRM.KODD		=	'14'	AND  
									U_SPR_CONFIRM.DIRECTION	=	'1'				
								 )			
							)
						)											AND	
	      				U_SPR_CONFIRM.PR_NOT_CALC	IS NULL		    AND
						U_SPR_CONFIRM.DEL_FLAG		IS NULL	
			)		AS	SUM_CONFIRM_MINUS,

			--	---------------------------------------------------------
			--	В том числе Сумма по документам, подтверждающим исполнение 
			--	обязательств иным способом
			--	со знаком (-)
			--	---------------------------------------------------------
			(
				 SELECT ISNULL( SUM( U_SPR_CONFIRM.SUMK ), 0 )
				 FROM	U_SPR_CONFIRM (NOLOCK)
				 LEFT	OUTER JOIN U_PS (NOLOCK)	ON	
						U_PS.RESIDENT_ID			=	U_SPR_CONFIRM.RESIDENT_ID	AND
						U_PS.PS_ID					=	U_SPR_CONFIRM.PS_ID			AND
						U_PS.DEL_FLAG 				IS	NULL
				 WHERE	U_SPR_CONFIRM.RESIDENT_ID	=	@RESIDENT_ID	AND
						U_SPR_CONFIRM.VALK			=	U_DOGOVOR.KVALK	AND
						U_SPR_CONFIRM.D_DOC			<	@D_CALC			AND
						(
							--	ПД ссылается на Контракт (Договор) через Паспорт сделки
							(
								U_SPR_CONFIRM.PS_ID		IS	NOT NULL	AND
								U_SPR_CONFIRM.DOG_ID	IS	NULL		AND
								U_SPR_CONFIRM.DOG_NPP	IS	NULL		AND
								U_SPR_CONFIRM.PS_ID		=	U_PS.PS_ID	AND
								U_PS.DOG_ID				=	@DOG_ID		AND
								( 
									@DOG_NPP		IS	NULL			OR
									U_PS.DOG_NPP	=	@DOG_NPP
								)												
							)
							OR
							--	ПД ссылается на Контракт (Договор) напрямую
							(
								U_SPR_CONFIRM.PS_ID		IS	NULL		AND
								U_SPR_CONFIRM.DOG_ID	IS	NOT NULL	AND
								U_SPR_CONFIRM.DOG_NPP	IS	NOT NULL	AND
								U_SPR_CONFIRM.DOG_ID	=	@DOG_ID		AND
								( 
									@DOG_NPP				IS	NULL	OR
									U_SPR_CONFIRM.DOG_NPP	=	@DOG_NPP
								)												
							)
						)												AND	
						--	ПД с кодами 14
						(
							--	Детализация явно не указана
							( 
								U_SPR_CONFIRM.KODD		=	'14'	AND  
								U_SPR_CONFIRM.DIRECTION	IS	NULL	AND
								(
									@VID_KONTR	=	'2'	OR
									@VID_KONTR	=	'4'	OR
									(
										@VID_KONTR	=	'9'	AND
										(	
											U_SPR_CONFIRM.TYPE	=	'2'	OR
											U_SPR_CONFIRM.TYPE	=	'4'
										)
									)
								)
							)		
							OR
							--	Детализация явно указана
							(
								U_SPR_CONFIRM.KODD		=	'14'	AND  
								U_SPR_CONFIRM.DIRECTION	=	'1'				
							 )			
						)											AND
	      				U_SPR_CONFIRM.PR_NOT_CALC	IS NULL			AND
						U_SPR_CONFIRM.DEL_FLAG		IS NULL	
			)		AS	SUM_CONFIRM_14_MINUS,

			--	--------------------------------
			--	Сальдо расчётов по контракту
			--	--------------------------------
			(
				--	-------------------------------
				--	Сумма зачислений
				--	-------------------------------
				(
					SELECT	ISNULL( SUM( U_OPLATA.SUMK ), 0 )
					FROM	U_OPLATA (NOLOCK)
					INNER	JOIN VIDOP	(NOLOCK)	ON	
							U_OPLATA.KODOP	=	VIDOP.KOD	AND	
							VIDOP.PR_SALDO	=	1
					LEFT	OUTER JOIN U_PS (NOLOCK)	ON	
							U_PS.RESIDENT_ID		=	U_OPLATA.RESIDENT_ID	AND
							U_PS.PS_ID				=	U_OPLATA.PS_ID			AND
							U_PS.DEL_FLAG 			IS	NULL
					WHERE	U_OPLATA.RESIDENT_ID	=	@RESIDENT_ID			AND
							U_OPLATA.VALK			=	U_DOGOVOR.KVALK			AND
							U_OPLATA.DIRECTION		=	'1'						AND						
							U_OPLATA.D_REFER		<	@D_CALC					AND
							(
								--	Платёж ссылается на Контракт (Договор) через Паспорт сделки
								(
									U_OPLATA.PS_ID		IS	NOT NULL			AND
									U_OPLATA.DOG_ID		IS	NULL				AND
									U_OPLATA.DOG_NPP	IS	NULL				AND
									U_OPLATA.PS_ID		=	U_PS.PS_ID			AND
									U_PS.DOG_ID			=	@DOG_ID				AND
									( 
										@DOG_NPP		IS	NULL			OR
										U_PS.DOG_NPP	=	@DOG_NPP
									)												
								)
								OR
								--	Платёж ссылается на Контракт (Договор) напрямую
								(
									U_OPLATA.PS_ID		IS	NULL				AND
									U_OPLATA.DOG_ID		IS	NOT NULL			AND
									U_OPLATA.DOG_NPP	IS	NOT NULL			AND
									U_OPLATA.DOG_ID		=	@DOG_ID				AND
									( 
										@DOG_NPP			IS	NULL			OR
										U_OPLATA.DOG_NPP	=	@DOG_NPP
									)												
								)
							)													AND	
							U_OPLATA.DEL_FLAG		IS	NULL					
				)		

				-

				--	-------------------------------
				--	Сумма списаний
				--	-------------------------------
				(
					SELECT	ISNULL( SUM( U_OPLATA.SUMK ), 0 )
					FROM	U_OPLATA (NOLOCK)
					INNER	JOIN VIDOP (NOLOCK)	ON	
							U_OPLATA.KODOP	=	VIDOP.KOD	AND	
							VIDOP.PR_SALDO	=	1
					LEFT	OUTER JOIN U_PS (NOLOCK)	ON	
							U_PS.RESIDENT_ID		=	U_OPLATA.RESIDENT_ID	AND
							U_PS.PS_ID				=	U_OPLATA.PS_ID			AND
							U_PS.DEL_FLAG 			IS	NULL
					WHERE	U_OPLATA.RESIDENT_ID	=	@RESIDENT_ID			AND
							U_OPLATA.VALK			=	U_DOGOVOR.KVALK			AND
							U_OPLATA.DIRECTION		=	'2'						AND						
							U_OPLATA.D_REFER		<	@D_CALC					AND
							(
								--	Платёж ссылается на Контракт (Договор) через Паспорт сделки
								(
									U_OPLATA.PS_ID		IS	NOT NULL			AND
									U_OPLATA.DOG_ID		IS	NULL				AND
									U_OPLATA.DOG_NPP	IS	NULL				AND
									U_OPLATA.PS_ID		=	U_PS.PS_ID			AND
									U_PS.DOG_ID			=	@DOG_ID				AND
									( 
										@DOG_NPP		IS	NULL			OR
										U_PS.DOG_NPP	=	@DOG_NPP
									)												
								)
								OR
								--	Платёж ссылается на Контракт (Договор) напрямую
								(
									U_OPLATA.PS_ID		IS	NULL				AND
									U_OPLATA.DOG_ID		IS	NOT NULL			AND
									U_OPLATA.DOG_NPP	IS	NOT NULL			AND
									U_OPLATA.DOG_ID		=	@DOG_ID				AND
									( 
										@DOG_NPP			IS	NULL			OR
										U_OPLATA.DOG_NPP	=	@DOG_NPP
									)												
								)
							)													AND	
							U_OPLATA.DEL_FLAG		IS	NULL					
				)

				+

				--	----------------------------------------------------
				--	Сумма подтверждающих документов со знаком (+)
				--	----------------------------------------------------
				(
					 SELECT ISNULL( SUM( U_SPR_CONFIRM.SUMK ), 0 )
					 FROM	U_SPR_CONFIRM (NOLOCK)
					 LEFT	OUTER JOIN U_PS (NOLOCK)	ON	
							U_PS.RESIDENT_ID			=	U_SPR_CONFIRM.RESIDENT_ID	AND
							U_PS.PS_ID					=	U_SPR_CONFIRM.PS_ID			AND
							U_PS.DEL_FLAG 				IS	NULL
					 WHERE	U_SPR_CONFIRM.RESIDENT_ID	=	@RESIDENT_ID	AND
							U_SPR_CONFIRM.VALK			=	U_DOGOVOR.KVALK	AND
							U_SPR_CONFIRM.D_DOC			<	@D_CALC			AND
							(
								--	ПД ссылается на Контракт (Договор) через Паспорт сделки
								(
									U_SPR_CONFIRM.PS_ID		IS	NOT NULL	AND
									U_SPR_CONFIRM.DOG_ID	IS	NULL		AND
									U_SPR_CONFIRM.DOG_NPP	IS	NULL		AND
									U_SPR_CONFIRM.PS_ID		=	U_PS.PS_ID	AND
									U_PS.DOG_ID				=	@DOG_ID		AND
									( 
										@DOG_NPP		IS	NULL			OR
										U_PS.DOG_NPP	=	@DOG_NPP
									)												
								)
								OR
								--	ПД ссылается на Контракт (Договор) напрямую
								(
									U_SPR_CONFIRM.PS_ID		IS	NULL		AND
									U_SPR_CONFIRM.DOG_ID	IS	NOT NULL	AND
									U_SPR_CONFIRM.DOG_NPP	IS	NOT NULL	AND
									U_SPR_CONFIRM.DOG_ID	=	@DOG_ID		AND
									( 
										@DOG_NPP				IS	NULL	OR
										U_SPR_CONFIRM.DOG_NPP	=	@DOG_NPP
									)												
								)
							)												AND	
							(
								--	ПД с кодами 01, 02, 04
								(		
									--	Детализация явно не указана
									( 
										(
											U_SPR_CONFIRM.KODD	=	'01'	OR 
											U_SPR_CONFIRM.KODD	=	'02'	OR
											U_SPR_CONFIRM.KODD	=	'04' 
										)									AND  
										U_SPR_CONFIRM.DIRECTION	IS	NULL	AND
										(
											@VID_KONTR	=	'2'	OR
											@VID_KONTR	=	'4'	OR
											(
												@VID_KONTR	=	'9' AND 
												(
													U_SPR_CONFIRM.TYPE	=	'2'	OR 
													U_SPR_CONFIRM.TYPE	=	'4' 
												) 
											) 
										)
									)		
									OR
									--	Детализация явно указана
									(
										(
											U_SPR_CONFIRM.KODD	=	'01'	OR 
											U_SPR_CONFIRM.KODD	=	'02'	OR
											U_SPR_CONFIRM.KODD	=	'04'
										)									AND  
										U_SPR_CONFIRM.DIRECTION		= '1'				
									)			
								)											
								OR
								--	ПД с кодами	12, 13
								(
									U_SPR_CONFIRM.KODD	= '12'	OR
									U_SPR_CONFIRM.KODD	= '13'				
								)
								OR
								--	ПД	с кодами 14 
								(		
									--	Детализация явно не указана
									( 
										U_SPR_CONFIRM.KODD		= '14'		AND  
										U_SPR_CONFIRM.DIRECTION	IS NULL		AND
										(
											@VID_KONTR	=	'1'	OR
											@VID_KONTR	=	'3'	OR  
											(
												@VID_KONTR	=	'9'	AND	
												(	
													U_SPR_CONFIRM.TYPE	=	'1'	OR
													U_SPR_CONFIRM.TYPE	=	'3'
												) 
											) 
										)
									)		
									OR
									--	Детализация явно указана
									(
										U_SPR_CONFIRM.KODD		=	'14'	AND  
										U_SPR_CONFIRM.DIRECTION	=	'2'				
									)								
								)
							)												AND
		      				U_SPR_CONFIRM.PR_NOT_CALC	IS NULL			    AND
							U_SPR_CONFIRM.DEL_FLAG		IS NULL	

				)		

				-

				--	----------------------------------------------------
				--	Сумма подтверждающих документов со знаком (-)
				--	----------------------------------------------------
				(
					 SELECT ISNULL( SUM( U_SPR_CONFIRM.SUMK ), 0 )
					 FROM	U_SPR_CONFIRM (NOLOCK)
					 LEFT	OUTER JOIN U_PS (NOLOCK)	ON	
							U_PS.RESIDENT_ID			=	U_SPR_CONFIRM.RESIDENT_ID	AND
							U_PS.PS_ID					=	U_SPR_CONFIRM.PS_ID			AND
							U_PS.DEL_FLAG 				IS	NULL
					 WHERE	U_SPR_CONFIRM.RESIDENT_ID	=	@RESIDENT_ID	AND
							U_SPR_CONFIRM.VALK			=	U_DOGOVOR.KVALK	AND
							U_SPR_CONFIRM.D_DOC			<	@D_CALC			AND
							(
								--	ПД ссылается на Контракт (Договор) через Паспорт сделки
								(
									U_SPR_CONFIRM.PS_ID		IS	NOT NULL	AND
									U_SPR_CONFIRM.DOG_ID	IS	NULL		AND
									U_SPR_CONFIRM.DOG_NPP	IS	NULL		AND
									U_SPR_CONFIRM.PS_ID		=	U_PS.PS_ID	AND
									U_PS.DOG_ID				=	@DOG_ID		AND
									( 
										@DOG_NPP		IS	NULL			OR
										U_PS.DOG_NPP	=	@DOG_NPP
									)												
								)
								OR
								--	ПД ссылается на Контракт (Договор) напрямую
								(
									U_SPR_CONFIRM.PS_ID		IS	NULL		AND
									U_SPR_CONFIRM.DOG_ID	IS	NOT NULL	AND
									U_SPR_CONFIRM.DOG_NPP	IS	NOT NULL	AND
									U_SPR_CONFIRM.DOG_ID	=	@DOG_ID		AND
									( 
										@DOG_NPP				IS	NULL	OR
										U_SPR_CONFIRM.DOG_NPP	=	@DOG_NPP
									)												
								)
							)												AND	
							(
								--	ПД с кодами 01, 02, 04
								(		
									--	Детализация явно не указана
									( 
										(
											U_SPR_CONFIRM.KODD	=	'01'	OR
											U_SPR_CONFIRM.KODD	=	'02'	OR
											U_SPR_CONFIRM.KODD	=	'04'
										)									AND  
										U_SPR_CONFIRM.DIRECTION IS NULL		AND
										(
											@VID_KONTR	=	'1'	OR
											@VID_KONTR	=	'3'	OR
											(
												@VID_KONTR	=	'9'	AND
												(
													U_SPR_CONFIRM.TYPE	=	'1'	OR
													U_SPR_CONFIRM.TYPE	=	'3'
												)
											) 
										)
									)		
									OR
									--	Детализация явно	указана
									(
										(
											U_SPR_CONFIRM.KODD	=	'01'	OR
											U_SPR_CONFIRM.KODD	=	'02'	OR
											U_SPR_CONFIRM.KODD	=	'04'
										)									AND  
										U_SPR_CONFIRM.DIRECTION	= '2'				
									)			
								)						
								OR
								--	ПД с кодами	03, 05, 10, 11
								(
									U_SPR_CONFIRM.KODD	= '03'	OR
									U_SPR_CONFIRM.KODD	= '05'	OR
									U_SPR_CONFIRM.KODD	= '10'	OR
									U_SPR_CONFIRM.KODD	= '11'				
								)
								OR
								--	ПД с кодами 14
								(
									--	Детализация явно не указана
									( 
										U_SPR_CONFIRM.KODD		=	'14'	AND  
										U_SPR_CONFIRM.DIRECTION	IS	NULL	AND
										(
											@VID_KONTR	=	'2'	OR
											@VID_KONTR	=	'4'	OR
											(
												@VID_KONTR	=	'9'	AND
												(	
													U_SPR_CONFIRM.TYPE	=	'2'	OR
													U_SPR_CONFIRM.TYPE	=	'4'
												)
											)
										)
									)		
									OR
									--	Детализация явно указана
									(
										U_SPR_CONFIRM.KODD		=	'14'	AND  
										U_SPR_CONFIRM.DIRECTION	=	'1'				
									 )			
								)
							)												AND
			   				U_SPR_CONFIRM.PR_NOT_CALC	IS NULL			    AND
							U_SPR_CONFIRM.DEL_FLAG		IS NULL	
				)
			)		AS	SALDO

	FROM	U_DOGOVOR (NOLOCK)
	WHERE	U_DOGOVOR.RESIDENT_ID	=	@RESIDENT_ID	AND
			U_DOGOVOR.DOG_ID		=	@DOG_ID			AND
			( 
				@DOG_NPP			IS	NULL			OR
				U_DOGOVOR.DOG_NPP	=	@DOG_NPP
			)											AND	
			U_DOGOVOR.DEL_FLAG		IS	NULL
	GROUP	BY U_DOGOVOR.KVALK
GO

GRANT  EXECUTE  ON [dbo].[U_DOGOVOR_SALDO]  TO [OPERS], [AUDITS]
GO

--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[U_DOGOVOR_LIST_SALDO]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[U_DOGOVOR_LIST_SALDO]
GO

CREATE PROCEDURE [dbo].[U_DOGOVOR_LIST_SALDO]
--	----------------------------------------------------------------------------------------------------
--	Сальдо расчётов по Договорам (контракты)
--	----------------------------------------------------------------------------------------------------
--	@USER_ID 		-	идентификатор пользователя
--	@RESIDENT_ID 	-	идентификатор Участника ВЭД (если 0, то все Участники ВЭД)
--	@PARTNER_ID 	-	идентификатор Иностранного контрагента (если 0, то все Иностранные контрагенты)
--	@VID_KONTR		- 	вид Договора (если '0', то для всех видов)
--	@DOG_ID 		-	идентификатор Договора ( если 0, то все Договоры с типом 1-4 и 9)
--	@D_END_BEG		-	нижняя граница диапазона дат окончания исполнения обязательств по контракту	
--	@D_END_END		-	верхняя граница диапазона дат окончания исполнения обязательств по контракту
--	@D_CALC			-	дата, на которую расчитывается сальдо
--	----------------------------------------------------------------------------------------------------
--	(Модификация	в версии 2.1.0)
--	----------------------------------------------------------------------------------------------------
(
	@USER_ID		AS VARCHAR(30),
	@RESIDENT_ID	AS INTEGER,
	@PARTNER_ID		AS INTEGER			=	NULL,
	@VID_KONTR		AS CHAR(10)			=	'0',
	@DOG_ID			AS INTEGER,
	@D_END_BEG		AS DATETIME			=	NULL,
	@D_END_END		AS DATETIME			=	NULL,
	@D_CALC			AS SMALLDATETIME	=	NULL
)
AS

	SET NOCOUNT ON

	--	-------------------------------------
	--	Нвчальные значения
	--	-------------------------------------
	--	Ecли не указана дата расчёта, то расчёт производится на текущую дату
	IF	@D_CALC	IS NULL
		SELECT	@D_CALC	= CONVERT( SMALLDATETIME, GETDATE() )

	--	Для точности расчёта будем применять "<" вместо "<="
	--	Поэтому увеличиваем расчётную дату на 1-н день
	SELECT	@D_CALC	= DATEADD( day, 1, @D_CALC )

	SELECT	@RESIDENT_ID	= ISNULL(@RESIDENT_ID, 0)
	SELECT	@PARTNER_ID		= ISNULL(@PARTNER_ID, 0)
    SELECT	@VID_KONTR		= ISNULL(@VID_KONTR, '0')
	SELECT	@DOG_ID			= ISNULL(@DOG_ID, 0)

	--	-----------------------------------------------------
	--	Выводим составляющие для расчёта Сальдо и само Сальдо
	--	-----------------------------------------------------
	SELECT	--	-------------------------------
			--	Основная информация	
			--	-------------------------------
			U_DOGOVOR.RESIDENT_ID,
			U_IN_PART.NAMEP,
			ISNULL(MAX(U_RESIDENTS.NAMER_S), MAX(U_RESIDENTS.NAMER))	AS NAMER_CR,
			U_DOGOVOR.DOG_ID,
			U_DOGOVOR.VID_KONTR, 
			U_DOGOVOR.N_KONTR, 
			U_DOGOVOR.D_KONTR, 
			
			--	-----------------------------------------
			--	Дата завершения исполнения обязательств
			--	-----------------------------------------
			[dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID)		AS D_END,

			--	-------------------------------
			--	Код валюты контракта	
			--	-------------------------------
			U_DOGOVOR.KVALK		AS KVALK,

			--	-------------------------------
			--	Сумма зачислений
			--	-------------------------------
			(
				SELECT	ISNULL( SUM( U_OPLATA.SUMK ), 0 )
				FROM	U_OPLATA (NOLOCK)
				INNER	JOIN VIDOP	(NOLOCK)	ON	
						VIDOP.KOD		=	U_OPLATA.KODOP	AND	
						VIDOP.PR_SALDO	=	1
				LEFT	OUTER JOIN U_PS (NOLOCK)	ON	
						U_PS.RESIDENT_ID		=	U_OPLATA.RESIDENT_ID	AND
						U_PS.PS_ID				=	U_OPLATA.PS_ID			AND
						U_PS.DEL_FLAG 			IS	NULL
				WHERE	U_OPLATA.RESIDENT_ID	=	U_DOGOVOR.RESIDENT_ID	AND
						U_OPLATA.VALK			=	U_DOGOVOR.KVALK			AND
						U_OPLATA.DIRECTION		=	'1'						AND						
						U_OPLATA.D_REFER		<	@D_CALC					AND
						(
							--	Платёж ссылается на Контракт (Договор) через Паспорт сделки
							(
								U_OPLATA.PS_ID		IS	NOT NULL			AND
								--U_OPLATA.DOG_ID		IS	NULL				AND
								--U_OPLATA.DOG_NPP	IS	NULL				AND
								--U_OPLATA.PS_ID		=	U_PS.PS_ID			AND
								U_PS.DOG_ID			=	U_DOGOVOR.DOG_ID	
							)
							OR
							--	Платёж ссылается на Контракт (Договор) напрямую
							(
								--U_OPLATA.PS_ID		IS	NULL				AND
								U_OPLATA.DOG_ID		IS	NOT NULL			AND
								--U_OPLATA.DOG_NPP	IS	NOT NULL			AND
								U_OPLATA.DOG_ID		=	U_DOGOVOR.DOG_ID		
							)
						)													AND	
						U_OPLATA.DEL_FLAG		IS	NULL					
			)		AS SUM_ZACH,

			--	-------------------------------
			--	Сумма списаний
			--	-------------------------------
			(
				SELECT	ISNULL( SUM( U_OPLATA.SUMK ), 0 )
				FROM	U_OPLATA (NOLOCK)
				INNER	JOIN VIDOP	(NOLOCK)	ON	
						VIDOP.KOD		=	U_OPLATA.KODOP	AND	
						VIDOP.PR_SALDO	=	1
				LEFT	OUTER JOIN U_PS (NOLOCK)	ON	
						U_PS.RESIDENT_ID		=	U_OPLATA.RESIDENT_ID	AND
						U_PS.PS_ID				=	U_OPLATA.PS_ID			AND
						U_PS.DEL_FLAG 			IS	NULL
				WHERE	U_OPLATA.RESIDENT_ID	=	U_DOGOVOR.RESIDENT_ID	AND
						U_OPLATA.VALK			=	U_DOGOVOR.KVALK			AND
						U_OPLATA.DIRECTION		=	'2'						AND						
						U_OPLATA.D_REFER		<	@D_CALC					AND
						(
							--	Платёж ссылается на Контракт (Договор) через Паспорт сделки
							(
								U_OPLATA.PS_ID		IS	NOT NULL			AND
								--U_OPLATA.DOG_ID		IS	NULL				AND
								--U_OPLATA.DOG_NPP	IS	NULL				AND
								--U_OPLATA.PS_ID		=	U_PS.PS_ID			AND
								U_PS.DOG_ID			=	U_DOGOVOR.DOG_ID		
							)
							OR
							--	Платёж ссылается на Контракт (Договор) напрямую
							(
								--U_OPLATA.PS_ID		IS	NULL				AND
								U_OPLATA.DOG_ID		IS	NOT NULL			AND
								--U_OPLATA.DOG_NPP	IS	NOT NULL			AND
								U_OPLATA.DOG_ID		=	U_DOGOVOR.DOG_ID		
							)
						)													AND	
						U_OPLATA.DEL_FLAG		IS	NULL					
			)		AS SUM_SPIS,

			--	----------------------------------------------------
			--	в том числе Сумма списаний в виде авансовых платежей
			--	----------------------------------------------------
			(
				SELECT	ISNULL( SUM( U_OPLATA.SUMK ), 0 )
				FROM	U_OPLATA (NOLOCK)
				INNER	JOIN VIDOP	(NOLOCK)	ON	
						VIDOP.KOD		=	U_OPLATA.KODOP	AND	
						VIDOP.PR_SALDO	=	1
				LEFT	OUTER JOIN U_PS (NOLOCK)	ON	
						U_PS.RESIDENT_ID		=	U_OPLATA.RESIDENT_ID	AND
						U_PS.PS_ID				=	U_OPLATA.PS_ID			AND
						U_PS.DEL_FLAG 			IS	NULL
				WHERE	U_OPLATA.RESIDENT_ID	=	U_DOGOVOR.RESIDENT_ID	AND
						U_OPLATA.VALK			=	U_DOGOVOR.KVALK			AND
						U_OPLATA.DIRECTION		=	'2'						AND						
						U_OPLATA.D_REFER		<	@D_CALC					AND
						(
							--	Платёж ссылается на Контракт (Договор) через Паспорт сделки
							(
								U_OPLATA.PS_ID		IS	NOT NULL			AND
								--U_OPLATA.DOG_ID		IS	NULL				AND
								--U_OPLATA.DOG_NPP	IS	NULL				AND
								--U_OPLATA.PS_ID		=	U_PS.PS_ID			AND
								U_PS.DOG_ID			=	U_DOGOVOR.DOG_ID		
							)
							OR
							--	Платёж ссылается на Контракт (Договор) напрямую
							(
								--U_OPLATA.PS_ID		IS	NULL				AND
								U_OPLATA.DOG_ID		IS	NOT NULL			AND
								--U_OPLATA.DOG_NPP	IS	NOT NULL			AND
								U_OPLATA.DOG_ID		=	U_DOGOVOR.DOG_ID		
							)
						)													AND	
						--	Код вида валютной операции входит в допустимый перечень авансовых платежей
						(
							U_OPLATA.KODOP	= '11030' OR
							U_OPLATA.KODOP	= '11040' OR
							U_OPLATA.KODOP	= '11050' OR
							U_OPLATA.KODOP	= '11060' OR
							U_OPLATA.KODOP  = '21020' OR  
							U_OPLATA.KODOP  = '21040'	
						)													AND
						U_OPLATA.DEL_FLAG		IS	NULL					
			)		AS	SUM_SPIS_AVANS,

			--	----------------------------------------------------
			--	Сумма подтверждающих документов со знаком (+)
			--	----------------------------------------------------
			(
				 SELECT ISNULL( SUM( U_SPR_CONFIRM.SUMK ), 0 )
				 FROM	U_SPR_CONFIRM (NOLOCK)
				 LEFT	OUTER JOIN U_PS (NOLOCK)	ON	
						U_PS.RESIDENT_ID			=	U_SPR_CONFIRM.RESIDENT_ID	AND
						U_PS.PS_ID					=	U_SPR_CONFIRM.PS_ID			AND
						U_PS.DEL_FLAG 				IS	NULL
				 WHERE	U_SPR_CONFIRM.RESIDENT_ID	=	U_DOGOVOR.RESIDENT_ID	AND
						U_SPR_CONFIRM.VALK			=	U_DOGOVOR.KVALK			AND
						U_SPR_CONFIRM.D_DOC			<	@D_CALC					AND
						(
							--	ПД ссылается на Контракт (Договор) через Паспорт сделки
							(
								U_SPR_CONFIRM.PS_ID		IS	NOT NULL			AND
								--U_SPR_CONFIRM.DOG_ID	IS	NULL				AND
								--U_SPR_CONFIRM.DOG_NPP	IS	NULL				AND
								--U_SPR_CONFIRM.PS_ID		=	U_PS.PS_ID			AND
								U_PS.DOG_ID				=	U_DOGOVOR.DOG_ID
							)
							OR
							--	ПД ссылается на Контракт (Договор) напрямую
							(
								--U_SPR_CONFIRM.PS_ID		IS	NULL				AND
								U_SPR_CONFIRM.DOG_ID	IS	NOT NULL			AND
								--U_SPR_CONFIRM.DOG_NPP	IS	NOT NULL			AND
								U_SPR_CONFIRM.DOG_ID	=	U_DOGOVOR.DOG_ID	
							)
						)												AND	
						(
							--	ПД с кодами 01, 02, 04
							(		
								--	Детализация явно не указана
								( 
									(
										U_SPR_CONFIRM.KODD	=	'01'	OR 
										U_SPR_CONFIRM.KODD	=	'02'	OR
										U_SPR_CONFIRM.KODD	=	'04' 
									)									AND  
									U_SPR_CONFIRM.DIRECTION	IS	NULL	AND
									(
										U_DOGOVOR.VID_KONTR	=	'2'	OR
										U_DOGOVOR.VID_KONTR	=	'4'	OR
										(
											U_DOGOVOR.VID_KONTR	=	'9' AND 
											(
												U_SPR_CONFIRM.TYPE	=	'2'	OR 
												U_SPR_CONFIRM.TYPE	=	'4' 
											) 
										) 
									)
								)		
								OR
								--	Детализация явно указана
								(
									(
										U_SPR_CONFIRM.KODD	=	'01'	OR 
										U_SPR_CONFIRM.KODD	=	'02'	OR
										U_SPR_CONFIRM.KODD	=	'04'
									)									AND  
									U_SPR_CONFIRM.DIRECTION		= '1'				
								)			
							)											
							OR
							--	ПД с кодами	12, 13
							(
								U_SPR_CONFIRM.KODD	= '12'	OR
								U_SPR_CONFIRM.KODD	= '13'				
							)
							OR
							--	ПД	с кодами 14 
							(		
								--	Детализация явно не указана
								( 
									U_SPR_CONFIRM.KODD		= '14'		AND  
									U_SPR_CONFIRM.DIRECTION	IS NULL		AND
									(
										U_DOGOVOR.VID_KONTR	=	'1'	OR
										U_DOGOVOR.VID_KONTR	=	'3'	OR  
										(
											U_DOGOVOR.VID_KONTR	=	'9'	AND	
											(	
												U_SPR_CONFIRM.TYPE	=	'1'	OR
												U_SPR_CONFIRM.TYPE	=	'3'
											) 
										) 
									)
								)		
								OR
								--	Детализация явно указана
								(
									U_SPR_CONFIRM.KODD		=	'14'	AND  
									U_SPR_CONFIRM.DIRECTION	=	'2'				
								)								
							)
						)												AND
	      				U_SPR_CONFIRM.PR_NOT_CALC	IS NULL			    AND
						U_SPR_CONFIRM.DEL_FLAG		IS NULL	
			)		AS	SUM_CONFIRM_PLUS,

			--	---------------------------------------------------------
			--	В том числе Сумма по документам, подтверждающим исполнение 
			--	обязательств иным способом
			--	со знаком (+)
			--	---------------------------------------------------------
			(
				 SELECT ISNULL( SUM( U_SPR_CONFIRM.SUMK ), 0 )
				 FROM	U_SPR_CONFIRM (NOLOCK)
				 LEFT	OUTER JOIN U_PS (NOLOCK)	ON	
						U_PS.RESIDENT_ID			=	U_SPR_CONFIRM.RESIDENT_ID	AND
						U_PS.PS_ID					=	U_SPR_CONFIRM.PS_ID			AND
						U_PS.DEL_FLAG 				IS	NULL
				 WHERE	U_SPR_CONFIRM.RESIDENT_ID	=	U_DOGOVOR.RESIDENT_ID	AND
						U_SPR_CONFIRM.VALK			=	U_DOGOVOR.KVALK			AND
						U_SPR_CONFIRM.D_DOC			<	@D_CALC					AND
						(
							--	ПД ссылается на Контракт (Договор) через Паспорт сделки
							(
								U_SPR_CONFIRM.PS_ID		IS	NOT NULL			AND
								--U_SPR_CONFIRM.DOG_ID	IS	NULL				AND
								--U_SPR_CONFIRM.DOG_NPP	IS	NULL				AND
								--U_SPR_CONFIRM.PS_ID		=	U_PS.PS_ID			AND
								U_PS.DOG_ID				=	U_DOGOVOR.DOG_ID		
							)
							OR
							--	ПД ссылается на Контракт (Договор) напрямую
							(
								--U_SPR_CONFIRM.PS_ID		IS	NULL				AND
								U_SPR_CONFIRM.DOG_ID	IS	NOT NULL			AND
								--U_SPR_CONFIRM.DOG_NPP	IS	NOT NULL			AND
								U_SPR_CONFIRM.DOG_ID	=	U_DOGOVOR.DOG_ID
							)
						)												AND	
						--	ПД	с кодами 14 
						(		
							--	Детализация явно не указана
							( 
								U_SPR_CONFIRM.KODD		= '14'		AND  
								U_SPR_CONFIRM.DIRECTION	IS NULL		AND
								(
									U_DOGOVOR.VID_KONTR	=	'1'	OR
									U_DOGOVOR.VID_KONTR	=	'3'	OR  
									(
										U_DOGOVOR.VID_KONTR	=	'9'	AND	
										(	
											U_SPR_CONFIRM.TYPE	=	'1'	OR
											U_SPR_CONFIRM.TYPE	=	'3'
										) 
									) 
								)
							)		
							OR
							--	Детализация явно указана
							(
								U_SPR_CONFIRM.KODD		=	'14'	AND  
								U_SPR_CONFIRM.DIRECTION	=	'2'				
							)								
						)											AND
	      				U_SPR_CONFIRM.PR_NOT_CALC	IS NULL		    AND
						U_SPR_CONFIRM.DEL_FLAG		IS NULL	
			)		AS	SUM_CONFIRM_14_PLUS,

			--	----------------------------------------------------
			--	Сумма подтверждающих документов со знаком (-)
			--	----------------------------------------------------
			(
				 SELECT ISNULL( SUM( U_SPR_CONFIRM.SUMK ), 0 )
				 FROM	U_SPR_CONFIRM (NOLOCK)
				 LEFT	OUTER JOIN U_PS (NOLOCK)	ON	
						U_PS.RESIDENT_ID			=	U_SPR_CONFIRM.RESIDENT_ID	AND
						U_PS.PS_ID					=	U_SPR_CONFIRM.PS_ID			AND
						U_PS.DEL_FLAG 				IS	NULL
				 WHERE	U_SPR_CONFIRM.RESIDENT_ID	=	U_DOGOVOR.RESIDENT_ID	AND
						U_SPR_CONFIRM.VALK			=	U_DOGOVOR.KVALK			AND
						U_SPR_CONFIRM.D_DOC			<	@D_CALC					AND
						(
							--	ПД ссылается на Контракт (Договор) через Паспорт сделки
							(
								U_SPR_CONFIRM.PS_ID		IS	NOT NULL			AND
								--U_SPR_CONFIRM.DOG_ID	IS	NULL				AND
								--U_SPR_CONFIRM.DOG_NPP	IS	NULL				AND
								--U_SPR_CONFIRM.PS_ID		=	U_PS.PS_ID			AND
								U_PS.DOG_ID				=	U_DOGOVOR.DOG_ID
							)
							OR
							--	ПД ссылается на Контракт (Договор) напрямую
							(
								--U_SPR_CONFIRM.PS_ID		IS	NULL				AND
								U_SPR_CONFIRM.DOG_ID	IS	NOT NULL			AND
								--U_SPR_CONFIRM.DOG_NPP	IS	NOT NULL			AND
								U_SPR_CONFIRM.DOG_ID	=	U_DOGOVOR.DOG_ID
							)
						)												AND	
						(
							--	ПД с кодами 01, 02, 04
							(		
								--	Детализация явно не указана
								( 
									(
										U_SPR_CONFIRM.KODD	=	'01'	OR
										U_SPR_CONFIRM.KODD	=	'02'	OR
										U_SPR_CONFIRM.KODD	=	'04'
									)									AND  
									U_SPR_CONFIRM.DIRECTION IS NULL		AND
									(
										U_DOGOVOR.VID_KONTR	=	'1'	OR
										U_DOGOVOR.VID_KONTR	=	'3'	OR
										(
											U_DOGOVOR.VID_KONTR	=	'9'	AND
											(
												U_SPR_CONFIRM.TYPE	=	'1'	OR
												U_SPR_CONFIRM.TYPE	=	'3'
											)
										) 
									)
								)		
								OR
								--	Детализация явно указана
								(
									(
										U_SPR_CONFIRM.KODD	=	'01'	OR
										U_SPR_CONFIRM.KODD	=	'02'	OR
										U_SPR_CONFIRM.KODD	=	'04'
									)									AND  
									U_SPR_CONFIRM.DIRECTION	= '2'				
								)			
							)						
							OR
							--	ПД с кодами	03, 05, 10, 11
							(
								U_SPR_CONFIRM.KODD	= '03'	OR
								U_SPR_CONFIRM.KODD	= '05'	OR
								U_SPR_CONFIRM.KODD	= '10'	OR
								U_SPR_CONFIRM.KODD	= '11'				
							)
							OR
							--	ПД с кодами 14
							(
								--	Детализация явно не указана
								( 
									U_SPR_CONFIRM.KODD		=	'14'	AND  
									U_SPR_CONFIRM.DIRECTION	IS	NULL	AND
									(
										U_DOGOVOR.VID_KONTR	=	'2'	OR
										U_DOGOVOR.VID_KONTR	=	'4'	OR
										(
											U_DOGOVOR.VID_KONTR	=	'9'	AND
											(	
												U_SPR_CONFIRM.TYPE	=	'2'	OR
												U_SPR_CONFIRM.TYPE	=	'4'
											)
										)
									)
								)		
								OR
								--	Детализация явно указана
								(
									U_SPR_CONFIRM.KODD		=	'14'	AND  
									U_SPR_CONFIRM.DIRECTION	=	'1'				
								 )			
							)
						)											AND	
	      				U_SPR_CONFIRM.PR_NOT_CALC	IS NULL		    AND
						U_SPR_CONFIRM.DEL_FLAG		IS NULL	
			)		AS	SUM_CONFIRM_MINUS,

			--	---------------------------------------------------------
			--	В том числе Сумма по документам, подтверждающим исполнение 
			--	обязательств иным способом
			--	со знаком (-)
			--	---------------------------------------------------------
			(
				 SELECT ISNULL( SUM( U_SPR_CONFIRM.SUMK ), 0 )
				 FROM	U_SPR_CONFIRM (NOLOCK)
				 LEFT	OUTER JOIN U_PS (NOLOCK)	ON	
						U_PS.RESIDENT_ID			=	U_SPR_CONFIRM.RESIDENT_ID	AND
						U_PS.PS_ID					=	U_SPR_CONFIRM.PS_ID			AND
						U_PS.DEL_FLAG 				IS	NULL
				 WHERE	U_SPR_CONFIRM.RESIDENT_ID	=	U_DOGOVOR.RESIDENT_ID	AND
						U_SPR_CONFIRM.VALK			=	U_DOGOVOR.KVALK			AND
						U_SPR_CONFIRM.D_DOC			<	@D_CALC					AND
						(
							--	ПД ссылается на Контракт (Договор) через Паспорт сделки
							(
								U_SPR_CONFIRM.PS_ID		IS	NOT NULL			AND
								--U_SPR_CONFIRM.DOG_ID	IS	NULL				AND
								--U_SPR_CONFIRM.DOG_NPP	IS	NULL				AND
								--U_SPR_CONFIRM.PS_ID		=	U_PS.PS_ID			AND
								U_PS.DOG_ID				=	U_DOGOVOR.DOG_ID
							)
							OR
							--	ПД ссылается на Контракт (Договор) напрямую
							(
								--U_SPR_CONFIRM.PS_ID		IS	NULL				AND
								U_SPR_CONFIRM.DOG_ID	IS	NOT NULL			AND
								--U_SPR_CONFIRM.DOG_NPP	IS	NOT NULL			AND
								U_SPR_CONFIRM.DOG_ID	=	U_DOGOVOR.DOG_ID
							)
						)												AND	
						--	ПД с кодами 14
						(
							--	Детализация явно не указана
							( 
								U_SPR_CONFIRM.KODD		=	'14'	AND  
								U_SPR_CONFIRM.DIRECTION	IS	NULL	AND
								(
									U_DOGOVOR.VID_KONTR	=	'2'	OR
									U_DOGOVOR.VID_KONTR	=	'4'	OR
									(
										U_DOGOVOR.VID_KONTR	=	'9'	AND
										(	
											U_SPR_CONFIRM.TYPE	=	'2'	OR
											U_SPR_CONFIRM.TYPE	=	'4'
										)
									)
								)
							)		
							OR
							--	Детализация явно указана
							(
								U_SPR_CONFIRM.KODD		=	'14'	AND  
								U_SPR_CONFIRM.DIRECTION	=	'1'				
							 )			
						)											AND
	      				U_SPR_CONFIRM.PR_NOT_CALC	IS NULL			AND
						U_SPR_CONFIRM.DEL_FLAG		IS NULL	
			)		AS	SUM_CONFIRM_14_MINUS,

			--	--------------------------------
			--	Сальдо расчётов по контракту
			--	--------------------------------
			(
				--	-------------------------------
				--	Сумма зачислений
				--	-------------------------------
				(
					SELECT	ISNULL( SUM( U_OPLATA.SUMK ), 0 )
					FROM	U_OPLATA (NOLOCK)
					INNER	JOIN VIDOP	(NOLOCK)	ON	
							VIDOP.KOD		=	U_OPLATA.KODOP	AND	
							VIDOP.PR_SALDO	=	1
					LEFT	OUTER JOIN U_PS (NOLOCK)	ON	
							U_PS.RESIDENT_ID		=	U_OPLATA.RESIDENT_ID	AND
							U_PS.PS_ID				=	U_OPLATA.PS_ID			AND
							U_PS.DEL_FLAG 			IS	NULL
					WHERE	U_OPLATA.RESIDENT_ID	=	U_DOGOVOR.RESIDENT_ID	AND
							U_OPLATA.VALK			=	U_DOGOVOR.KVALK			AND
							U_OPLATA.DIRECTION		=	'1'						AND						
							U_OPLATA.D_REFER		<	@D_CALC					AND
							(
								--	Платёж ссылается на Контракт (Договор) через Паспорт сделки
								(
									U_OPLATA.PS_ID		IS	NOT NULL			AND
									--U_OPLATA.DOG_ID		IS	NULL				AND
									--U_OPLATA.DOG_NPP	IS	NULL				AND
									--U_OPLATA.PS_ID		=	U_PS.PS_ID			AND
									U_PS.DOG_ID			=	U_DOGOVOR.DOG_ID	
								)
								OR
								--	Платёж ссылается на Контракт (Договор) напрямую
								(
									--U_OPLATA.PS_ID		IS	NULL				AND
									U_OPLATA.DOG_ID		IS	NOT NULL			AND
									--U_OPLATA.DOG_NPP	IS	NOT NULL			AND
									U_OPLATA.DOG_ID		=	U_DOGOVOR.DOG_ID		
								)
							)													AND	
							U_OPLATA.DEL_FLAG		IS	NULL					
				)		

				-

				--	-------------------------------
				--	Сумма списаний
				--	-------------------------------
				(
					SELECT	ISNULL( SUM( U_OPLATA.SUMK ), 0 )
					FROM	U_OPLATA (NOLOCK)
					INNER	JOIN VIDOP (NOLOCK)	ON	
							VIDOP.KOD		=	U_OPLATA.KODOP	AND	
							VIDOP.PR_SALDO	=	1
					LEFT	OUTER JOIN U_PS (NOLOCK)	ON	
							U_PS.RESIDENT_ID		=	U_OPLATA.RESIDENT_ID	AND
							U_PS.PS_ID				=	U_OPLATA.PS_ID			AND
							U_PS.DEL_FLAG 			IS	NULL
					WHERE	U_OPLATA.RESIDENT_ID	=	U_DOGOVOR.RESIDENT_ID	AND
							U_OPLATA.VALK			=	U_DOGOVOR.KVALK			AND
							U_OPLATA.DIRECTION		=	'2'						AND						
							U_OPLATA.D_REFER		<	@D_CALC					AND
							(
								--	Платёж ссылается на Контракт (Договор) через Паспорт сделки
								(
									U_OPLATA.PS_ID		IS	NOT NULL			AND
									--U_OPLATA.DOG_ID		IS	NULL				AND
									--U_OPLATA.DOG_NPP	IS	NULL				AND
									--U_OPLATA.PS_ID		=	U_PS.PS_ID			AND
									U_PS.DOG_ID			=	U_DOGOVOR.DOG_ID	
								)
								OR
								--	Платёж ссылается на Контракт (Договор) напрямую
								(
									--U_OPLATA.PS_ID		IS	NULL				AND
									U_OPLATA.DOG_ID		IS	NOT NULL			AND
									--U_OPLATA.DOG_NPP	IS	NOT NULL			AND
									U_OPLATA.DOG_ID		=	U_DOGOVOR.DOG_ID	
								)
							)													AND	
							U_OPLATA.DEL_FLAG		IS	NULL					
				)

				+

				--	----------------------------------------------------
				--	Сумма подтверждающих документов со знаком (+)
				--	----------------------------------------------------
				(
					 SELECT ISNULL( SUM( U_SPR_CONFIRM.SUMK ), 0 )
					 FROM	U_SPR_CONFIRM (NOLOCK)
					 LEFT	OUTER JOIN U_PS (NOLOCK)	ON	
							U_PS.RESIDENT_ID			=	U_SPR_CONFIRM.RESIDENT_ID	AND
							U_PS.PS_ID					=	U_SPR_CONFIRM.PS_ID			AND
							U_PS.DEL_FLAG 				IS	NULL
					 WHERE	U_SPR_CONFIRM.RESIDENT_ID	=	U_DOGOVOR.RESIDENT_ID	AND
							U_SPR_CONFIRM.VALK			=	U_DOGOVOR.KVALK			AND
							U_SPR_CONFIRM.D_DOC			<	@D_CALC					AND
							(
								--	ПД ссылается на Контракт (Договор) через Паспорт сделки
								(
									U_SPR_CONFIRM.PS_ID		IS	NOT NULL			AND
									--U_SPR_CONFIRM.DOG_ID	IS	NULL				AND
									--U_SPR_CONFIRM.DOG_NPP	IS	NULL				AND
									--U_SPR_CONFIRM.PS_ID		=	U_PS.PS_ID			AND
									U_PS.DOG_ID				=	U_DOGOVOR.DOG_ID
								)
								OR
								--	ПД ссылается на Контракт (Договор) напрямую
								(
									--U_SPR_CONFIRM.PS_ID		IS	NULL				AND
									U_SPR_CONFIRM.DOG_ID	IS	NOT NULL			AND
									--U_SPR_CONFIRM.DOG_NPP	IS	NOT NULL			AND
									U_SPR_CONFIRM.DOG_ID	=	U_DOGOVOR.DOG_ID
								)
							)												AND	
							(
								--	ПД с кодами 01, 02, 04
								(		
									--	Детализация явно не указана
									( 
										(
											U_SPR_CONFIRM.KODD	=	'01'	OR 
											U_SPR_CONFIRM.KODD	=	'02'	OR
											U_SPR_CONFIRM.KODD	=	'04' 
										)									AND  
										U_SPR_CONFIRM.DIRECTION	IS	NULL	AND
										(
											U_DOGOVOR.VID_KONTR	=	'2'	OR
											U_DOGOVOR.VID_KONTR	=	'4'	OR
											(
												U_DOGOVOR.VID_KONTR	=	'9' AND 
												(
													U_SPR_CONFIRM.TYPE	=	'2'	OR 
													U_SPR_CONFIRM.TYPE	=	'4' 
												) 
											) 
										)
									)		
									OR
									--	Детализация явно указана
									(
										(
											U_SPR_CONFIRM.KODD	=	'01'	OR 
											U_SPR_CONFIRM.KODD	=	'02'	OR
											U_SPR_CONFIRM.KODD	=	'04'
										)									AND  
										U_SPR_CONFIRM.DIRECTION		= '1'				
									)			
								)											
								OR
								--	ПД с кодами	12, 13
								(
									U_SPR_CONFIRM.KODD	= '12'	OR
									U_SPR_CONFIRM.KODD	= '13'				
								)
								OR
								--	ПД	с кодами 14 
								(		
									--	Детализация явно не указана
									( 
										U_SPR_CONFIRM.KODD		= '14'		AND  
										U_SPR_CONFIRM.DIRECTION	IS NULL		AND
										(
											U_DOGOVOR.VID_KONTR	=	'1'	OR
											U_DOGOVOR.VID_KONTR	=	'3'	OR  
											(
												U_DOGOVOR.VID_KONTR	=	'9'	AND	
												(	
													U_SPR_CONFIRM.TYPE	=	'1'	OR
													U_SPR_CONFIRM.TYPE	=	'3'
												) 
											) 
										)
									)		
									OR
									--	Детализация явно указана
									(
										U_SPR_CONFIRM.KODD		=	'14'	AND  
										U_SPR_CONFIRM.DIRECTION	=	'2'				
									)								
								)
							)												AND
		      				U_SPR_CONFIRM.PR_NOT_CALC	IS NULL			    AND
							U_SPR_CONFIRM.DEL_FLAG		IS NULL	

				)		

				-

				--	----------------------------------------------------
				--	Сумма подтверждающих документов со знаком (-)
				--	----------------------------------------------------
				(
					 SELECT ISNULL( SUM( U_SPR_CONFIRM.SUMK ), 0 )
					 FROM	U_SPR_CONFIRM (NOLOCK)
					 LEFT	OUTER JOIN U_PS (NOLOCK)	ON	
							U_PS.RESIDENT_ID			=	U_SPR_CONFIRM.RESIDENT_ID	AND
							U_PS.PS_ID					=	U_SPR_CONFIRM.PS_ID			AND
							U_PS.DEL_FLAG 				IS	NULL
					 WHERE	U_SPR_CONFIRM.RESIDENT_ID	=	U_DOGOVOR.RESIDENT_ID	AND
							U_SPR_CONFIRM.VALK			=	U_DOGOVOR.KVALK			AND
							U_SPR_CONFIRM.D_DOC			<	@D_CALC					AND
							(
								--	ПД ссылается на Контракт (Договор) через Паспорт сделки
								(
									U_SPR_CONFIRM.PS_ID		IS	NOT NULL			AND
									--U_SPR_CONFIRM.DOG_ID	IS	NULL				AND
									--U_SPR_CONFIRM.DOG_NPP	IS	NULL				AND
									--U_SPR_CONFIRM.PS_ID		=	U_PS.PS_ID			AND
									U_PS.DOG_ID				=	U_DOGOVOR.DOG_ID
								)
								OR
								--	ПД ссылается на Контракт (Договор) напрямую
								(
									--U_SPR_CONFIRM.PS_ID		IS	NULL				AND
									U_SPR_CONFIRM.DOG_ID	IS	NOT NULL			AND
									--U_SPR_CONFIRM.DOG_NPP	IS	NOT NULL			AND
									U_SPR_CONFIRM.DOG_ID	=	U_DOGOVOR.DOG_ID
								)
							)												AND	
							(
								--	ПД с кодами 01, 02, 04
								(		
									--	Детализация явно не указана
									( 
										(
											U_SPR_CONFIRM.KODD	=	'01'	OR
											U_SPR_CONFIRM.KODD	=	'02'	OR
											U_SPR_CONFIRM.KODD	=	'04'
										)									AND  
										U_SPR_CONFIRM.DIRECTION IS NULL		AND
										(
											U_DOGOVOR.VID_KONTR	=	'1'	OR
											U_DOGOVOR.VID_KONTR	=	'3'	OR
											(
												U_DOGOVOR.VID_KONTR	=	'9'	AND
												(
													U_SPR_CONFIRM.TYPE	=	'1'	OR
													U_SPR_CONFIRM.TYPE	=	'3'
												)
											) 
										)
									)		
									OR
									--	Детализация явно	указана
									(
										(
											U_SPR_CONFIRM.KODD	=	'01'	OR
											U_SPR_CONFIRM.KODD	=	'02'	OR
											U_SPR_CONFIRM.KODD	=	'04'
										)									AND  
										U_SPR_CONFIRM.DIRECTION	= '2'				
									)			
								)						
								OR
								--	ПД с кодами	03, 05, 10, 11
								(
									U_SPR_CONFIRM.KODD	= '03'	OR
									U_SPR_CONFIRM.KODD	= '05'	OR
									U_SPR_CONFIRM.KODD	= '10'	OR
									U_SPR_CONFIRM.KODD	= '11'				
								)
								OR
								--	ПД с кодами 14
								(
									--	Детализация явно не указана
									( 
										U_SPR_CONFIRM.KODD		=	'14'	AND  
										U_SPR_CONFIRM.DIRECTION	IS	NULL	AND
										(
											U_DOGOVOR.VID_KONTR	=	'2'	OR
											U_DOGOVOR.VID_KONTR	=	'4'	OR
											(
												U_DOGOVOR.VID_KONTR	=	'9'	AND
												(	
													U_SPR_CONFIRM.TYPE	=	'2'	OR
													U_SPR_CONFIRM.TYPE	=	'4'
												)
											)
										)
									)		
									OR
									--	Детализация явно указана
									(
										U_SPR_CONFIRM.KODD		=	'14'	AND  
										U_SPR_CONFIRM.DIRECTION	=	'1'				
									 )			
								)
							)												AND
			   				U_SPR_CONFIRM.PR_NOT_CALC	IS NULL			    AND
							U_SPR_CONFIRM.DEL_FLAG		IS NULL	
				)
			)		AS	SALDO
	FROM	U_DOGOVOR (NOLOCK)
	INNER	JOIN	U_USERS_RESIDENTS (NOLOCK) ON 
			U_USERS_RESIDENTS.RESIDENT_ID	= U_DOGOVOR.RESIDENT_ID		AND
			U_USERS_RESIDENTS.USER_ID		= @USER_ID
	INNER	JOIN	U_RESIDENTS (NOLOCK) ON	
			U_RESIDENTS.RESIDENT_ID			= U_DOGOVOR.RESIDENT_ID		AND
			U_RESIDENTS.DEL_FLAG 			IS NULL	
	INNER	JOIN	U_IN_PART (NOLOCK) ON
			U_IN_PART.PARTNER_ID			=	U_DOGOVOR.PARTNER_ID	AND
			U_IN_PART.DEL_FLAG				IS NULL
	WHERE	-- отбор по Участнику ВЭД
			(
				@RESIDENT_ID 			= 0 			OR
				U_DOGOVOR.RESIDENT_ID	= @RESIDENT_ID	 
			)															AND
			-- отбор по Виду Договора (контракта)
			( 
				@VID_KONTR				=	'0'			OR
				U_DOGOVOR.VID_KONTR		=	@VID_KONTR
			)															AND
			-- отбор по Договору (контракту)
			( 
				@DOG_ID					=	0			OR
				U_DOGOVOR.DOG_ID		=	@DOG_ID
			)															AND
			-- отбор по Иностранному контрагенту
			(
				@PARTNER_ID 			= 0 			OR
				U_IN_PART.PARTNER_ID	= @PARTNER_ID	 
			)															AND
			-- только Контракты
			CHARINDEX(U_DOGOVOR.VID_KONTR, '12349') > 0					AND
			-- отбор по диапазону Даты завершения исполнения обязательств
			(	@D_END_BEG	IS NULL		OR
				ISNULL( [dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID), CONVERT(DATETIME, '30000606' ))	>= ISNULL(@D_END_BEG, CONVERT(DATETIME, '19000101'))
			)	AND
			(	@D_END_END	IS NULL		OR
				ISNULL( [dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID), CONVERT(DATETIME, '30000606' ))	<= ISNULL(@D_END_END, CONVERT(DATETIME, '30000606'))	
			)	AND
			U_DOGOVOR.DEL_FLAG			IS	NULL
	--GROUP	BY U_DOGOVOR.RESIDENT_ID, U_IN_PART.NAMEP, U_DOGOVOR.DOG_ID, U_DOGOVOR.VID_KONTR, U_DOGOVOR.N_KONTR, U_DOGOVOR.D_KONTR, U_DOGOVOR.KVALK
	GROUP	BY U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID, U_DOGOVOR.VID_KONTR, U_DOGOVOR.N_KONTR, U_DOGOVOR.D_KONTR, U_DOGOVOR.KVALK, U_IN_PART.NAMEP
	ORDER	BY NAMER_CR, U_DOGOVOR.N_KONTR, U_DOGOVOR.D_KONTR, U_DOGOVOR.KVALK
GO

GRANT  EXECUTE  ON [dbo].[U_DOGOVOR_LIST_SALDO]  TO [OPERS], [AUDITS]
GO

--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[U_DOGOVOR_LIST_ZADOL]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[U_DOGOVOR_LIST_ZADOL]
GO

CREATE PROCEDURE [dbo].[U_DOGOVOR_LIST_ZADOL]
--	----------------------------------------------------------------------------------------------
--	Задолженность по основному долгу по Договору (кредиту) на определённую дату
--	----------------------------------------------------------------------------------------------
--	@USER_ID 		-	идентификатор пользователя
--	@RESIDENT_ID 	-	идентификатор Участника ВЭД (если 0, то все Участники ВЭД)
--	@VID_KONTR		- 	вид Договора (если '0', то для всех видов)
--	@DOG_ID 		-	идентификатор Договора ( если 0, то все Договоры с типом 5 и 6)
--	@D_END_BEG		-	нижняя граница диапазона дат окончания исполнения обязательств по договору	
--	@D_END_END		-	верхняя граница диапазона дат окончания исполнения обязательств по договору
--	@D_CALC			-	дата, на которую расчитывается задолженность
--	-----------------------------------------------------------------------------------------------
--	(Модификация	в версии 2.1.0)
--	-----------------------------------------------------------------------------------------------
(
	@USER_ID		AS VARCHAR(30),
	@RESIDENT_ID	AS INTEGER,
	@VID_KONTR		AS CHAR(10)			=	'0',
	@DOG_ID			AS INTEGER,
	@D_END_BEG		AS DATETIME			=	NULL,
	@D_END_END		AS DATETIME			=	NULL,
	@D_CALC			AS SMALLDATETIME	=	NULL
)
AS
	SET NOCOUNT ON

	--	-------------------------------------
	--	Нвчальные значения
	--	-------------------------------------
	--	Ecли не указана дата расчёта, то расчёт производится на текущую дату
	IF	@D_CALC	IS NULL
		SELECT	@D_CALC	= CONVERT( SMALLDATETIME, GETDATE() )

	--	Для точности расчёта будем применять "<" вместо "<="
	--	Поэтому увеличиваем расчётную дату на 1-н день
	SELECT	@D_CALC	= DATEADD( day, 1, @D_CALC )

	SELECT	@RESIDENT_ID	= ISNULL(@RESIDENT_ID, 0)
	SELECT	@VID_KONTR		= ISNULL(@VID_KONTR, '0')
	SELECT	@DOG_ID			= ISNULL(@DOG_ID, 0)

	--	--------------------------------------------
	--	Непосредственно вывод информации
	--	--------------------------------------------
	SELECT	--	-------------------------------
			--	Основная информация	
			--	-------------------------------
			U_DOGOVOR.RESIDENT_ID, 
			ISNULL(MAX(U_RESIDENTS.NAMER_S), MAX(U_RESIDENTS.NAMER))	AS NAMER_CR,
			U_DOGOVOR.DOG_ID,
			U_DOGOVOR.VID_KONTR, 
			U_DOGOVOR.N_KONTR, 
			U_DOGOVOR.D_KONTR, 

			--	-----------------------------------------
			--	Дата завершения исполнения обязательств
			--	-----------------------------------------
			[dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID)		AS D_END,

			--	-------------------------------
			--	Код валюты Договора	
			--	-------------------------------
			U_DOGOVOR.KVALK		AS	KVALK,
							
			--	--------------------------------------------------
			--	Сумма предоставленных заёмных средств для типа '5'
			--	Сумма полученных заёмных средств для типа '6'
			--	--------------------------------------------------
			(
				SELECT	ISNULL(	SUM(U_OPLATA.SUMK), 0 )
				FROM	U_OPLATA (NOLOCK)
				LEFT	OUTER JOIN U_PS (NOLOCK)	ON	
						U_PS.RESIDENT_ID		=	U_OPLATA.RESIDENT_ID	AND
						U_PS.PS_ID				=	U_OPLATA.PS_ID			AND
						U_PS.DEL_FLAG 			IS	NULL
				WHERE	U_OPLATA.RESIDENT_ID 	=	U_DOGOVOR.RESIDENT_ID	AND
						U_OPLATA.VALK			=	U_DOGOVOR.KVALK			AND
						U_OPLATA.D_REFER		<	@D_CALC					AND
						(
							--	Платёж ссылается на Контракт (Договор) через Паспорт сделки
							(
								U_OPLATA.PS_ID		IS	NOT NULL			AND
								--U_OPLATA.DOG_ID		IS	NULL				AND
								--U_OPLATA.DOG_NPP	IS	NULL				AND
								--U_OPLATA.PS_ID		=	U_PS.PS_ID			AND
								U_PS.DOG_ID			=	U_DOGOVOR.DOG_ID	
							)
							OR
							--	Платёж ссылается на Контракт (Договор) напрямую
							(
								--U_OPLATA.PS_ID		IS	NULL				AND
								U_OPLATA.DOG_ID		IS	NOT NULL			AND
								--U_OPLATA.DOG_NPP	IS	NOT NULL			AND
								U_OPLATA.DOG_ID		=	U_DOGOVOR.DOG_ID	
							)
						)													AND					
						(
							(
								( 
									U_OPLATA.KODOP	= '40010' OR 
									U_OPLATA.KODOP	= '40020' 
								)											AND
								U_OPLATA.DIRECTION	= '2'					AND
								U_DOGOVOR.VID_KONTR	= '5'
							)	
							OR
							(
								(
									U_OPLATA.KODOP	= '41010' OR 
									U_OPLATA.KODOP	= '41020' 
								)											AND
								U_OPLATA.DIRECTION	= '1'	AND
								U_DOGOVOR.VID_KONTR	= '6'
							)
						)													AND
						U_OPLATA.DEL_FLAG		IS NULL
			)			AS	SUM_OPLATA_PLUS,

			--	--------------------------------------------------------------------------
			--	Сумма средств, зачисленных в счёт погашения основного долга для типа '5'
			--	Сумма средств, переведённых в счёт погашения основного долга для типа '6'
			--	--------------------------------------------------------------------------
			(
				SELECT	ISNULL(	SUM(U_OPLATA.SUMK), 0 )
				FROM	U_OPLATA (NOLOCK)
				LEFT	OUTER JOIN U_PS (NOLOCK)	ON	
						U_PS.RESIDENT_ID		=	U_OPLATA.RESIDENT_ID	AND
						U_PS.PS_ID				=	U_OPLATA.PS_ID			AND
						U_PS.DEL_FLAG 			IS	NULL
				WHERE	U_OPLATA.RESIDENT_ID 	=	U_DOGOVOR.RESIDENT_ID	AND
						U_OPLATA.VALK			=	U_DOGOVOR.KVALK			AND
						U_OPLATA.D_REFER		<	@D_CALC					AND
						(
							--	Платёж ссылается на Контракт (Договор) через Паспорт сделки
							(
								U_OPLATA.PS_ID		IS	NOT NULL			AND
								--U_OPLATA.DOG_ID		IS	NULL				AND
								--U_OPLATA.DOG_NPP	IS	NULL				AND
								--U_OPLATA.PS_ID		=	U_PS.PS_ID			AND
								U_PS.DOG_ID			=	U_DOGOVOR.DOG_ID	
							)
							OR
							--	Платёж ссылается на Контракт (Договор) напрямую
							(
								--U_OPLATA.PS_ID		IS	NULL				AND
								U_OPLATA.DOG_ID		IS	NOT NULL			AND
								--U_OPLATA.DOG_NPP	IS	NOT NULL			AND
								U_OPLATA.DOG_ID		=	U_DOGOVOR.DOG_ID		
							)
						)													AND					
						(
							(
								( 
									U_OPLATA.KODOP	= '43010' OR 
									U_OPLATA.KODOP	= '43020' 
								)											AND
								U_OPLATA.DIRECTION	= '1'					AND				
								U_DOGOVOR.VID_KONTR	= '5'			
							)	
							OR
							(
								( 
									U_OPLATA.KODOP	= '42010' OR 
									U_OPLATA.KODOP	= '42020' 
								)											AND
								U_OPLATA.DIRECTION	= '2'					AND
								U_DOGOVOR.VID_KONTR	= '6'
							)
						)													AND
						U_OPLATA.DEL_FLAG		IS	NULL		
			)			AS	SUM_OPLATA_MINUS,
	
			--	------------------------------------------------------------------------------------
			--	Сумма уменьшения задолженности по основному долгу по иным основаниям (-) уменьшение
			--	------------------------------------------------------------------------------------
			(
				SELECT	ISNULL(	SUM(U_ISPOLNEN.SUMK), 0 )
				FROM	U_ISPOLNEN (NOLOCK)
				LEFT	OUTER JOIN U_PS (NOLOCK)	ON	
						U_PS.RESIDENT_ID		=	U_ISPOLNEN.RESIDENT_ID		AND
						U_PS.PS_ID				=	U_ISPOLNEN.PS_ID			AND
						U_PS.DEL_FLAG 			IS	NULL
				WHERE	U_ISPOLNEN.RESIDENT_ID		=	U_DOGOVOR.RESIDENT_ID	AND
						U_ISPOLNEN.VALK				=	U_DOGOVOR.KVALK			AND
						U_ISPOLNEN.D_DOC			<	@D_CALC					AND
						U_ISPOLNEN.KODZ 			>=	'02'					AND
						U_ISPOLNEN.KODZ 			<=	'12'					AND							
						(
							--	Cсылка на Контракт (Договор) через Паспорт сделки
							(
								U_ISPOLNEN.PS_ID	IS	NOT NULL			AND
--	------------------------------------------------------------------------------
-- !!! Внимание:	Данный фрагмент обеспечивает будущую функциональность
-- !!!				Убрать комментарии с данного фрагмента, только после внесения
-- !!!				полей DOG_ID и DOG_NPP в структуру таблицы U_ISPOLNEN  
--	------------------------------------------------------------------------------
--								U_ISPOLNEN.DOG_ID	IS	NULL				AND
--								U_ISPOLNEN.DOG_NPP	IS	NULL				AND
								--U_ISPOLNEN.PS_ID	=	U_PS.PS_ID			AND
								U_PS.DOG_ID			=	U_DOGOVOR.DOG_ID		
							)
--	------------------------------------------------------------------------------
-- !!! Внимание:	Данный фрагмент обеспечивает будущую функциональность
-- !!!				Убрать комментарии с данного фрагмента, только после внесения
-- !!!				полей DOG_ID и DOG_NPP в структуру таблицы U_ISPOLNEN  
--	------------------------------------------------------------------------------
--							OR
--							--	Ссылка на Контракт (Договор) напрямую
--							(
--								U_ISPOLNEN.PS_ID	IS	NULL				AND
--								U_ISPOLNEN.DOG_ID	IS	NOT NULL			AND
--								U_ISPOLNEN.DOG_NPP	IS	NOT NULL			AND
--								U_ISPOLNEN.DOG_ID	=	U_DOGOVOR.DOG_ID											
--							)
						)													AND					
						U_ISPOLNEN.DEL_FLAG			IS	NULL				
			)			AS	SUM_ISPOLNEN_MINUS,

			--	-------------------------------------------------------------------------------------
			--	Сумма увеличения задолженности по основному долгу по иным основаниям (+) увеличение
			--	-------------------------------------------------------------------------------------
			(
				SELECT	ISNULL(	SUM(U_ISPOLNEN.SUMK), 0 )
				FROM	U_ISPOLNEN (NOLOCK)
				LEFT	OUTER JOIN U_PS (NOLOCK)	ON	
						U_PS.RESIDENT_ID		=	U_ISPOLNEN.RESIDENT_ID	AND
						U_PS.PS_ID				=	U_ISPOLNEN.PS_ID		AND
						U_PS.DEL_FLAG 			IS	NULL
				WHERE	U_ISPOLNEN.RESIDENT_ID		=	U_DOGOVOR.RESIDENT_ID	AND
						U_ISPOLNEN.VALK				=	U_DOGOVOR.KVALK			AND
						U_ISPOLNEN.D_DOC			<	@D_CALC					AND
						U_ISPOLNEN.KODZ 			=	'13'					AND
						(
							--	Cсылка на Контракт (Договор) через Паспорт сделки
							(
								U_ISPOLNEN.PS_ID	IS	NOT NULL			AND
--	------------------------------------------------------------------------------
-- !!! Внимание:	Данный фрагмент обеспечивает будущую функциональность
-- !!!				Убрать комментарии с данного фрагмента, только после внесения
-- !!!				полей DOG_ID и DOG_NPP в структуру таблицы U_ISPOLNEN  
--	------------------------------------------------------------------------------
--								U_ISPOLNEN.DOG_ID	IS	NULL				AND
--								U_ISPOLNEN.DOG_NPP	IS	NULL				AND
								--U_ISPOLNEN.PS_ID	=	U_PS.PS_ID			AND
								U_PS.DOG_ID			=	U_DOGOVOR.DOG_ID		
							)
--	------------------------------------------------------------------------------
-- !!! Внимание:	Данный фрагмент обеспечивает будущую функциональность
-- !!!				Убрать комментарии с данного фрагмента, только после внесения
-- !!!				полей DOG_ID и DOG_NPP в структуру таблицы U_ISPOLNEN  
--	------------------------------------------------------------------------------
--							OR
--							--	Ссылка на Контракт (Договор) напрямую
--							(
--								U_ISPOLNEN.PS_ID	IS	NULL				AND
--								U_ISPOLNEN.DOG_ID	IS	NOT NULL			AND
--								U_ISPOLNEN.DOG_NPP	IS	NOT NULL			AND
--								U_ISPOLNEN.DOG_ID	=	U_DOGOVOR.DOG_ID		
--							)
						)													AND					
						U_ISPOLNEN.DEL_FLAG			IS	NULL				
			)			AS	SUM_ISPOLNEN_PLUS,

			--	----------------------------------------------------------------------
			--	Увеличение (начисление) суммы задолженности в "новой" валюте 
			--	в случае изменения кода валюты цены кредитного договора
			--	----------------------------------------------------------------------
			(
				SELECT	ISNULL(	SUM(U_PS_IZMEN_ZADOL.SUMK), 0 )	
				FROM	U_PS_IZMEN_ZADOL (NOLOCK)
				LEFT	OUTER JOIN U_PS (NOLOCK)	ON	
						U_PS.RESIDENT_ID		=	U_PS_IZMEN_ZADOL.RESIDENT_ID	AND
						U_PS.PS_ID				=	U_PS_IZMEN_ZADOL.PS_ID			AND
						U_PS.DEL_FLAG 			IS	NULL
				WHERE	U_PS_IZMEN_ZADOL.RESIDENT_ID	=	U_DOGOVOR.RESIDENT_ID	AND
						U_PS_IZMEN_ZADOL.VALK			=	U_DOGOVOR.KVALK			AND
						U_PS_IZMEN_ZADOL.D_IZM			<	@D_CALC					AND
						U_PS_IZMEN_ZADOL.KOD			=	'00151'					AND		
						(
							--	Cсылка на Контракт (Договор) через Паспорт сделки
							(
								U_PS_IZMEN_ZADOL.PS_ID	IS	NOT NULL			AND
--	------------------------------------------------------------------------------
-- !!! Внимание:	Данный фрагмент обеспечивает будущую функциональность
-- !!!				Убрать комментарии с данного фрагмента, только после внесения
-- !!!				полей DOG_ID и DOG_NPP в структуру таблицы U_PS_IZMEN_ZADOL  
--	------------------------------------------------------------------------------
--								U_PS_IZMEN_ZADOL.DOG_ID		IS	NULL		AND
--								U_PS_IZMEN_ZADOL.DOG_NPP	IS	NULL		AND
								--U_PS_IZMEN_ZADOL.PS_ID		=	U_PS.PS_ID			AND
								U_PS.DOG_ID					=	U_DOGOVOR.DOG_ID	
							)
--	------------------------------------------------------------------------------
-- !!! Внимание:	Данный фрагмент обеспечивает будущую функциональность
-- !!!				Убрать комментарии с данного фрагмента, только после внесения
-- !!!				полей DOG_ID и DOG_NPP в структуру таблицы U_PS_IZMEN_ZADOL  
--	------------------------------------------------------------------------------
--							OR
--							--	Ссылка на Контракт (Договор) напрямую
--							(
--								U_PS_IZMEN_ZADOL.PS_ID		IS	NULL				AND
--								U_PS_IZMEN_ZADOL.DOG_ID		IS	NOT NULL			AND
--								U_PS_IZMEN_ZADOL.DOG_NPP	IS	NOT NULL			AND
--								U_PS_IZMEN_ZADOL.DOG_ID		=	U_DOGOVOR.DOG_ID	
--							)
						)													AND					
						U_PS_IZMEN_ZADOL.DEL_FLAG		IS	NULL				
			)			AS	SUM_ISPOLNEN_CHANGE_VALK_PLUS,

			--	----------------------------------------------------------------------
			--	Уменьшение (списание) текущей задолженности в "старой" валюте 
			--	в случае изменения кода валюты цены кредитного договора
			--	----------------------------------------------------------------------
			(
				SELECT	ISNULL(	SUM(U_PS_IZMEN_ZADOL.SUMK), 0 )	
				FROM	U_PS_IZMEN_ZADOL (NOLOCK)
				LEFT	OUTER JOIN U_PS (NOLOCK)	ON	
						U_PS.RESIDENT_ID		=	U_PS_IZMEN_ZADOL.RESIDENT_ID	AND
						U_PS.PS_ID				=	U_PS_IZMEN_ZADOL.PS_ID			AND
						U_PS.DEL_FLAG 			IS	NULL
				WHERE	U_PS_IZMEN_ZADOL.RESIDENT_ID	=	U_DOGOVOR.RESIDENT_ID	AND
						U_PS_IZMEN_ZADOL.VALK			=	U_DOGOVOR.KVALK			AND
						U_PS_IZMEN_ZADOL.D_IZM			<	@D_CALC					AND
						U_PS_IZMEN_ZADOL.KOD			=	'00152'					AND		
						(
							--	Cсылка на Контракт (Договор) через Паспорт сделки
							(
								U_PS_IZMEN_ZADOL.PS_ID	IS	NOT NULL			AND
--	------------------------------------------------------------------------------
-- !!! Внимание:	Данный фрагмент обеспечивает будущую функциональность
-- !!!				Убрать комментарии с данного фрагмента, только после внесения
-- !!!				полей DOG_ID и DOG_NPP в структуру таблицы U_PS_IZMEN_ZADOL  
--	------------------------------------------------------------------------------
--								U_PS_IZMEN_ZADOL.DOG_ID		IS	NULL			AND
--								U_PS_IZMEN_ZADOL.DOG_NPP	IS	NULL			AND
								--U_PS_IZMEN_ZADOL.PS_ID		=	U_PS.PS_ID			AND
								U_PS.DOG_ID					=	U_DOGOVOR.DOG_ID	
							)
--	------------------------------------------------------------------------------
-- !!! Внимание:	Данный фрагмент обеспечивает будущую функциональность
-- !!!				Убрать комментарии с данного фрагмента, только после внесения
-- !!!				полей DOG_ID и DOG_NPP в структуру таблицы U_PS_IZMEN_ZADOL  
--	------------------------------------------------------------------------------
--							OR
--							--	Ссылка на Контракт (Договор) напрямую
--							(
--								U_PS_IZMEN_ZADOL.PS_ID		IS	NULL				AND
--								U_PS_IZMEN_ZADOL.DOG_ID		IS	NOT NULL			AND
--								U_PS_IZMEN_ZADOL.DOG_NPP	IS	NOT NULL			AND
--								U_PS_IZMEN_ZADOL.DOG_ID		=	U_DOGOVOR.DOG_ID	
--							)
						)														AND					
						U_PS_IZMEN_ZADOL.DEL_FLAG			IS	NULL				
			)			AS	SUM_ISPOLNEN_CHANGE_VALK_MINUS,
		
			--	-------------------------------------------------------------------
			--	Сумма возвратов резидентами нерезидентам ошибочно зачисленных сумм,
			--	связанных с изменением основного долга для типа '5'
			--
			--	Сумма возвратов нерезидентами резидентам ошибочно списанных сумм, 
			--	связанных с изменением основного долга  для типа '6'
			--	-------------------------------------------------------------------
			(
				SELECT	ISNULL(	SUM(U_OPLATA.SUMK), 0 )
				FROM	U_OPLATA (NOLOCK)
				LEFT	OUTER JOIN U_PS (NOLOCK)	ON	
						U_PS.RESIDENT_ID		=	U_OPLATA.RESIDENT_ID	AND
						U_PS.PS_ID				=	U_OPLATA.PS_ID			AND
						U_PS.DEL_FLAG 			IS	NULL
				WHERE	U_OPLATA.RESIDENT_ID 	=	U_DOGOVOR.RESIDENT_ID	AND
						U_OPLATA.VALK			=	U_DOGOVOR.KVALK			AND
						U_OPLATA.D_REFER		<	@D_CALC					AND
						(
							--	Платёж ссылается на Контракт (Договор) через Паспорт сделки
							(
								U_OPLATA.PS_ID		IS	NOT NULL			AND
								--U_OPLATA.DOG_ID		IS	NULL				AND
								--U_OPLATA.DOG_NPP	IS	NULL				AND
								--U_OPLATA.PS_ID		=	U_PS.PS_ID			AND
								U_PS.DOG_ID			=	U_DOGOVOR.DOG_ID		
							)
							OR
							--	Платёж ссылается на Контракт (Договор) напрямую
							(
								--U_OPLATA.PS_ID		IS	NULL				AND
								U_OPLATA.DOG_ID		IS	NOT NULL			AND
								--U_OPLATA.DOG_NPP	IS	NOT NULL			AND
								U_OPLATA.DOG_ID		=	U_DOGOVOR.DOG_ID	
							)
						)													AND					
						(
							(
								U_OPLATA.KODOP 		= '99010'	AND		
								U_OPLATA.DIRECTION	= '2'		AND
								U_OPLATA.TYPE_99010	= '1'		AND
								U_DOGOVOR.VID_KONTR	= '5'
							)	
							OR
							(
								U_OPLATA.KODOP 		= '99010'	AND		
								U_OPLATA.DIRECTION	= '1'		AND			
								U_OPLATA.TYPE_99010	= '1'		AND
								U_DOGOVOR.VID_KONTR	= '6'
							)
						)										AND
						U_OPLATA.DEL_FLAG		IS	NULL
			)			AS	SUM_RETURN_ERROR_PLUS,
	
			--	--------------------------------------------------------------------------------
			--	Сумма возвратов нерезидентами резидентам ошибочно списанных сумм, связанных 
			--	с изменением основного долга для типа '5'
			--
			--	Сумма возвратов резидентами нерезидентам ошибочно зачисленных сумм, связанных с 
			--	изменением основного долга для типа '6'
			--	--------------------------------------------------------------------------------
			(
				SELECT	ISNULL(	SUM(U_OPLATA.SUMK), 0 )
				FROM	U_OPLATA (NOLOCK)
				LEFT	OUTER JOIN U_PS (NOLOCK)	ON	
						U_PS.RESIDENT_ID		=	U_OPLATA.RESIDENT_ID	AND
						U_PS.PS_ID				=	U_OPLATA.PS_ID			AND
						U_PS.DEL_FLAG 			IS	NULL
				WHERE	U_OPLATA.RESIDENT_ID 	=	U_DOGOVOR.RESIDENT_ID	AND
						U_OPLATA.VALK			=	U_DOGOVOR.KVALK			AND
						U_OPLATA.D_REFER		<	@D_CALC					AND
						(
							--	Платёж ссылается на Контракт (Договор) через Паспорт сделки
							(
								U_OPLATA.PS_ID		IS	NOT NULL			AND
								--U_OPLATA.DOG_ID		IS	NULL				AND
								--U_OPLATA.DOG_NPP	IS	NULL				AND
								--U_OPLATA.PS_ID		=	U_PS.PS_ID			AND
								U_PS.DOG_ID			=	U_DOGOVOR.DOG_ID											
							)
							OR
							--	Платёж ссылается на Контракт (Договор) напрямую
							(
								--U_OPLATA.PS_ID		IS	NULL				AND
								U_OPLATA.DOG_ID		IS	NOT NULL			AND
								--U_OPLATA.DOG_NPP	IS	NOT NULL			AND
								U_OPLATA.DOG_ID		=	U_DOGOVOR.DOG_ID											
							)
						)													AND					
						(
							(
								U_OPLATA.KODOP 		= '99010'	AND		
								U_OPLATA.DIRECTION	= '1'		AND			
								U_OPLATA.TYPE_99010	= '1'		AND
								U_DOGOVOR.VID_KONTR	= '5'
							)	
							OR
							(
								U_OPLATA.KODOP 		= '99010'	AND		
								U_OPLATA.DIRECTION	= '2'		AND			
								U_OPLATA.TYPE_99010	= '1'		AND
								U_DOGOVOR.VID_KONTR	= '6'
							)
						)										AND
						U_OPLATA.DEL_FLAG		IS	NULL		
			)			AS	SUM_RETURN_ERROR_MINUS,

			--	---------------------------------------------
			--	Задолженность по основному долгу
			--	---------------------------------------------
			(
				--	--------------------------------------------------
				--	Сумма предоставленных заёмных средств для типа '5'
				--	Сумма полученных заёмных средств для типа '6'
				--	--------------------------------------------------
				(
					SELECT	ISNULL(	SUM(U_OPLATA.SUMK), 0 )
					FROM	U_OPLATA (NOLOCK)
					LEFT	OUTER JOIN U_PS (NOLOCK)	ON	
							U_PS.RESIDENT_ID		=	U_OPLATA.RESIDENT_ID	AND
							U_PS.PS_ID				=	U_OPLATA.PS_ID			AND
							U_PS.DEL_FLAG 			IS	NULL
					WHERE	U_OPLATA.RESIDENT_ID 	=	U_DOGOVOR.RESIDENT_ID	AND
							U_OPLATA.VALK			=	U_DOGOVOR.KVALK			AND
							U_OPLATA.D_REFER		<	@D_CALC					AND
							(
								--	Платёж ссылается на Контракт (Договор) через Паспорт сделки
								(
									U_OPLATA.PS_ID		IS	NOT NULL			AND
									--U_OPLATA.DOG_ID		IS	NULL				AND
									--U_OPLATA.DOG_NPP	IS	NULL				AND
									--U_OPLATA.PS_ID		=	U_PS.PS_ID			AND
									U_PS.DOG_ID			=	U_DOGOVOR.DOG_ID	
								)
								OR
								--	Платёж ссылается на Контракт (Договор) напрямую
								(
									--U_OPLATA.PS_ID		IS	NULL				AND
									U_OPLATA.DOG_ID		IS	NOT NULL			AND
									--U_OPLATA.DOG_NPP	IS	NOT NULL			AND
									U_OPLATA.DOG_ID		=	U_DOGOVOR.DOG_ID	
								)
							)													AND					
							(
								(
									( 
										U_OPLATA.KODOP	= '40010' OR 
										U_OPLATA.KODOP	= '40020' 
									)											AND
									U_OPLATA.DIRECTION	= '2'					AND
									U_DOGOVOR.VID_KONTR	= '5'
								)	
								OR
								(
									(
										U_OPLATA.KODOP	= '41010' OR 
										U_OPLATA.KODOP	= '41020' 
									)											AND
									U_OPLATA.DIRECTION	= '1'	AND
									U_DOGOVOR.VID_KONTR	= '6'
								)
							)													AND
							U_OPLATA.DEL_FLAG		IS NULL
				)			

				-

				--	--------------------------------------------------------------------------
				--	Сумма средств, зачисленных в счёт погашения основного долга для типа '5'
				--	Сумма средств, переведённых в счёт погашения основного долга для типа '6'
				--	--------------------------------------------------------------------------
				(
					SELECT	ISNULL(	SUM(U_OPLATA.SUMK), 0 )
					FROM	U_OPLATA (NOLOCK)
					LEFT	OUTER JOIN U_PS (NOLOCK)	ON	
							U_PS.RESIDENT_ID		=	U_OPLATA.RESIDENT_ID	AND
							U_PS.PS_ID				=	U_OPLATA.PS_ID			AND
							U_PS.DEL_FLAG 			IS	NULL
					WHERE	U_OPLATA.RESIDENT_ID 	=	U_DOGOVOR.RESIDENT_ID	AND
							U_OPLATA.VALK			=	U_DOGOVOR.KVALK			AND
							U_OPLATA.D_REFER		<	@D_CALC					AND
							(
								--	Платёж ссылается на Контракт (Договор) через Паспорт сделки
								(
									U_OPLATA.PS_ID		IS	NOT NULL			AND
									--U_OPLATA.DOG_ID		IS	NULL				AND
									--U_OPLATA.DOG_NPP	IS	NULL				AND
									--U_OPLATA.PS_ID		=	U_PS.PS_ID			AND
									U_PS.DOG_ID			=	U_DOGOVOR.DOG_ID	
								)
								OR
								--	Платёж ссылается на Контракт (Договор) напрямую
								(
									--U_OPLATA.PS_ID		IS	NULL				AND
									U_OPLATA.DOG_ID		IS	NOT NULL			AND
									--U_OPLATA.DOG_NPP	IS	NOT NULL			AND
									U_OPLATA.DOG_ID		=	U_DOGOVOR.DOG_ID	
								)
							)													AND					
							(
								(
									( 
										U_OPLATA.KODOP	= '43010' OR 
										U_OPLATA.KODOP	= '43020' 
									)											AND
									U_OPLATA.DIRECTION	= '1'					AND				
									U_DOGOVOR.VID_KONTR	= '5'			
								)	
								OR
								(
									( 
										U_OPLATA.KODOP	= '42010' OR 
										U_OPLATA.KODOP	= '42020' 
									)											AND
									U_OPLATA.DIRECTION	= '2'					AND
									U_DOGOVOR.VID_KONTR	= '6'
								)
							)													AND
							U_OPLATA.DEL_FLAG		IS	NULL		
				)			
		
				-

				--	-------------------------------------------------------------------------------------
				--	Сумма уменьшения задолженности по основному долгу по иным основаниям (-) уменьшение
				--	-------------------------------------------------------------------------------------
				(
					SELECT	ISNULL(	SUM(U_ISPOLNEN.SUMK), 0 )
					FROM	U_ISPOLNEN (NOLOCK)
					LEFT	OUTER JOIN U_PS (NOLOCK)	ON	
							U_PS.RESIDENT_ID		=	U_ISPOLNEN.RESIDENT_ID	AND
							U_PS.PS_ID				=	U_ISPOLNEN.PS_ID		AND
							U_PS.DEL_FLAG 			IS	NULL
					WHERE	U_ISPOLNEN.RESIDENT_ID		=	U_DOGOVOR.RESIDENT_ID	AND
							U_ISPOLNEN.VALK				=	U_DOGOVOR.KVALK			AND
							U_ISPOLNEN.D_DOC			<	@D_CALC					AND
							U_ISPOLNEN.KODZ 			>=	'02'					AND
							U_ISPOLNEN.KODZ 			<=	'12'					AND							
							(
								--	Cсылка на Контракт (Договор) через Паспорт сделки
								(
									U_ISPOLNEN.PS_ID	IS	NOT NULL			AND
	--	------------------------------------------------------------------------------
	-- !!! Внимание:	Данный фрагмент обеспечивает будущую функциональность
	-- !!!				Убрать комментарии с данного фрагмента, только после внесения
	-- !!!				полей DOG_ID и DOG_NPP в структуру таблицы U_ISPOLNEN  
	--	------------------------------------------------------------------------------
	--								U_ISPOLNEN.DOG_ID	IS	NULL				AND
	--								U_ISPOLNEN.DOG_NPP	IS	NULL				AND
									--U_ISPOLNEN.PS_ID	=	U_PS.PS_ID			AND
									U_PS.DOG_ID			=	U_DOGOVOR.DOG_ID	
								)
	--	------------------------------------------------------------------------------
	-- !!! Внимание:	Данный фрагмент обеспечивает будущую функциональность
	-- !!!				Убрать комментарии с данного фрагмента, только после внесения
	-- !!!				полей DOG_ID и DOG_NPP в структуру таблицы U_ISPOLNEN  
	--	------------------------------------------------------------------------------
	--							OR
	--							--	Ссылка на Контракт (Договор) напрямую
	--							(
	--								U_ISPOLNEN.PS_ID	IS	NULL				AND
	--								U_ISPOLNEN.DOG_ID	IS	NOT NULL			AND
	--								U_ISPOLNEN.DOG_NPP	IS	NOT NULL			AND
	--								U_ISPOLNEN.DOG_ID	=	U_DOGOVOR.DOG_ID	
	--							)
							)													AND					
							U_ISPOLNEN.DEL_FLAG			IS	NULL				
				)			

				+

				--	------------------------------------------------------------------------------------
				--	Сумма увеличения задолженности по основному долгу по иным основаниям (+) увеличение
				--	------------------------------------------------------------------------------------
				(
					SELECT	ISNULL(	SUM(U_ISPOLNEN.SUMK), 0 )
					FROM	U_ISPOLNEN (NOLOCK)
					LEFT	OUTER JOIN U_PS (NOLOCK)	ON	
							U_PS.RESIDENT_ID		=	U_ISPOLNEN.RESIDENT_ID	AND
							U_PS.PS_ID				=	U_ISPOLNEN.PS_ID		AND
							U_PS.DEL_FLAG 			IS	NULL
					WHERE	U_ISPOLNEN.RESIDENT_ID		=	U_DOGOVOR.RESIDENT_ID	AND
							U_ISPOLNEN.VALK				=	U_DOGOVOR.KVALK			AND
							U_ISPOLNEN.D_DOC			<	@D_CALC					AND
							U_ISPOLNEN.KODZ 			=	'13'					AND
							(
								--	Cсылка на Контракт (Договор) через Паспорт сделки
								(
									U_ISPOLNEN.PS_ID	IS	NOT NULL			AND
	--	------------------------------------------------------------------------------
	-- !!! Внимание:	Данный фрагмент обеспечивает будущую функциональность
	-- !!!				Убрать комментарии с данного фрагмента, только после внесения
	-- !!!				полей DOG_ID и DOG_NPP в структуру таблицы U_ISPOLNEN  
	--	------------------------------------------------------------------------------
	--								U_ISPOLNEN.DOG_ID	IS	NULL				AND
	--								U_ISPOLNEN.DOG_NPP	IS	NULL				AND
									--U_ISPOLNEN.PS_ID	=	U_PS.PS_ID			AND
									U_PS.DOG_ID			=	U_DOGOVOR.DOG_ID	
								)
	--	------------------------------------------------------------------------------
	-- !!! Внимание:	Данный фрагмент обеспечивает будущую функциональность
	-- !!!				Убрать комментарии с данного фрагмента, только после внесения
	-- !!!				полей DOG_ID и DOG_NPP в структуру таблицы U_ISPOLNEN  
	--	------------------------------------------------------------------------------
	--							OR
	--							--	Ссылка на Контракт (Договор) напрямую
	--							(
	--								U_ISPOLNEN.PS_ID	IS	NULL				AND
	--								U_ISPOLNEN.DOG_ID	IS	NOT NULL			AND
	--								U_ISPOLNEN.DOG_NPP	IS	NOT NULL			AND
	--								U_ISPOLNEN.DOG_ID	=	U_DOGOVOR.DOG_ID	
	--							)
							)													AND					
							U_ISPOLNEN.DEL_FLAG			IS	NULL				
				)			

				+

				--	----------------------------------------------------------------------
				--	Увеличение (начисление) суммы задолженности в "новой" валюте 
				--	в случае изменения кода валюты цены кредитного договора
				--	----------------------------------------------------------------------
				(
					SELECT	ISNULL(	SUM(U_PS_IZMEN_ZADOL.SUMK), 0 )	
					FROM	U_PS_IZMEN_ZADOL (NOLOCK)
					LEFT	OUTER JOIN U_PS (NOLOCK)	ON	
							U_PS.RESIDENT_ID		=	U_PS_IZMEN_ZADOL.RESIDENT_ID	AND
							U_PS.PS_ID				=	U_PS_IZMEN_ZADOL.PS_ID			AND
							U_PS.DEL_FLAG 			IS	NULL
					WHERE	U_PS_IZMEN_ZADOL.RESIDENT_ID	=	U_DOGOVOR.RESIDENT_ID	AND
							U_PS_IZMEN_ZADOL.VALK			=	U_DOGOVOR.KVALK			AND
							U_PS_IZMEN_ZADOL.D_IZM			<	@D_CALC					AND
							U_PS_IZMEN_ZADOL.KOD			=	'00151'					AND		
							(	
								--	Cсылка на Контракт (Договор) через Паспорт сделки
								(
									U_PS_IZMEN_ZADOL.PS_ID	IS	NOT NULL			AND
	--	------------------------------------------------------------------------------
	-- !!! Внимание:	Данный фрагмент обеспечивает будущую функциональность
	-- !!!				Убрать комментарии с данного фрагмента, только после внесения
	-- !!!				полей DOG_ID и DOG_NPP в структуру таблицы U_PS_IZMEN_ZADOL  
	--	------------------------------------------------------------------------------
	--								U_PS_IZMEN_ZADOL.DOG_ID		IS	NULL		AND
	--								U_PS_IZMEN_ZADOL.DOG_NPP	IS	NULL		AND
									--U_PS_IZMEN_ZADOL.PS_ID		=	U_PS.PS_ID			AND
									U_PS.DOG_ID					=	U_DOGOVOR.DOG_ID	
								)
	--	------------------------------------------------------------------------------
	-- !!! Внимание:	Данный фрагмент обеспечивает будущую функциональность
	-- !!!				Убрать комментарии с данного фрагмента, только после внесения
	-- !!!				полей DOG_ID и DOG_NPP в структуру таблицы U_PS_IZMEN_ZADOL  
	--	------------------------------------------------------------------------------
	--							OR
	--							--	Ссылка на Контракт (Договор) напрямую
	--							(
	--								U_PS_IZMEN_ZADOL.PS_ID		IS	NULL				AND
	--								U_PS_IZMEN_ZADOL.DOG_ID		IS	NOT NULL			AND
	--								U_PS_IZMEN_ZADOL.DOG_NPP	IS	NOT NULL			AND
	--								U_PS_IZMEN_ZADOL.DOG_ID		=	U_DOGOVOR.DOG_ID
	--							)
							)													AND					
							U_PS_IZMEN_ZADOL.DEL_FLAG		IS	NULL				
				)

				-

				--	----------------------------------------------------------------------
				--	Уменьшение (списание) текущей задолженности в "старой" валюте 
				--	в случае изменения кода валюты цены кредитного договора
				--	----------------------------------------------------------------------
				(
					SELECT	ISNULL(	SUM(U_PS_IZMEN_ZADOL.SUMK), 0 )	
					FROM	U_PS_IZMEN_ZADOL (NOLOCK)
					LEFT	OUTER JOIN U_PS (NOLOCK)	ON	
							U_PS.RESIDENT_ID		=	U_PS_IZMEN_ZADOL.RESIDENT_ID	AND
							U_PS.PS_ID				=	U_PS_IZMEN_ZADOL.PS_ID			AND
							U_PS.DEL_FLAG 			IS	NULL
					WHERE	U_PS_IZMEN_ZADOL.RESIDENT_ID	=	U_DOGOVOR.RESIDENT_ID	AND
							U_PS_IZMEN_ZADOL.VALK			=	U_DOGOVOR.KVALK			AND
							U_PS_IZMEN_ZADOL.D_IZM			<	@D_CALC					AND
							U_PS_IZMEN_ZADOL.KOD			=	'00152'					AND		
							(
								--	Cсылка на Контракт (Договор) через Паспорт сделки
								(
									U_PS_IZMEN_ZADOL.PS_ID	IS	NOT NULL			AND
	--	------------------------------------------------------------------------------
	-- !!! Внимание:	Данный фрагмент обеспечивает будущую функциональность
	-- !!!				Убрать комментарии с данного фрагмента, только после внесения
	-- !!!				полей DOG_ID и DOG_NPP в структуру таблицы U_PS_IZMEN_ZADOL  
	--	------------------------------------------------------------------------------
	--								U_PS_IZMEN_ZADOL.DOG_ID		IS	NULL			AND
	--								U_PS_IZMEN_ZADOL.DOG_NPP	IS	NULL			AND
									--U_PS_IZMEN_ZADOL.PS_ID		=	U_PS.PS_ID			AND
									U_PS.DOG_ID					=	U_DOGOVOR.DOG_ID
								)
	--	------------------------------------------------------------------------------
	-- !!! Внимание:	Данный фрагмент обеспечивает будущую функциональность
	-- !!!				Убрать комментарии с данного фрагмента, только после внесения
	-- !!!				полей DOG_ID и DOG_NPP в структуру таблицы U_PS_IZMEN_ZADOL  
	--	------------------------------------------------------------------------------
	--							OR
	--							--	Ссылка на Контракт (Договор) напрямую
	--							(
	--								U_PS_IZMEN_ZADOL.PS_ID		IS	NULL				AND
	--								U_PS_IZMEN_ZADOL.DOG_ID		IS	NOT NULL			AND
	--								U_PS_IZMEN_ZADOL.DOG_NPP	IS	NOT NULL			AND
	--								U_PS_IZMEN_ZADOL.DOG_ID		=	U_DOGOVOR.DOG_ID
	--							)
							)														AND					
							U_PS_IZMEN_ZADOL.DEL_FLAG			IS	NULL				
				)
			
				+

				--	-------------------------------------------------------------------
				--	Сумма возвратов резидентами нерезидентам ошибочно зачисленных сумм,
				--	связанных с изменением основного долга для типа '5'
				--
				--	Сумма возвратов нерезидентами резидентам ошибочно списанных сумм, 
				--	связанных с изменением основного долга  для типа '6'
				--	-------------------------------------------------------------------
				(
					SELECT	ISNULL(	SUM(U_OPLATA.SUMK), 0 )
					FROM	U_OPLATA (NOLOCK)
					LEFT	OUTER JOIN U_PS (NOLOCK)	ON	
							U_PS.RESIDENT_ID		=	U_OPLATA.RESIDENT_ID	AND
							U_PS.PS_ID				=	U_OPLATA.PS_ID			AND
							U_PS.DEL_FLAG 			IS	NULL
					WHERE	U_OPLATA.RESIDENT_ID 	=	U_DOGOVOR.RESIDENT_ID	AND
							U_OPLATA.VALK			=	U_DOGOVOR.KVALK			AND
							U_OPLATA.D_REFER		<	@D_CALC					AND
							(
								--	Платёж ссылается на Контракт (Договор) через Паспорт сделки
								(
									U_OPLATA.PS_ID		IS	NOT NULL			AND
									--U_OPLATA.DOG_ID		IS	NULL				AND
									--U_OPLATA.DOG_NPP	IS	NULL				AND
									--U_OPLATA.PS_ID		=	U_PS.PS_ID			AND
									U_PS.DOG_ID			=	U_DOGOVOR.DOG_ID		
								)
								OR
								--	Платёж ссылается на Контракт (Договор) напрямую
								(
									--U_OPLATA.PS_ID		IS	NULL				AND
									U_OPLATA.DOG_ID		IS	NOT NULL			AND
									--U_OPLATA.DOG_NPP	IS	NOT NULL			AND
									U_OPLATA.DOG_ID		=	U_DOGOVOR.DOG_ID	
								)
							)													AND					
							(
								(
									U_OPLATA.KODOP 		= '99010'	AND		
									U_OPLATA.DIRECTION	= '2'		AND
									U_OPLATA.TYPE_99010	= '1'		AND
									U_DOGOVOR.VID_KONTR	= '5'
								)	
								OR
								(
									U_OPLATA.KODOP 		= '99010'	AND		
									U_OPLATA.DIRECTION	= '1'		AND			
									U_OPLATA.TYPE_99010	= '1'		AND
									U_DOGOVOR.VID_KONTR	= '6'
								)
							)										AND
							U_OPLATA.DEL_FLAG		IS	NULL
				)

				-		

				--	--------------------------------------------------------------------------------
				--	Сумма возвратов нерезидентами резидентам ошибочно списанных сумм, связанных 
				--	с изменением основного долга для типа '5'
				--
				--	Сумма возвратов резидентами нерезидентам зачисленных сумм, связанных с 
				--	изменением основного долга для типа '6'
				--	--------------------------------------------------------------------------------
				(
					SELECT	ISNULL(	SUM(U_OPLATA.SUMK), 0 )
					FROM	U_OPLATA (NOLOCK)
					LEFT	OUTER JOIN U_PS (NOLOCK)	ON	
							U_PS.RESIDENT_ID		=	U_OPLATA.RESIDENT_ID	AND
							U_PS.PS_ID				=	U_OPLATA.PS_ID			AND
							U_PS.DEL_FLAG 			IS	NULL
					WHERE	U_OPLATA.RESIDENT_ID 	=	U_DOGOVOR.RESIDENT_ID	AND
							U_OPLATA.VALK			=	U_DOGOVOR.KVALK			AND
							U_OPLATA.D_REFER		<	@D_CALC					AND
							(
								--	Платёж ссылается на Контракт (Договор) через Паспорт сделки
								(
									U_OPLATA.PS_ID		IS	NOT NULL			AND
									--U_OPLATA.DOG_ID		IS	NULL				AND
									--U_OPLATA.DOG_NPP	IS	NULL				AND
									--U_OPLATA.PS_ID		=	U_PS.PS_ID			AND
									U_PS.DOG_ID			=	U_DOGOVOR.DOG_ID	
								)
								OR
								--	Платёж ссылается на Контракт (Договор) напрямую
								(
									--U_OPLATA.PS_ID		IS	NULL				AND
									U_OPLATA.DOG_ID		IS	NOT NULL			AND
									--U_OPLATA.DOG_NPP	IS	NOT NULL			AND
									U_OPLATA.DOG_ID		=	U_DOGOVOR.DOG_ID		
								)
							)													AND					
							(
								(
									U_OPLATA.KODOP 		= '99010'	AND		
									U_OPLATA.DIRECTION	= '1'		AND			
									U_OPLATA.TYPE_99010	= '1'		AND
									U_DOGOVOR.VID_KONTR	= '5'
								)	
								OR
								(
									U_OPLATA.KODOP 		= '99010'	AND		
									U_OPLATA.DIRECTION	= '2'		AND			
									U_OPLATA.TYPE_99010	= '1'		AND
									U_DOGOVOR.VID_KONTR	= '6'
								)
							)										AND
							U_OPLATA.DEL_FLAG		IS	NULL		
				)			
			)			AS	SUM_ZADOL
	FROM	U_DOGOVOR (NOLOCK)
	INNER	JOIN	U_USERS_RESIDENTS (NOLOCK) ON 
			U_USERS_RESIDENTS.RESIDENT_ID	= U_DOGOVOR.RESIDENT_ID		AND
			U_USERS_RESIDENTS.USER_ID		= @USER_ID
	INNER	JOIN	U_RESIDENTS (NOLOCK) ON	
			U_RESIDENTS.RESIDENT_ID			= U_DOGOVOR.RESIDENT_ID		AND
			U_RESIDENTS.DEL_FLAG 			IS NULL	
	WHERE	-- отбор по Участнику ВЭД
			(
				@RESIDENT_ID 			= 0 			OR
				U_DOGOVOR.RESIDENT_ID	= @RESIDENT_ID	 
			)															AND
			-- отбор по Виду Договора 
			( 
				@VID_KONTR				=	'0'			OR
				U_DOGOVOR.VID_KONTR		=	@VID_KONTR
			)															AND
			-- отбор по Договору 
			( 
				@DOG_ID					=	0			OR
				U_DOGOVOR.DOG_ID		=	@DOG_ID
			)															AND
			-- только Кредитные договоры
			CHARINDEX(U_DOGOVOR.VID_KONTR, '56') > 0					AND
			-- отбор по диапазону Даты завершения исполнения обязательств
			(	@D_END_BEG	IS NULL		OR
				ISNULL( [dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID), CONVERT(DATETIME, '30000606' ))	>= ISNULL(@D_END_BEG, CONVERT(DATETIME, '19000101'))
			)	AND
			(	@D_END_END	IS NULL		OR
				ISNULL( [dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID), CONVERT(DATETIME, '30000606' ))	<= ISNULL(@D_END_END, CONVERT(DATETIME, '30000606'))	
			)	AND
			U_DOGOVOR.DEL_FLAG		IS	NULL
	GROUP	BY	U_DOGOVOR.RESIDENT_ID,  U_DOGOVOR.DOG_ID, U_DOGOVOR.VID_KONTR, U_DOGOVOR.N_KONTR, U_DOGOVOR.D_KONTR, U_DOGOVOR.KVALK
	ORDER	BY	NAMER_CR, U_DOGOVOR.N_KONTR, U_DOGOVOR.D_KONTR, U_DOGOVOR.KVALK
GO

GRANT  EXECUTE  ON [dbo].[U_DOGOVOR_LIST_ZADOL]  TO [OPERS], [AUDITS]
GO

--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[U_DOGOVOR_LIST_OBOROT_CONTRACT]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[U_DOGOVOR_LIST_OBOROT_CONTRACT]
GO

CREATE PROCEDURE [dbo].[U_DOGOVOR_LIST_OBOROT_CONTRACT]
--	---------------------------------------------------------------------------------------------------
--	Расчёт оборотов по Договорам (контракты)
--	---------------------------------------------------------------------------------------------------
--	@USER_ID 		-	идентификатор пользователя
--	@RESIDENT_ID 	-	идентификатор Участника ВЭД (если 0, то все Участники ВЭД)
--	@PARTNER_ID 	-	идентификатор Иностранного контрагента (если 0, то все Иностранные контрагенты)
--	@VID_KONTR		- 	вид Договора (если '0', то для всех видов)
--	@DOG_ID 		-	идентификатор Договора ( если 0, то все Договоры с типом 1-4 и 9)
--	@D_END_BEG		-	нижняя граница диапазона дат окончания исполнения обязательств по контракту	
--	@D_END_END		-	верхняя граница диапазона дат окончания исполнения обязательств по контракту
--	@D_CALC			-	дата, на которую расчитывается оборот
--	----------------------------------------------------------------------------------------------------
--	(Модификация	в версии 2.1.0)
--	----------------------------------------------------------------------------------------------------
(
	@USER_ID		AS VARCHAR(30),
	@RESIDENT_ID	AS INTEGER,
	@PARTNER_ID		AS INTEGER			=	NULL,
	@VID_KONTR		AS CHAR(10)			=	'0',
	@DOG_ID			AS INTEGER,
	@D_END_BEG		AS DATETIME			=	NULL,
	@D_END_END		AS DATETIME			=	NULL,
	@D_CALC			AS SMALLDATETIME	=	NULL
)
AS

	SET NOCOUNT ON

	--	-------------------------------------
	--	Нвчальные значения
	--	-------------------------------------
	--	Ecли не указана дата расчёта, то расчёт производится на текущую дату
	IF	@D_CALC	IS NULL
		SELECT	@D_CALC	= CONVERT( SMALLDATETIME, GETDATE() )

	--	Для точности расчёта будем применять "<" вместо "<="
	--	Поэтому увеличиваем расчётную дату на 1-н день
	SELECT	@D_CALC	= DATEADD( day, 1, @D_CALC )

	SELECT	@RESIDENT_ID	= ISNULL(@RESIDENT_ID, 0)
	SELECT	@PARTNER_ID		= ISNULL(@PARTNER_ID, 0)
	SELECT	@VID_KONTR		= ISNULL(@VID_KONTR, '0')
	SELECT	@DOG_ID			= ISNULL(@DOG_ID, 0)

	--	---------------------------------------------------------
	--	Выводим составляющие для расчёта оборотов и сами обороты
	--	---------------------------------------------------------
	SELECT	--	-------------------------------
			--	Основная информация	
			--	-------------------------------
			U_DOGOVOR.RESIDENT_ID,
			U_IN_PART.NAMEP,
			ISNULL(MAX(U_RESIDENTS.NAMER_S), MAX(U_RESIDENTS.NAMER))	AS NAMER_CR,
			U_DOGOVOR.DOG_ID,
			U_DOGOVOR.VID_KONTR, 
			U_DOGOVOR.N_KONTR, 
			U_DOGOVOR.D_KONTR, 

			--	-----------------------------------------
			--	Дата завершения исполнения обязательств
			--	-----------------------------------------
			[dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID)		AS D_END,
			
			--	-------------------------------
			--	Код валюты контракта	
			--	-------------------------------
			U_DOGOVOR.KVALK		AS KVALK,

			--	-------------------------------
			--	Сумма зачислений
			--	-------------------------------
			(
				SELECT	ISNULL( SUM( U_OPLATA.SUMK ), 0 )
				FROM	U_OPLATA (NOLOCK)
				INNER	JOIN VIDOP	(NOLOCK)	ON	
						U_OPLATA.KODOP				=	VIDOP.KOD	AND	
						VIDOP.PR_OBOROT_KONTRAKT	=	1
				LEFT	OUTER JOIN U_PS (NOLOCK)	ON	
						U_PS.RESIDENT_ID		=	U_OPLATA.RESIDENT_ID	AND
						U_PS.PS_ID				=	U_OPLATA.PS_ID			AND
						U_PS.DEL_FLAG 			IS	NULL
				WHERE	U_OPLATA.RESIDENT_ID	=	U_DOGOVOR.RESIDENT_ID	AND
						U_OPLATA.VALK			=	U_DOGOVOR.KVALK			AND
						U_OPLATA.DIRECTION		=	'1'						AND						
						U_OPLATA.D_REFER		<	@D_CALC					AND
						(
							--	Платёж ссылается на Контракт (Договор) через Паспорт сделки
							(
								U_OPLATA.PS_ID		IS	NOT NULL			AND
								--U_OPLATA.DOG_ID		IS	NULL				AND
								--U_OPLATA.DOG_NPP	IS	NULL				AND
								--U_OPLATA.PS_ID		=	U_PS.PS_ID			AND
								U_PS.DOG_ID			=	U_DOGOVOR.DOG_ID		
							)
							OR
							--	Платёж ссылается на Контракт (Договор) напрямую
							(
								--U_OPLATA.PS_ID		IS	NULL				AND
								U_OPLATA.DOG_ID		IS	NOT NULL			AND
								--U_OPLATA.DOG_NPP	IS	NOT NULL			AND
								U_OPLATA.DOG_ID		=	U_DOGOVOR.DOG_ID	
							)
						)													AND	
						U_OPLATA.DEL_FLAG		IS	NULL					
			)		AS SUM_ZACH,

			--	-------------------------------
			--	Сумма списаний
			--	-------------------------------
			(
				SELECT	ISNULL( SUM( U_OPLATA.SUMK ), 0 )
				FROM	U_OPLATA (NOLOCK)
				INNER	JOIN VIDOP	(NOLOCK)	ON	
						U_OPLATA.KODOP				=	VIDOP.KOD	AND	
						VIDOP.PR_OBOROT_KONTRAKT	=	1
				LEFT	OUTER JOIN U_PS (NOLOCK)	ON	
						U_PS.RESIDENT_ID		=	U_OPLATA.RESIDENT_ID	AND
						U_PS.PS_ID				=	U_OPLATA.PS_ID			AND
						U_PS.DEL_FLAG 			IS	NULL
				 WHERE	U_OPLATA.RESIDENT_ID	=	U_DOGOVOR.RESIDENT_ID	AND
						U_OPLATA.VALK			=	U_DOGOVOR.KVALK			AND
						U_OPLATA.DIRECTION		=	'2'						AND						
						U_OPLATA.D_REFER		<	@D_CALC					AND
						(
							--	Платёж ссылается на Контракт (Договор) через Паспорт сделки
							(
								U_OPLATA.PS_ID		IS	NOT NULL			AND
								--U_OPLATA.DOG_ID		IS	NULL				AND
								--U_OPLATA.DOG_NPP	IS	NULL				AND
								--U_OPLATA.PS_ID		=	U_PS.PS_ID			AND
								U_PS.DOG_ID			=	U_DOGOVOR.DOG_ID	
							)
							OR
							--	Платёж ссылается на Контракт (Договор) напрямую
							(
								--U_OPLATA.PS_ID		IS	NULL				AND
								U_OPLATA.DOG_ID		IS	NOT NULL			AND
								--U_OPLATA.DOG_NPP	IS	NOT NULL			AND
								U_OPLATA.DOG_ID		=	U_DOGOVOR.DOG_ID		
							)
						)													AND	
						U_OPLATA.DEL_FLAG		IS	NULL					
			)		AS SUM_SPIS,

			--	----------------------------------------------------
			--	в том числе Сумма списаний в виде авансовых платежей
			--	----------------------------------------------------
			(
				SELECT	ISNULL( SUM( U_OPLATA.SUMK ), 0 )
				FROM	U_OPLATA (NOLOCK)
				INNER	JOIN VIDOP	(NOLOCK)	ON	
						U_OPLATA.KODOP				=	VIDOP.KOD	AND	
						VIDOP.PR_OBOROT_KONTRAKT	=	1
				LEFT	OUTER JOIN U_PS (NOLOCK)	ON	
						U_PS.RESIDENT_ID		=	U_OPLATA.RESIDENT_ID	AND
						U_PS.PS_ID				=	U_OPLATA.PS_ID			AND
						U_PS.DEL_FLAG 			IS	NULL
				WHERE	U_OPLATA.RESIDENT_ID	=	U_DOGOVOR.RESIDENT_ID	AND
						U_OPLATA.VALK			=	U_DOGOVOR.KVALK			AND
						U_OPLATA.DIRECTION		=	'2'						AND						
						U_OPLATA.D_REFER		<	@D_CALC					AND
						(
							--	Платёж ссылается на Контракт (Договор) через Паспорт сделки
							(
								U_OPLATA.PS_ID		IS	NOT NULL			AND
								--U_OPLATA.DOG_ID		IS	NULL				AND
								--U_OPLATA.DOG_NPP	IS	NULL				AND
								--U_OPLATA.PS_ID		=	U_PS.PS_ID			AND
								U_PS.DOG_ID			=	U_DOGOVOR.DOG_ID			
							)
							OR
							--	Платёж ссылается на Контракт (Договор) напрямую
							(
								--U_OPLATA.PS_ID		IS	NULL				AND
								U_OPLATA.DOG_ID		IS	NOT NULL			AND
								--U_OPLATA.DOG_NPP	IS	NOT NULL			AND
								U_OPLATA.DOG_ID		=	U_DOGOVOR.DOG_ID		
							)
						)													AND	
						--	Код вида валютной операции входит в допустимый перечень авансовых платежей
						(
							U_OPLATA.KODOP	= '11030' OR
							U_OPLATA.KODOP	= '11040' OR
							U_OPLATA.KODOP	= '11050' OR
							U_OPLATA.KODOP	= '11060' OR
							U_OPLATA.KODOP  = '21020' OR  
							U_OPLATA.KODOP  = '21040'	
						)													AND
						U_OPLATA.DEL_FLAG		IS	NULL					
			)		AS	SUM_SPIS_AVANS,

			--	----------------------------------------------------
			--	Сумма подтверждающих документов со знаком (+)
			--	----------------------------------------------------
			(
				 SELECT ISNULL( SUM( U_SPR_CONFIRM.SUMK ), 0 )
				 FROM	U_SPR_CONFIRM (NOLOCK)
				 LEFT	OUTER JOIN U_PS (NOLOCK)	ON	
						U_PS.RESIDENT_ID			=	U_SPR_CONFIRM.RESIDENT_ID	AND
						U_PS.PS_ID					=	U_SPR_CONFIRM.PS_ID			AND
						U_PS.DEL_FLAG 				IS	NULL
				 WHERE	U_SPR_CONFIRM.RESIDENT_ID	=	U_DOGOVOR.RESIDENT_ID		AND
						U_SPR_CONFIRM.VALK			=	U_DOGOVOR.KVALK				AND
						U_SPR_CONFIRM.D_DOC			<	@D_CALC						AND
						(
							--	ПД ссылается на Контракт (Договор) через Паспорт сделки
							(
								U_SPR_CONFIRM.PS_ID		IS	NOT NULL				AND
								--U_SPR_CONFIRM.DOG_ID	IS	NULL					AND
								--U_SPR_CONFIRM.DOG_NPP	IS	NULL					AND
								--U_SPR_CONFIRM.PS_ID		=	U_PS.PS_ID				AND
								U_PS.DOG_ID				=	U_DOGOVOR.DOG_ID		
							)
							OR
							--	ПД ссылается на Контракт (Договор) напрямую
							(
								--U_SPR_CONFIRM.PS_ID		IS	NULL					AND
								U_SPR_CONFIRM.DOG_ID	IS	NOT NULL				AND
								--U_SPR_CONFIRM.DOG_NPP	IS	NOT NULL				AND
								U_SPR_CONFIRM.DOG_ID	=	U_DOGOVOR.DOG_ID	
							)
						)												AND	
						(
							--	ПД с кодами 01, 02, 04
							(		
								--	Детализация явно не указана
								( 
									(
										U_SPR_CONFIRM.KODD	=	'01'	OR 
										U_SPR_CONFIRM.KODD	=	'02'	OR
										U_SPR_CONFIRM.KODD	=	'04' 
									)									AND  
									U_SPR_CONFIRM.DIRECTION	IS	NULL	AND
									(
										U_DOGOVOR.VID_KONTR	=	'2'	OR
										U_DOGOVOR.VID_KONTR	=	'4'	OR
										(
											U_DOGOVOR.VID_KONTR	=	'9' AND 
											(
												U_SPR_CONFIRM.TYPE	=	'2'	OR 
												U_SPR_CONFIRM.TYPE	=	'4' 
											) 
										) 
									)
								)		
								OR
								--	Детализация явно указана
								(
									(
										U_SPR_CONFIRM.KODD	=	'01'	OR 
										U_SPR_CONFIRM.KODD	=	'02'	OR
										U_SPR_CONFIRM.KODD	=	'04'
									)									AND  
									U_SPR_CONFIRM.DIRECTION		= '1'				
								)			
							)											
							OR
							--	ПД с кодами	12, 13
							(
								U_SPR_CONFIRM.KODD	= '12'	OR
								U_SPR_CONFIRM.KODD	= '13'				
							)
							OR
							--	ПД	с кодами 14 
							(		
								--	Детализация явно не указана
								( 
									U_SPR_CONFIRM.KODD		= '14'		AND  
									U_SPR_CONFIRM.DIRECTION	IS NULL		AND
									(
										U_DOGOVOR.VID_KONTR	=	'1'	OR
										U_DOGOVOR.VID_KONTR	=	'3'	OR  
										(
											U_DOGOVOR.VID_KONTR	=	'9'	AND	
											(	
												U_SPR_CONFIRM.TYPE	=	'1'	OR
												U_SPR_CONFIRM.TYPE	=	'3'
											) 
										) 
									)
								)		
								OR
								--	Детализация явно указана
								(
									U_SPR_CONFIRM.KODD		=	'14'	AND  
									U_SPR_CONFIRM.DIRECTION	=	'2'				
								)								
							)
						)												AND
		   				U_SPR_CONFIRM.PR_NOT_CALC	IS NULL				AND
						U_SPR_CONFIRM.DEL_FLAG		IS NULL	
			)		AS	SUM_CONFIRM_PLUS,

			--	---------------------------------------------------------
			--	В том числе Сумма по документам, подтверждающим исполнение 
			--	обязательств иным способом
			--	со знаком (+)
			--	---------------------------------------------------------
			(
				 SELECT ISNULL( SUM( U_SPR_CONFIRM.SUMK ), 0 )
				 FROM	U_SPR_CONFIRM (NOLOCK)
				 LEFT	OUTER JOIN U_PS (NOLOCK)	ON	
						U_PS.RESIDENT_ID			=	U_SPR_CONFIRM.RESIDENT_ID	AND
						U_PS.PS_ID					=	U_SPR_CONFIRM.PS_ID			AND
						U_PS.DEL_FLAG 				IS	NULL
				 WHERE	U_SPR_CONFIRM.RESIDENT_ID	=	U_DOGOVOR.RESIDENT_ID		AND
						U_SPR_CONFIRM.VALK			=	U_DOGOVOR.KVALK				AND
						U_SPR_CONFIRM.D_DOC			<	@D_CALC						AND
						(
							--	ПД ссылается на Контракт (Договор) через Паспорт сделки
							(
								U_SPR_CONFIRM.PS_ID		IS	NOT NULL				AND
								--U_SPR_CONFIRM.DOG_ID	IS	NULL					AND
								--U_SPR_CONFIRM.DOG_NPP	IS	NULL					AND
								--U_SPR_CONFIRM.PS_ID		=	U_PS.PS_ID				AND
								U_PS.DOG_ID				=	U_DOGOVOR.DOG_ID	
							)
							OR
							--	ПД ссылается на Контракт (Договор) напрямую
							(
								--U_SPR_CONFIRM.PS_ID		IS	NULL					AND
								U_SPR_CONFIRM.DOG_ID	IS	NOT NULL				AND
								--U_SPR_CONFIRM.DOG_NPP	IS	NOT NULL				AND
								U_SPR_CONFIRM.DOG_ID	=	U_DOGOVOR.DOG_ID
							)
						)												AND	
						--	ПД	с кодами 14 
						(		
							--	Детализация явно не указана
							( 
								U_SPR_CONFIRM.KODD		= '14'		AND  
								U_SPR_CONFIRM.DIRECTION	IS NULL		AND
								(
									U_DOGOVOR.VID_KONTR	=	'1'	OR
									U_DOGOVOR.VID_KONTR	=	'3'	OR  
									(
										U_DOGOVOR.VID_KONTR	=	'9'	AND	
										(	
											U_SPR_CONFIRM.TYPE	=	'1'	OR
											U_SPR_CONFIRM.TYPE	=	'3'
										) 
									) 
								)
							)		
							OR
							--	Детализация явно указана
							(
								U_SPR_CONFIRM.KODD		=	'14'	AND  
								U_SPR_CONFIRM.DIRECTION	=	'2'				
							)								
						)											AND
		   				U_SPR_CONFIRM.PR_NOT_CALC	IS NULL		    AND
						U_SPR_CONFIRM.DEL_FLAG		IS NULL	
			)		AS	SUM_CONFIRM_14_PLUS,

			--	----------------------------------------------------
			--	Сумма подтверждающих документов со знаком (-)
			--	----------------------------------------------------
			(
				 SELECT ISNULL( SUM( U_SPR_CONFIRM.SUMK ), 0 )
				 FROM	U_SPR_CONFIRM (NOLOCK)
				 LEFT	OUTER JOIN U_PS (NOLOCK)	ON	
						U_PS.RESIDENT_ID			=	U_SPR_CONFIRM.RESIDENT_ID	AND
						U_PS.PS_ID					=	U_SPR_CONFIRM.PS_ID			AND
						U_PS.DEL_FLAG 				IS	NULL
				 WHERE	U_SPR_CONFIRM.RESIDENT_ID	=	U_DOGOVOR.RESIDENT_ID		AND
						U_SPR_CONFIRM.VALK			=	U_DOGOVOR.KVALK				AND
						U_SPR_CONFIRM.D_DOC			<	@D_CALC						AND
						(
							--	ПД ссылается на Контракт (Договор) через Паспорт сделки
							(
								U_SPR_CONFIRM.PS_ID		IS	NOT NULL				AND
								--U_SPR_CONFIRM.DOG_ID	IS	NULL					AND
								--U_SPR_CONFIRM.DOG_NPP	IS	NULL					AND
								--U_SPR_CONFIRM.PS_ID		=	U_PS.PS_ID				AND
								U_PS.DOG_ID				=	U_DOGOVOR.DOG_ID
							)
							OR
							--	ПД ссылается на Контракт (Договор) напрямую
							(
								--U_SPR_CONFIRM.PS_ID		IS	NULL					AND
								U_SPR_CONFIRM.DOG_ID	IS	NOT NULL				AND
								--U_SPR_CONFIRM.DOG_NPP	IS	NOT NULL				AND
								U_SPR_CONFIRM.DOG_ID	=	U_DOGOVOR.DOG_ID
							)
						)												AND	
						(
							--	ПД с кодами 01, 02, 04
							(		
								--	Детализация явно не указана
								( 
									(
										U_SPR_CONFIRM.KODD	=	'01'	OR
										U_SPR_CONFIRM.KODD	=	'02'	OR
										U_SPR_CONFIRM.KODD	=	'04'
									)									AND  
									U_SPR_CONFIRM.DIRECTION IS NULL		AND
									(
										U_DOGOVOR.VID_KONTR	=	'1'	OR
										U_DOGOVOR.VID_KONTR	=	'3'	OR
										(
											U_DOGOVOR.VID_KONTR	=	'9'	AND
											(
												U_SPR_CONFIRM.TYPE	=	'1'	OR
												U_SPR_CONFIRM.TYPE	=	'3'
											)
										) 
									)
								)		
								OR
								--	Детализация явно указана
								(
									(
										U_SPR_CONFIRM.KODD	=	'01'	OR
										U_SPR_CONFIRM.KODD	=	'02'	OR
										U_SPR_CONFIRM.KODD	=	'04'
									)									AND  
									U_SPR_CONFIRM.DIRECTION	= '2'				
								)			
							)						
							OR
							--	ПД с кодами	03, 05, 10, 11
							(
								U_SPR_CONFIRM.KODD	= '03'	OR
								U_SPR_CONFIRM.KODD	= '05'	OR
								U_SPR_CONFIRM.KODD	= '10'	OR
								U_SPR_CONFIRM.KODD	= '11'				
							)
							OR
							--	ПД с кодами 14
							(
								--	Детализация явно не указана
								( 
									U_SPR_CONFIRM.KODD		=	'14'	AND  
									U_SPR_CONFIRM.DIRECTION	IS	NULL	AND
									(
										U_DOGOVOR.VID_KONTR	=	'2'	OR
										U_DOGOVOR.VID_KONTR	=	'4'	OR
										(
											U_DOGOVOR.VID_KONTR	=	'9'	AND
											(	
												U_SPR_CONFIRM.TYPE	=	'2'	OR
												U_SPR_CONFIRM.TYPE	=	'4'
											)
										)
									)
								)		
								OR
								--	Детализация явно указана
								(
									U_SPR_CONFIRM.KODD		=	'14'	AND  
									U_SPR_CONFIRM.DIRECTION	=	'1'				
								 )			
							)
						)												AND
		   				U_SPR_CONFIRM.PR_NOT_CALC	IS NULL				AND
						U_SPR_CONFIRM.DEL_FLAG		IS NULL	
			)		AS	SUM_CONFIRM_MINUS,

			--	---------------------------------------------------------
			--	В том числе Сумма по документам, подтверждающим исполнение 
			--	обязательств иным способом
			--	со знаком (-)
			--	---------------------------------------------------------
			(
				 SELECT ISNULL( SUM( U_SPR_CONFIRM.SUMK ), 0 )
				 FROM	U_SPR_CONFIRM (NOLOCK)
				 LEFT	OUTER JOIN U_PS (NOLOCK)	ON	
						U_PS.RESIDENT_ID			=	U_SPR_CONFIRM.RESIDENT_ID	AND
						U_PS.PS_ID					=	U_SPR_CONFIRM.PS_ID			AND
						U_PS.DEL_FLAG 				IS	NULL
				 WHERE	U_SPR_CONFIRM.RESIDENT_ID	=	U_DOGOVOR.RESIDENT_ID		AND
						U_SPR_CONFIRM.VALK			=	U_DOGOVOR.KVALK				AND
						U_SPR_CONFIRM.D_DOC			<	@D_CALC						AND
						(
							--	ПД ссылается на Контракт (Договор) через Паспорт сделки
							(
								U_SPR_CONFIRM.PS_ID		IS	NOT NULL				AND
								--U_SPR_CONFIRM.DOG_ID	IS	NULL					AND
								--U_SPR_CONFIRM.DOG_NPP	IS	NULL					AND
								--U_SPR_CONFIRM.PS_ID		=	U_PS.PS_ID				AND
								U_PS.DOG_ID				=	U_DOGOVOR.DOG_ID	
							)
							OR
							--	ПД ссылается на Контракт (Договор) напрямую
							(
								--U_SPR_CONFIRM.PS_ID		IS	NULL					AND
								U_SPR_CONFIRM.DOG_ID	IS	NOT NULL				AND
								--U_SPR_CONFIRM.DOG_NPP	IS	NOT NULL				AND
								U_SPR_CONFIRM.DOG_ID	=	U_DOGOVOR.DOG_ID	
							)
						)												AND	
						--	ПД с кодами 14
						(
							--	Детализация явно не указана
							( 
								U_SPR_CONFIRM.KODD		=	'14'	AND  
								U_SPR_CONFIRM.DIRECTION	IS	NULL	AND
								(
									U_DOGOVOR.VID_KONTR	=	'2'	OR
									U_DOGOVOR.VID_KONTR	=	'4'	OR
									(
										U_DOGOVOR.VID_KONTR	=	'9'	AND
										(	
											U_SPR_CONFIRM.TYPE	=	'2'	OR
											U_SPR_CONFIRM.TYPE	=	'4'
										)
									)
								)
							)		
							OR
							--	Детализация явно указана
							(
								U_SPR_CONFIRM.KODD		=	'14'	AND  
								U_SPR_CONFIRM.DIRECTION	=	'1'				
							 )			
						)											AND
		   				U_SPR_CONFIRM.PR_NOT_CALC	IS NULL		    AND
						U_SPR_CONFIRM.DEL_FLAG		IS NULL	
			)		AS	SUM_CONFIRM_14_MINUS,

			--	--------------------------------
			--	Разница
			--	--------------------------------
			(
				--	-------------------------------
				--	Сумма зачислений
				--	-------------------------------
				(
					SELECT	ISNULL( SUM( U_OPLATA.SUMK ), 0 )
					FROM	U_OPLATA (NOLOCK)
					INNER	JOIN VIDOP	(NOLOCK)	ON	
							U_OPLATA.KODOP				=	VIDOP.KOD	AND	
							VIDOP.PR_OBOROT_KONTRAKT	=	1
					LEFT	OUTER JOIN U_PS (NOLOCK)	ON	
							U_PS.RESIDENT_ID		=	U_OPLATA.RESIDENT_ID	AND
							U_PS.PS_ID				=	U_OPLATA.PS_ID			AND
							U_PS.DEL_FLAG 			IS	NULL
					 WHERE	U_OPLATA.RESIDENT_ID	=	U_DOGOVOR.RESIDENT_ID	AND
							U_OPLATA.VALK			=	U_DOGOVOR.KVALK			AND
							U_OPLATA.DIRECTION		=	'1'						AND						
							U_OPLATA.D_REFER		<	@D_CALC					AND
							(
								--	Платёж ссылается на Контракт (Договор) через Паспорт сделки
								(
									U_OPLATA.PS_ID		IS	NOT NULL			AND
									--U_OPLATA.DOG_ID		IS	NULL				AND
									--U_OPLATA.DOG_NPP	IS	NULL				AND
									--U_OPLATA.PS_ID		=	U_PS.PS_ID			AND
									U_PS.DOG_ID			=	U_DOGOVOR.DOG_ID	
								)
								OR
								--	Платёж ссылается на Контракт (Договор) напрямую
								(
									--U_OPLATA.PS_ID		IS	NULL				AND
									U_OPLATA.DOG_ID		IS	NOT NULL			AND
									--U_OPLATA.DOG_NPP	IS	NOT NULL			AND
									U_OPLATA.DOG_ID		=	U_DOGOVOR.DOG_ID		
								)
							)													AND	
							U_OPLATA.DEL_FLAG		IS	NULL					
				)		

				-

				--	-------------------------------
				--	Сумма списаний
				--	-------------------------------
				(
					SELECT	ISNULL( SUM( U_OPLATA.SUMK ), 0 )
					FROM	U_OPLATA (NOLOCK)
					INNER	JOIN VIDOP	(NOLOCK)	ON	
							U_OPLATA.KODOP				=	VIDOP.KOD	AND	
							VIDOP.PR_OBOROT_KONTRAKT	=	1
					LEFT	OUTER JOIN U_PS (NOLOCK)	ON	
							U_PS.RESIDENT_ID		=	U_OPLATA.RESIDENT_ID	AND
							U_PS.PS_ID				=	U_OPLATA.PS_ID			AND
							U_PS.DEL_FLAG 			IS	NULL
					 WHERE	U_OPLATA.RESIDENT_ID	=	U_DOGOVOR.RESIDENT_ID	AND
							U_OPLATA.VALK			=	U_DOGOVOR.KVALK			AND
							U_OPLATA.DIRECTION		=	'2'						AND						
							U_OPLATA.D_REFER		<	@D_CALC					AND
							(
								--	Платёж ссылается на Контракт (Договор) через Паспорт сделки
								(
									U_OPLATA.PS_ID		IS	NOT NULL			AND
									--U_OPLATA.DOG_ID		IS	NULL				AND
									--U_OPLATA.DOG_NPP	IS	NULL				AND
									--U_OPLATA.PS_ID		=	U_PS.PS_ID			AND
									U_PS.DOG_ID			=	U_DOGOVOR.DOG_ID		
								)
								OR
								--	Платёж ссылается на Контракт (Договор) напрямую
								(
									--U_OPLATA.PS_ID		IS	NULL				AND
									U_OPLATA.DOG_ID		IS	NOT NULL			AND
									--U_OPLATA.DOG_NPP	IS	NOT NULL			AND
									U_OPLATA.DOG_ID		=	U_DOGOVOR.DOG_ID		
								)
							)													AND	
							U_OPLATA.DEL_FLAG		IS	NULL					
				)

				+

				--	----------------------------------------------------
				--	Сумма подтверждающих документов со знаком (+)
				--	----------------------------------------------------
				(
					 SELECT ISNULL( SUM( U_SPR_CONFIRM.SUMK ), 0 )
					 FROM	U_SPR_CONFIRM (NOLOCK)
					 LEFT	OUTER JOIN U_PS (NOLOCK)	ON	
							U_PS.RESIDENT_ID			=	U_SPR_CONFIRM.RESIDENT_ID	AND
							U_PS.PS_ID					=	U_SPR_CONFIRM.PS_ID			AND
							U_PS.DEL_FLAG 				IS	NULL
					 WHERE	U_SPR_CONFIRM.RESIDENT_ID	=	U_DOGOVOR.RESIDENT_ID		AND
							U_SPR_CONFIRM.VALK			=	U_DOGOVOR.KVALK				AND
							U_SPR_CONFIRM.D_DOC			<	@D_CALC						AND
							(
								--	ПД ссылается на Контракт (Договор) через Паспорт сделки
								(
									U_SPR_CONFIRM.PS_ID		IS	NOT NULL				AND
									--U_SPR_CONFIRM.DOG_ID	IS	NULL					AND
									--U_SPR_CONFIRM.DOG_NPP	IS	NULL					AND
									--U_SPR_CONFIRM.PS_ID		=	U_PS.PS_ID				AND
									U_PS.DOG_ID				=	U_DOGOVOR.DOG_ID
								)
								OR
								--	ПД ссылается на Контракт (Договор) напрямую
								(
									--U_SPR_CONFIRM.PS_ID		IS	NULL					AND
									U_SPR_CONFIRM.DOG_ID	IS	NOT NULL				AND
									--U_SPR_CONFIRM.DOG_NPP	IS	NOT NULL				AND
									U_SPR_CONFIRM.DOG_ID	=	U_DOGOVOR.DOG_ID	
								)
							)												AND	
							(
								--	ПД с кодами 01, 02, 04
								(		
									--	Детализация явно не указана
									( 
										(
											U_SPR_CONFIRM.KODD	=	'01'	OR 
											U_SPR_CONFIRM.KODD	=	'02'	OR
											U_SPR_CONFIRM.KODD	=	'04' 
										)									AND  
										U_SPR_CONFIRM.DIRECTION	IS	NULL	AND
										(
											U_DOGOVOR.VID_KONTR	=	'2'	OR
											U_DOGOVOR.VID_KONTR	=	'4'	OR
											(
												U_DOGOVOR.VID_KONTR	=	'9' AND 
												(
													U_SPR_CONFIRM.TYPE	=	'2'	OR 
													U_SPR_CONFIRM.TYPE	=	'4' 
												) 
											) 
										)
									)		
									OR
									--	Детализация явно указана
									(
										(
											U_SPR_CONFIRM.KODD	=	'01'	OR 
											U_SPR_CONFIRM.KODD	=	'02'	OR
											U_SPR_CONFIRM.KODD	=	'04'
										)									AND  
										U_SPR_CONFIRM.DIRECTION		= '1'				
									)			
								)											
								OR
								--	ПД с кодами	12, 13
								(
									U_SPR_CONFIRM.KODD	= '12'	OR
									U_SPR_CONFIRM.KODD	= '13'				
								)
								OR
								--	ПД	с кодами 14 
								(		
									--	Детализация явно не указана
									( 
										U_SPR_CONFIRM.KODD		= '14'		AND  
										U_SPR_CONFIRM.DIRECTION	IS NULL		AND
										(
											U_DOGOVOR.VID_KONTR	=	'1'	OR
											U_DOGOVOR.VID_KONTR	=	'3'	OR  
											(
												U_DOGOVOR.VID_KONTR	=	'9'	AND	
												(	
													U_SPR_CONFIRM.TYPE	=	'1'	OR
													U_SPR_CONFIRM.TYPE	=	'3'
												) 
											) 
										)
									)		
									OR
									--	Детализация явно указана
									(
										U_SPR_CONFIRM.KODD		=	'14'	AND  
										U_SPR_CONFIRM.DIRECTION	=	'2'				
									)								
								)
							)												AND
			   				U_SPR_CONFIRM.PR_NOT_CALC	IS NULL				AND
							U_SPR_CONFIRM.DEL_FLAG		IS NULL	
				)		

				-

				--	----------------------------------------------------
				--	Сумма подтверждающих документов со знаком (-)
				--	----------------------------------------------------
				(
					 SELECT ISNULL( SUM( U_SPR_CONFIRM.SUMK ), 0 )
					 FROM	U_SPR_CONFIRM (NOLOCK)
					 LEFT	OUTER JOIN U_PS (NOLOCK)	ON	
							U_PS.RESIDENT_ID			=	U_SPR_CONFIRM.RESIDENT_ID	AND
							U_PS.PS_ID					=	U_SPR_CONFIRM.PS_ID			AND
							U_PS.DEL_FLAG 				IS	NULL
					 WHERE	U_SPR_CONFIRM.RESIDENT_ID	=	U_DOGOVOR.RESIDENT_ID		AND
							U_SPR_CONFIRM.VALK			=	U_DOGOVOR.KVALK				AND
							U_SPR_CONFIRM.D_DOC			<	@D_CALC						AND
							(
								--	ПД ссылается на Контракт (Договор) через Паспорт сделки
								(
									U_SPR_CONFIRM.PS_ID		IS	NOT NULL				AND
									--U_SPR_CONFIRM.DOG_ID	IS	NULL					AND
									--U_SPR_CONFIRM.DOG_NPP	IS	NULL					AND
									--U_SPR_CONFIRM.PS_ID		=	U_PS.PS_ID				AND
									U_PS.DOG_ID				=	U_DOGOVOR.DOG_ID	
								)
								OR
								--	ПД ссылается на Контракт (Договор) напрямую
								(
									--U_SPR_CONFIRM.PS_ID		IS	NULL					AND
									U_SPR_CONFIRM.DOG_ID	IS	NOT NULL				AND
									--U_SPR_CONFIRM.DOG_NPP	IS	NOT NULL				AND
									U_SPR_CONFIRM.DOG_ID	=	U_DOGOVOR.DOG_ID	
								)
							)												AND	
							(
								--	ПД с кодами 01, 02, 04
								(		
									--	Детализация явно не указана
									( 
										(
											U_SPR_CONFIRM.KODD	=	'01'	OR
											U_SPR_CONFIRM.KODD	=	'02'	OR
											U_SPR_CONFIRM.KODD	=	'04'
										)									AND  
										U_SPR_CONFIRM.DIRECTION IS NULL		AND
										(
											U_DOGOVOR.VID_KONTR	=	'1'	OR
											U_DOGOVOR.VID_KONTR	=	'3'	OR
											(
												U_DOGOVOR.VID_KONTR	=	'9'	AND
												(
													U_SPR_CONFIRM.TYPE	=	'1'	OR
													U_SPR_CONFIRM.TYPE	=	'3'
												)
											) 
										)
									)		
									OR
									--	Детализация явно	указана
									(
										(
											U_SPR_CONFIRM.KODD	=	'01'	OR
											U_SPR_CONFIRM.KODD	=	'02'	OR
											U_SPR_CONFIRM.KODD	=	'04'
										)									AND  
										U_SPR_CONFIRM.DIRECTION	= '2'				
									)			
								)						
								OR
								--	ПД с кодами	03, 05, 10, 11
								(
									U_SPR_CONFIRM.KODD	= '03'	OR
									U_SPR_CONFIRM.KODD	= '05'	OR
									U_SPR_CONFIRM.KODD	= '10'	OR
									U_SPR_CONFIRM.KODD	= '11'				
								)
								OR
								--	ПД с кодами 14
								(
									--	Детализация явно не указана
									( 
										U_SPR_CONFIRM.KODD		=	'14'	AND  
										U_SPR_CONFIRM.DIRECTION	IS	NULL	AND
										(
											U_DOGOVOR.VID_KONTR	=	'2'	OR
											U_DOGOVOR.VID_KONTR	=	'4'	OR
											(
												U_DOGOVOR.VID_KONTR	=	'9'	AND
												(	
													U_SPR_CONFIRM.TYPE	=	'2'	OR
													U_SPR_CONFIRM.TYPE	=	'4'
												)
											)
										)
									)		
									OR
									--	Детализация явно указана
									(
										U_SPR_CONFIRM.KODD		=	'14'	AND  
										U_SPR_CONFIRM.DIRECTION	=	'1'				
									 )			
								)
							)												AND
			   				U_SPR_CONFIRM.PR_NOT_CALC	IS NULL				AND
							U_SPR_CONFIRM.DEL_FLAG		IS NULL	
				)
			)		AS	SUM_DIFFERENT

	FROM	U_DOGOVOR (NOLOCK)
	INNER	JOIN	U_USERS_RESIDENTS (NOLOCK) ON 
			U_USERS_RESIDENTS.RESIDENT_ID	= U_DOGOVOR.RESIDENT_ID		AND
			U_USERS_RESIDENTS.USER_ID		= @USER_ID
	INNER	JOIN	U_RESIDENTS (NOLOCK) ON	
			U_RESIDENTS.RESIDENT_ID			= U_DOGOVOR.RESIDENT_ID		AND
			U_RESIDENTS.DEL_FLAG 			IS NULL	
	INNER	JOIN	U_IN_PART (NOLOCK) ON
			U_IN_PART.PARTNER_ID			=	U_DOGOVOR.PARTNER_ID	AND
			U_IN_PART.DEL_FLAG				IS NULL
	WHERE	-- отбор по Участнику ВЭД
			(
				@RESIDENT_ID 			= 0 			OR
				U_DOGOVOR.RESIDENT_ID	= @RESIDENT_ID	 
			)															AND
			-- отбор по Виду Договора (контракта)
			( 
				@VID_KONTR				=	'0'			OR
				U_DOGOVOR.VID_KONTR		=	@VID_KONTR
			)															AND
			-- отбор по Договору (контракту)
			( 
				@DOG_ID					=	0			OR
				U_DOGOVOR.DOG_ID		=	@DOG_ID
			)															AND
			-- отбор по Иностранному контрагенту
			(
				@PARTNER_ID 			= 0 			OR
				U_IN_PART.PARTNER_ID	= @PARTNER_ID	 
			)															AND
			-- только Контракты + Прочее
			CHARINDEX(U_DOGOVOR.VID_KONTR, '12349Z') > 0				AND
			-- отбор по диапазону Даты завершения исполнения обязательств
			(	@D_END_BEG	IS NULL		OR
				ISNULL( [dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID), CONVERT(DATETIME, '30000606' ))	>= ISNULL(@D_END_BEG, CONVERT(DATETIME, '19000101'))
			)	AND
			(	@D_END_END	IS NULL		OR
				ISNULL( [dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID), CONVERT(DATETIME, '30000606' ))	<= ISNULL(@D_END_END, CONVERT(DATETIME, '30000606'))	
			)	AND
			U_DOGOVOR.DEL_FLAG		IS	NULL
	--GROUP	BY U_DOGOVOR.RESIDENT_ID, U_IN_PART.NAMEP, U_DOGOVOR.DOG_ID, U_DOGOVOR.VID_KONTR, U_DOGOVOR.N_KONTR, U_DOGOVOR.D_KONTR, U_DOGOVOR.KVALK
	--ORDER	BY NAMER_CR, U_IN_PART.NAMEP, U_DOGOVOR.N_KONTR, U_DOGOVOR.D_KONTR, U_DOGOVOR.KVALK
	GROUP	BY U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID, U_DOGOVOR.VID_KONTR, U_DOGOVOR.N_KONTR, U_DOGOVOR.D_KONTR, U_DOGOVOR.KVALK, U_IN_PART.NAMEP
	ORDER	BY NAMER_CR, U_DOGOVOR.N_KONTR, U_DOGOVOR.D_KONTR, U_DOGOVOR.KVALK	
GO

GRANT  EXECUTE  ON [dbo].[U_DOGOVOR_LIST_OBOROT_CONTRACT]  TO [OPERS], [AUDITS]
GO

--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[U_DOGOVOR_LIST_OBOROT_CREDIT]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[U_DOGOVOR_LIST_OBOROT_CREDIT]
GO

CREATE PROCEDURE [dbo].[U_DOGOVOR_LIST_OBOROT_CREDIT]
--	-----------------------------------------------------------------------------------------------------------------------
--	Расчёт оборотов по Договорам (кредиты)
--	-----------------------------------------------------------------------------------------------------------------------
--	@USER_ID 		-	идентификатор пользователя
--	@RESIDENT_ID 	-	идентификатор Участника ВЭД (если 0, то все Участники ВЭД)
--	@PARTNER_ID 	-	идентификатор Иностранного контрагента (если 0, то все Иностранные контрагенты)
--	@VID_KONTR		- 	вид Договора (если '0', то для всех видов)
--	@DOG_ID 		-	идентификатор Договора ( если 0, то все Договоры с типом 5 и 6)
--	@D_END_BEG		-	нижняя граница диапазона дат окончания исполнения обязательств по кредитному договору	
--	@D_END_END		-	верхняя граница диапазона дат окончания исполнения обязательств по контракту
--	@D_CALC			-	дата, на которую расчитывается оборот
--	------------------------------------------------------------------------------------------------------------------------
--	(Модификация	в версии 2.1.0)
--	------------------------------------------------------------------------------------------------------------------------
(
	@USER_ID		AS VARCHAR(30),
	@RESIDENT_ID	AS INTEGER,
	@PARTNER_ID		AS INTEGER			=	NULL,
	@VID_KONTR		AS CHAR(10)			=	'0',
	@DOG_ID			AS INTEGER,
	@D_END_BEG		AS DATETIME			=	NULL,
	@D_END_END		AS DATETIME			=	NULL,
	@D_CALC			AS SMALLDATETIME	=	NULL
)
AS
	SET NOCOUNT ON

	--	-------------------------------------
	--	Нвчальные значения
	--	-------------------------------------
	--	Ecли не указана дата расчёта, то расчёт производится на текущую дату
	IF	@D_CALC	IS NULL
		SELECT	@D_CALC	= CONVERT( SMALLDATETIME, GETDATE() )

	--	Для точности расчёта будем применять "<" вместо "<="
	--	Поэтому увеличиваем расчётную дату на 1-н день
	SELECT	@D_CALC	= DATEADD( day, 1, @D_CALC )

	SELECT	@RESIDENT_ID	= ISNULL(@RESIDENT_ID, 0)
	SELECT	@PARTNER_ID		= ISNULL(@PARTNER_ID, 0)
	SELECT	@VID_KONTR		= ISNULL(@VID_KONTR, '0')
	SELECT	@DOG_ID			= ISNULL(@DOG_ID, 0)

	
	--	---------------------------------------------------------
	--	Выводим составляющие для расчёта оборотов и сами обороты
	--	---------------------------------------------------------
	SELECT	--	-------------------------------
			--	Основная информация	
			--	-------------------------------
			U_DOGOVOR.RESIDENT_ID,
			U_IN_PART.NAMEP,
			ISNULL(MAX(U_RESIDENTS.NAMER_S), MAX(U_RESIDENTS.NAMER))	AS NAMER_CR,
			U_DOGOVOR.DOG_ID,
			U_DOGOVOR.VID_KONTR, 
			U_DOGOVOR.N_KONTR, 
			U_DOGOVOR.D_KONTR, 

			--	-----------------------------------------
			--	Дата завершения исполнения обязательств
			--	-----------------------------------------
			[dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID)		AS D_END,
			
			--	-------------------------------
			--	Код валюты контракта	
			--	-------------------------------
			U_DOGOVOR.KVALK		AS KVALK,
							
			--	-------------------------------
			--	Сумма зачислений
			--	-------------------------------
			(
				SELECT	ISNULL(	SUM(U_OPLATA.SUMK), 0 )
				FROM	U_OPLATA (NOLOCK)
				INNER	JOIN VIDOP	(NOLOCK)	ON	
						U_OPLATA.KODOP			=	VIDOP.KOD	AND	
						VIDOP.PR_OBOROT_KREDIT	=	1
				LEFT	OUTER JOIN U_PS (NOLOCK)	ON	
						U_PS.RESIDENT_ID		=	U_OPLATA.RESIDENT_ID	AND
						U_PS.PS_ID				=	U_OPLATA.PS_ID			AND
						U_PS.DEL_FLAG 			IS	NULL
				WHERE	U_OPLATA.RESIDENT_ID 	=	U_DOGOVOR.RESIDENT_ID	AND
						U_OPLATA.VALK			=	U_DOGOVOR.KVALK			AND
						U_OPLATA.DIRECTION		=	'1'						AND
						U_OPLATA.D_REFER		<	@D_CALC					AND
						(
							--	Платёж ссылается на Контракт (Договор) через Паспорт сделки
							(
								U_OPLATA.PS_ID		IS	NOT NULL			AND
								--U_OPLATA.DOG_ID		IS	NULL				AND
								--U_OPLATA.DOG_NPP	IS	NULL				AND
								--U_OPLATA.PS_ID		=	U_PS.PS_ID			AND
								U_PS.DOG_ID			=	U_DOGOVOR.DOG_ID	
							)
							OR
							--	Платёж ссылается на Контракт (Договор) напрямую
							(
								--U_OPLATA.PS_ID		IS	NULL				AND
								U_OPLATA.DOG_ID		IS	NOT NULL			AND
								--U_OPLATA.DOG_NPP	IS	NOT NULL			AND
								U_OPLATA.DOG_ID		=	U_DOGOVOR.DOG_ID	
							)
						)													AND					
						U_OPLATA.DEL_FLAG		IS NULL
			)			AS	SUM_OPLATA_PLUS,

			--	---------------------------------------
			--	в т.ч. Сумма зачислений (основной долг)
			--	---------------------------------------
			(
				SELECT	ISNULL(	SUM(U_OPLATA.SUMK), 0 )
				FROM	U_OPLATA (NOLOCK)
				INNER	JOIN VIDOP	(NOLOCK)	ON	
						U_OPLATA.KODOP			=	VIDOP.KOD	AND	
						VIDOP.PR_OBOROT_KREDIT	=	1
				LEFT	OUTER JOIN U_PS (NOLOCK)	ON	
						U_PS.RESIDENT_ID		=	U_OPLATA.RESIDENT_ID	AND
						U_PS.PS_ID				=	U_OPLATA.PS_ID			AND
						U_PS.DEL_FLAG 			IS	NULL
				WHERE	U_OPLATA.RESIDENT_ID 	=	U_DOGOVOR.RESIDENT_ID	AND
						U_OPLATA.VALK			=	U_DOGOVOR.KVALK			AND
						U_OPLATA.DIRECTION		=	'1'						AND
						(
							--	для типа "6"
							U_OPLATA.KODOP	= '41010'	OR 
							U_OPLATA.KODOP	= '41020'	OR
							--	для типа "5"	 
							U_OPLATA.KODOP	= '43010'	OR 
							U_OPLATA.KODOP	= '43020' 
						)													AND
						U_OPLATA.D_REFER		<	@D_CALC					AND
						(
							--	Платёж ссылается на Контракт (Договор) через Паспорт сделки
							(
								U_OPLATA.PS_ID		IS	NOT NULL			AND
								--U_OPLATA.DOG_ID		IS	NULL				AND
								--U_OPLATA.DOG_NPP	IS	NULL				AND
								--U_OPLATA.PS_ID		=	U_PS.PS_ID			AND
								U_PS.DOG_ID			=	U_DOGOVOR.DOG_ID		
							)
							OR
							--	Платёж ссылается на Контракт (Договор) напрямую
							(
								--U_OPLATA.PS_ID		IS	NULL				AND
								U_OPLATA.DOG_ID		IS	NOT NULL			AND
								--U_OPLATA.DOG_NPP	IS	NOT NULL			AND
								U_OPLATA.DOG_ID		=	U_DOGOVOR.DOG_ID		
							)
						)													AND					
						U_OPLATA.DEL_FLAG		IS NULL
			)			AS	SUM_OPLATA_MAIN_PLUS,

			--	--------------------------------------------
			--	в т.ч. Сумма зачислений (процентные платежи)
			--	--------------------------------------------
			(
				SELECT	ISNULL(	SUM(U_OPLATA.SUMK), 0 )
				FROM	U_OPLATA (NOLOCK)
				INNER	JOIN VIDOP	(NOLOCK)	ON	
						U_OPLATA.KODOP			=	VIDOP.KOD	AND	
						VIDOP.PR_OBOROT_KREDIT	=	1
				LEFT	OUTER JOIN U_PS (NOLOCK)	ON	
						U_PS.RESIDENT_ID		=	U_OPLATA.RESIDENT_ID	AND
						U_PS.PS_ID				=	U_OPLATA.PS_ID			AND
						U_PS.DEL_FLAG 			IS	NULL
				WHERE	U_OPLATA.RESIDENT_ID 	=	U_DOGOVOR.RESIDENT_ID	AND
						U_OPLATA.VALK			=	U_DOGOVOR.KVALK			AND
						U_OPLATA.DIRECTION		=	'1'						AND
						(
							--	для типа "5"	 
							U_OPLATA.KODOP	= '43030'	OR 
							U_OPLATA.KODOP	= '43040' 
						)													AND
						U_OPLATA.D_REFER		<	@D_CALC					AND
						(
							--	Платёж ссылается на Контракт (Договор) через Паспорт сделки
							(
								U_OPLATA.PS_ID		IS	NOT NULL			AND
								--U_OPLATA.DOG_ID		IS	NULL				AND
								--U_OPLATA.DOG_NPP	IS	NULL				AND
								--U_OPLATA.PS_ID		=	U_PS.PS_ID			AND
								U_PS.DOG_ID			=	U_DOGOVOR.DOG_ID		
							)
							OR
							--	Платёж ссылается на Контракт (Договор) напрямую
							(
								--U_OPLATA.PS_ID		IS	NULL				AND
								U_OPLATA.DOG_ID		IS	NOT NULL			AND
								--U_OPLATA.DOG_NPP	IS	NOT NULL			AND
								U_OPLATA.DOG_ID		=	U_DOGOVOR.DOG_ID	
							)
						)													AND					
						U_OPLATA.DEL_FLAG		IS NULL
			)			AS	SUM_OPLATA_PROC_PLUS,

			--	---------------------------------------------------------
			--	в т.ч. Сумма зачислений (возврат ошибочно списанных сумм)
			--	---------------------------------------------------------
			(
				SELECT	ISNULL(	SUM(U_OPLATA.SUMK), 0 )
				FROM	U_OPLATA (NOLOCK)
				INNER	JOIN VIDOP	(NOLOCK)	ON	
						U_OPLATA.KODOP			=	VIDOP.KOD	AND	
						VIDOP.PR_OBOROT_KREDIT	=	1
				LEFT	OUTER JOIN U_PS (NOLOCK)	ON	
						U_PS.RESIDENT_ID		=	U_OPLATA.RESIDENT_ID	AND
						U_PS.PS_ID				=	U_OPLATA.PS_ID			AND
						U_PS.DEL_FLAG 			IS	NULL
				WHERE	U_OPLATA.RESIDENT_ID 	=	U_DOGOVOR.RESIDENT_ID	AND
						U_OPLATA.VALK			=	U_DOGOVOR.KVALK			AND
						U_OPLATA.DIRECTION		=	'1'						AND
						U_OPLATA.KODOP			=	'99010'					AND 
						U_OPLATA.D_REFER		<	@D_CALC					AND
						(
							--	Платёж ссылается на Контракт (Договор) через Паспорт сделки
							(
								U_OPLATA.PS_ID		IS	NOT NULL			AND
								--U_OPLATA.DOG_ID		IS	NULL				AND
								--U_OPLATA.DOG_NPP	IS	NULL				AND
								--U_OPLATA.PS_ID		=	U_PS.PS_ID			AND
								U_PS.DOG_ID			=	U_DOGOVOR.DOG_ID		
							)
							OR
							--	Платёж ссылается на Контракт (Договор) напрямую
							(
								--U_OPLATA.PS_ID		IS	NULL				AND
								U_OPLATA.DOG_ID		IS	NOT NULL			AND
								--U_OPLATA.DOG_NPP	IS	NOT NULL			AND
								U_OPLATA.DOG_ID		=	U_DOGOVOR.DOG_ID		
							)
						)													AND					
						U_OPLATA.DEL_FLAG		IS NULL
			)			AS	SUM_OPLATA_RETURN_ERROR_PLUS,

			--	-------------------------------------
			--	Сумма списаний 
			--	-------------------------------------
			(
				SELECT	ISNULL(	SUM(U_OPLATA.SUMK), 0 )
				FROM	U_OPLATA (NOLOCK)
				INNER	JOIN VIDOP	(NOLOCK)	ON	
						U_OPLATA.KODOP			=	VIDOP.KOD	AND	
						VIDOP.PR_OBOROT_KREDIT	=	1
				LEFT	OUTER JOIN U_PS (NOLOCK)	ON	
						U_PS.RESIDENT_ID		=	U_OPLATA.RESIDENT_ID	AND
						U_PS.PS_ID				=	U_OPLATA.PS_ID			AND
						U_PS.DEL_FLAG 			IS	NULL
				WHERE	U_OPLATA.RESIDENT_ID 	=	U_DOGOVOR.RESIDENT_ID	AND
						U_OPLATA.VALK			=	U_DOGOVOR.KVALK			AND
						U_OPLATA.DIRECTION		=	'2'						AND
						U_OPLATA.D_REFER		<	@D_CALC					AND
						(
							--	Платёж ссылается на Контракт (Договор) через Паспорт сделки
							(
								U_OPLATA.PS_ID		IS	NOT NULL			AND
								--U_OPLATA.DOG_ID		IS	NULL				AND
								--U_OPLATA.DOG_NPP	IS	NULL				AND
								--U_OPLATA.PS_ID		=	U_PS.PS_ID			AND
								U_PS.DOG_ID			=	U_DOGOVOR.DOG_ID		
							)
							OR
							--	Платёж ссылается на Контракт (Договор) напрямую
							(
								--U_OPLATA.PS_ID		IS	NULL				AND
								U_OPLATA.DOG_ID		IS	NOT NULL			AND
								--U_OPLATA.DOG_NPP	IS	NOT NULL			AND
								U_OPLATA.DOG_ID		=	U_DOGOVOR.DOG_ID		
							)
						)													AND					
						U_OPLATA.DEL_FLAG		IS	NULL		
			)			AS	SUM_OPLATA_MINUS,
	
			--	-------------------------------------
			--	в т.ч. Сумма списаний (основной долг)
			--	-------------------------------------
			(
				SELECT	ISNULL(	SUM(U_OPLATA.SUMK), 0 )
				FROM	U_OPLATA (NOLOCK)
				INNER	JOIN VIDOP	(NOLOCK)	ON	
						U_OPLATA.KODOP			=	VIDOP.KOD	AND	
						VIDOP.PR_OBOROT_KREDIT	=	1
				LEFT	OUTER JOIN U_PS (NOLOCK)	ON	
						U_PS.RESIDENT_ID		=	U_OPLATA.RESIDENT_ID	AND
						U_PS.PS_ID				=	U_OPLATA.PS_ID			AND
						U_PS.DEL_FLAG 			IS	NULL
				WHERE	U_OPLATA.RESIDENT_ID 	=	U_DOGOVOR.RESIDENT_ID	AND
						U_OPLATA.VALK			=	U_DOGOVOR.KVALK			AND
						U_OPLATA.DIRECTION		=	'2'						AND
						(
							--	для типа "5"
							U_OPLATA.KODOP	= '40010'	OR 
							U_OPLATA.KODOP	= '40020'	OR
							--	для типа "6"	 
							U_OPLATA.KODOP	= '42010'	OR 
							U_OPLATA.KODOP	= '42020' 
						)													AND
						U_OPLATA.D_REFER		<	@D_CALC					AND
						(
							--	Платёж ссылается на Контракт (Договор) через Паспорт сделки
							(
								U_OPLATA.PS_ID		IS	NOT NULL			AND
								--U_OPLATA.DOG_ID		IS	NULL				AND
								--U_OPLATA.DOG_NPP	IS	NULL				AND
								--U_OPLATA.PS_ID		=	U_PS.PS_ID			AND
								U_PS.DOG_ID			=	U_DOGOVOR.DOG_ID		
							)
							OR
							--	Платёж ссылается на Контракт (Договор) напрямую
							(
								--U_OPLATA.PS_ID		IS	NULL				AND
								U_OPLATA.DOG_ID		IS	NOT NULL			AND
								--U_OPLATA.DOG_NPP	IS	NOT NULL			AND
								U_OPLATA.DOG_ID		=	U_DOGOVOR.DOG_ID		
							)
						)													AND					
						U_OPLATA.DEL_FLAG		IS	NULL		
			)			AS	SUM_OPLATA_MAIN_MINUS,

			--	------------------------------------------
			--	в т.ч. Сумма списаний (процентные платежи)
			--	------------------------------------------
			(
				SELECT	ISNULL(	SUM(U_OPLATA.SUMK), 0 )
				FROM	U_OPLATA (NOLOCK)
				INNER	JOIN VIDOP	(NOLOCK)	ON	
						U_OPLATA.KODOP			=	VIDOP.KOD	AND	
						VIDOP.PR_OBOROT_KREDIT	=	1
				LEFT	OUTER JOIN U_PS (NOLOCK)	ON	
						U_PS.RESIDENT_ID		=	U_OPLATA.RESIDENT_ID	AND
						U_PS.PS_ID				=	U_OPLATA.PS_ID			AND
						U_PS.DEL_FLAG 			IS	NULL
				WHERE	U_OPLATA.RESIDENT_ID 	=	U_DOGOVOR.RESIDENT_ID	AND
						U_OPLATA.VALK			=	U_DOGOVOR.KVALK			AND
						U_OPLATA.DIRECTION		=	'2'						AND
						(
							--	для типа "6"	 
							U_OPLATA.KODOP	= '42030'	OR 
							U_OPLATA.KODOP	= '42040' 
						)													AND
						U_OPLATA.D_REFER		<	@D_CALC					AND
						(
							--	Платёж ссылается на Контракт (Договор) через Паспорт сделки
							(
								U_OPLATA.PS_ID		IS	NOT NULL			AND
								--U_OPLATA.DOG_ID		IS	NULL				AND
								--U_OPLATA.DOG_NPP	IS	NULL				AND
								--U_OPLATA.PS_ID		=	U_PS.PS_ID			AND
								U_PS.DOG_ID			=	U_DOGOVOR.DOG_ID	
							)
							OR
							--	Платёж ссылается на Контракт (Договор) напрямую
							(
								--U_OPLATA.PS_ID		IS	NULL				AND
								U_OPLATA.DOG_ID		IS	NOT NULL			AND
								--U_OPLATA.DOG_NPP	IS	NOT NULL			AND
								U_OPLATA.DOG_ID		=	U_DOGOVOR.DOG_ID		
							)
						)													AND					
						U_OPLATA.DEL_FLAG		IS	NULL		
			)			AS	SUM_OPLATA_PROC_MINUS,

			--	----------------------------------------------------------
			--	в т.ч. Сумма списаний (возврат ошибочно зачисленных сумм)
			--	----------------------------------------------------------
			(
				SELECT	ISNULL(	SUM(U_OPLATA.SUMK), 0 )
				FROM	U_OPLATA (NOLOCK)
				INNER	JOIN VIDOP	(NOLOCK)	ON	
						U_OPLATA.KODOP			=	VIDOP.KOD	AND	
						VIDOP.PR_OBOROT_KREDIT	=	1
				LEFT	OUTER JOIN U_PS (NOLOCK)	ON	
						U_PS.RESIDENT_ID		=	U_OPLATA.RESIDENT_ID	AND
						U_PS.PS_ID				=	U_OPLATA.PS_ID			AND
						U_PS.DEL_FLAG 			IS	NULL
				WHERE	U_OPLATA.RESIDENT_ID 	=	U_DOGOVOR.RESIDENT_ID	AND
						U_OPLATA.VALK			=	U_DOGOVOR.KVALK			AND
						U_OPLATA.DIRECTION		=	'2'						AND
						U_OPLATA.KODOP			=	'99010'					AND 
						U_OPLATA.D_REFER		<	@D_CALC					AND
						(
							--	Платёж ссылается на Контракт (Договор) через Паспорт сделки
							(
								U_OPLATA.PS_ID		IS	NOT NULL			AND
								--U_OPLATA.DOG_ID		IS	NULL				AND
								--U_OPLATA.DOG_NPP	IS	NULL				AND
								--U_OPLATA.PS_ID		=	U_PS.PS_ID			AND
								U_PS.DOG_ID			=	U_DOGOVOR.DOG_ID
							)
							OR
							--	Платёж ссылается на Контракт (Договор) напрямую
							(
								--U_OPLATA.PS_ID		IS	NULL				AND
								U_OPLATA.DOG_ID		IS	NOT NULL			AND
								--U_OPLATA.DOG_NPP	IS	NOT NULL			AND
								U_OPLATA.DOG_ID		=	U_DOGOVOR.DOG_ID		
							)
						)													AND					
						U_OPLATA.DEL_FLAG		IS NULL
			)			AS	SUM_OPLATA_RETURN_ERROR_MINUS,

			--	----------------------------------------------------------------------------------
			--	Сумма изменения задолженности по основному долгу по иным основаниям (-) уменьшение
			--	----------------------------------------------------------------------------------
			(
				SELECT	ISNULL(	SUM(U_ISPOLNEN.SUMK), 0 )
				FROM	U_ISPOLNEN (NOLOCK)
				LEFT	OUTER JOIN U_PS (NOLOCK)	ON	
						U_PS.RESIDENT_ID		=	U_ISPOLNEN.RESIDENT_ID		AND
						U_PS.PS_ID				=	U_ISPOLNEN.PS_ID			AND
						U_PS.DEL_FLAG 			IS	NULL
				WHERE	U_ISPOLNEN.RESIDENT_ID		=	U_DOGOVOR.RESIDENT_ID	AND
						U_ISPOLNEN.VALK				=	U_DOGOVOR.KVALK			AND
						U_ISPOLNEN.D_DOC			<	@D_CALC					AND
						U_ISPOLNEN.KODZ 			>=	'02'					AND
						U_ISPOLNEN.KODZ 			<=	'12'					AND							
						(
							--	Cсылка на Контракт (Договор) через Паспорт сделки
							(
								U_ISPOLNEN.PS_ID	IS	NOT NULL			AND
--	------------------------------------------------------------------------------
-- !!! Внимание:	Данный фрагмент обеспечивает будущую функциональность
-- !!!				Убрать комментарии с данного фрагмента, только после внесения
-- !!!				полей DOG_ID и DOG_NPP в структуру таблицы U_ISPOLNEN  
--	------------------------------------------------------------------------------
--								U_ISPOLNEN.DOG_ID	IS	NULL				AND
--								U_ISPOLNEN.DOG_NPP	IS	NULL				AND
								--U_ISPOLNEN.PS_ID	=	U_PS.PS_ID			AND
								U_PS.DOG_ID			=	U_DOGOVOR.DOG_ID	
							)
--	------------------------------------------------------------------------------
-- !!! Внимание:	Данный фрагмент обеспечивает будущую функциональность
-- !!!				Убрать комментарии с данного фрагмента, только после внесения
-- !!!				полей DOG_ID и DOG_NPP в структуру таблицы U_ISPOLNEN  
--	------------------------------------------------------------------------------
--							OR
--							--	Ссылка на Контракт (Договор) напрямую
--							(
--								U_ISPOLNEN.PS_ID	IS	NULL				AND
--								U_ISPOLNEN.DOG_ID	IS	NOT NULL			AND
--								U_ISPOLNEN.DOG_NPP	IS	NOT NULL			AND
--								U_ISPOLNEN.DOG_ID	=	U_DOGOVOR.DOG_ID		
--							)
						)													AND					
						U_ISPOLNEN.DEL_FLAG			IS	NULL				
			)			AS	SUM_ISPOLNEN_MINUS,

			--	----------------------------------------------------------------------------------
			--	Сумма изменения задолженности по основному долгу по иным основаниям (+) увеличение
			--	----------------------------------------------------------------------------------
			(
				SELECT	ISNULL(	SUM(U_ISPOLNEN.SUMK), 0 )
				FROM	U_ISPOLNEN (NOLOCK)
				LEFT	OUTER JOIN U_PS (NOLOCK)	ON	
						U_PS.RESIDENT_ID		=	U_ISPOLNEN.RESIDENT_ID	AND
						U_PS.PS_ID				=	U_ISPOLNEN.PS_ID		AND
						U_PS.DEL_FLAG 			IS	NULL
				WHERE	U_ISPOLNEN.RESIDENT_ID	=	U_DOGOVOR.RESIDENT_ID	AND
						U_ISPOLNEN.VALK			=	U_DOGOVOR.KVALK			AND
						U_ISPOLNEN.D_DOC		<	@D_CALC					AND
						U_ISPOLNEN.KODZ 		=	'13'					AND
						(
							--	Cсылка на Контракт (Договор) через Паспорт сделки
							(
								U_ISPOLNEN.PS_ID	IS	NOT NULL			AND
--	------------------------------------------------------------------------------
-- !!! Внимание:	Данный фрагмент обеспечивает будущую функциональность
-- !!!				Убрать комментарии с данного фрагмента, только после внесения
-- !!!				полей DOG_ID и DOG_NPP в структуру таблицы U_ISPOLNEN  
--	------------------------------------------------------------------------------
--								U_ISPOLNEN.DOG_ID	IS	NULL				AND
--								U_ISPOLNEN.DOG_NPP	IS	NULL				AND
								--U_ISPOLNEN.PS_ID	=	U_PS.PS_ID			AND
								U_PS.DOG_ID			=	U_DOGOVOR.DOG_ID		
							)
--	------------------------------------------------------------------------------
-- !!! Внимание:	Данный фрагмент обеспечивает будущую функциональность
-- !!!				Убрать комментарии с данного фрагмента, только после внесения
-- !!!				полей DOG_ID и DOG_NPP в структуру таблицы U_ISPOLNEN  
--	------------------------------------------------------------------------------
--							OR
--							--	Ссылка на Контракт (Договор) напрямую
--							(
--								U_ISPOLNEN.PS_ID	IS	NULL				AND
--								U_ISPOLNEN.DOG_ID	IS	NOT NULL			AND
--								U_ISPOLNEN.DOG_NPP	IS	NOT NULL			AND
--								U_ISPOLNEN.DOG_ID	=	U_DOGOVOR.DOG_ID		
--							)
						)													AND					
						U_ISPOLNEN.DEL_FLAG			IS	NULL				
			)			AS	SUM_ISPOLNEN_PLUS,

			--	---------------------------------------------
			--	Разница
			--	---------------------------------------------
			(
				--	-------------------------------
				--	Сумма зачислений
				--	-------------------------------
				(
					SELECT	ISNULL(	SUM(U_OPLATA.SUMK), 0 )
					FROM	U_OPLATA (NOLOCK)
					INNER	JOIN VIDOP	(NOLOCK)	ON	
							U_OPLATA.KODOP			=	VIDOP.KOD	AND	
							VIDOP.PR_OBOROT_KREDIT	=	1
					LEFT	OUTER JOIN U_PS (NOLOCK)	ON	
							U_PS.RESIDENT_ID		=	U_OPLATA.RESIDENT_ID	AND
							U_PS.PS_ID				=	U_OPLATA.PS_ID			AND
							U_PS.DEL_FLAG 			IS	NULL
					WHERE	U_OPLATA.RESIDENT_ID 	=	U_DOGOVOR.RESIDENT_ID	AND
							U_OPLATA.VALK			=	U_DOGOVOR.KVALK			AND
							U_OPLATA.DIRECTION		=	'1'						AND
							U_OPLATA.D_REFER		<	@D_CALC					AND
							(
								--	Платёж ссылается на Контракт (Договор) через Паспорт сделки
								(
									U_OPLATA.PS_ID		IS	NOT NULL			AND
									--U_OPLATA.DOG_ID		IS	NULL				AND
									--U_OPLATA.DOG_NPP	IS	NULL				AND
									--U_OPLATA.PS_ID		=	U_PS.PS_ID			AND
									U_PS.DOG_ID			=	U_DOGOVOR.DOG_ID	
								)
								OR
								--	Платёж ссылается на Контракт (Договор) напрямую
								(
									--U_OPLATA.PS_ID		IS	NULL				AND
									U_OPLATA.DOG_ID		IS	NOT NULL			AND
									--U_OPLATA.DOG_NPP	IS	NOT NULL			AND
									U_OPLATA.DOG_ID		=	U_DOGOVOR.DOG_ID	
								)
							)													AND					
							U_OPLATA.DEL_FLAG		IS NULL
				)			

				-

				--	-------------------------------
				--	Сумма списаний
				--	-------------------------------
				(
					SELECT	ISNULL(	SUM(U_OPLATA.SUMK), 0 )
					FROM	U_OPLATA (NOLOCK)
					INNER	JOIN VIDOP	(NOLOCK)	ON	
							U_OPLATA.KODOP			=	VIDOP.KOD	AND	
							VIDOP.PR_OBOROT_KREDIT	=	1
					LEFT	OUTER JOIN U_PS (NOLOCK)	ON	
							U_PS.RESIDENT_ID		=	U_OPLATA.RESIDENT_ID	AND
							U_PS.PS_ID				=	U_OPLATA.PS_ID			AND
							U_PS.DEL_FLAG 			IS	NULL
					WHERE	U_OPLATA.RESIDENT_ID 	=	U_DOGOVOR.RESIDENT_ID	AND
							U_OPLATA.VALK			=	U_DOGOVOR.KVALK			AND
							U_OPLATA.DIRECTION		=	'2'						AND
							U_OPLATA.D_REFER		<	@D_CALC					AND
							(
								--	Платёж ссылается на Контракт (Договор) через Паспорт сделки
								(
									U_OPLATA.PS_ID		IS	NOT NULL			AND
									--U_OPLATA.DOG_ID		IS	NULL				AND
									--U_OPLATA.DOG_NPP	IS	NULL				AND
									--U_OPLATA.PS_ID		=	U_PS.PS_ID			AND
									U_PS.DOG_ID			=	U_DOGOVOR.DOG_ID
								)
								OR
								--	Платёж ссылается на Контракт (Договор) напрямую
								(
									--U_OPLATA.PS_ID		IS	NULL				AND
									U_OPLATA.DOG_ID		IS	NOT NULL			AND
									--U_OPLATA.DOG_NPP	IS	NOT NULL			AND
									U_OPLATA.DOG_ID		=	U_DOGOVOR.DOG_ID		
								)
							)													AND					
							U_OPLATA.DEL_FLAG		IS	NULL		
				)
		
				-
				
				--	----------------------------------------------------------------------------------
				--	Сумма изменения задолженности по основному долгу по иным основаниям (-) уменьшение
				--	----------------------------------------------------------------------------------
				(
					SELECT	ISNULL(	SUM(U_ISPOLNEN.SUMK), 0 )
					FROM	U_ISPOLNEN (NOLOCK)
					LEFT	OUTER JOIN U_PS (NOLOCK)	ON	
							U_PS.RESIDENT_ID		=	U_ISPOLNEN.RESIDENT_ID		AND
							U_PS.PS_ID				=	U_ISPOLNEN.PS_ID			AND
							U_PS.DEL_FLAG 			IS	NULL
					WHERE	U_ISPOLNEN.RESIDENT_ID		=	U_DOGOVOR.RESIDENT_ID	AND
							U_ISPOLNEN.VALK				=	U_DOGOVOR.KVALK			AND
							U_ISPOLNEN.D_DOC			<	@D_CALC					AND
							U_ISPOLNEN.KODZ 			>=	'02'					AND
							U_ISPOLNEN.KODZ 			<=	'12'					AND							
							(
								--	Cсылка на Контракт (Договор) через Паспорт сделки
								(
									U_ISPOLNEN.PS_ID	IS	NOT NULL			AND
	--	------------------------------------------------------------------------------
	-- !!! Внимание:	Данный фрагмент обеспечивает будущую функциональность
	-- !!!				Убрать комментарии с данного фрагмента, только после внесения
	-- !!!				полей DOG_ID и DOG_NPP в структуру таблицы U_ISPOLNEN  
	--	------------------------------------------------------------------------------
	--								U_ISPOLNEN.DOG_ID	IS	NULL				AND
	--								U_ISPOLNEN.DOG_NPP	IS	NULL				AND
									--U_ISPOLNEN.PS_ID	=	U_PS.PS_ID			AND
									U_PS.DOG_ID			=	U_DOGOVOR.DOG_ID		
								)
	--	------------------------------------------------------------------------------
	-- !!! Внимание:	Данный фрагмент обеспечивает будущую функциональность
	-- !!!				Убрать комментарии с данного фрагмента, только после внесения
	-- !!!				полей DOG_ID и DOG_NPP в структуру таблицы U_ISPOLNEN  
	--	------------------------------------------------------------------------------
	--							OR
	--							--	Ссылка на Контракт (Договор) напрямую
	--							(
	--								U_ISPOLNEN.PS_ID	IS	NULL				AND
	--								U_ISPOLNEN.DOG_ID	IS	NOT NULL			AND
	--								U_ISPOLNEN.DOG_NPP	IS	NOT NULL			AND
	--								U_ISPOLNEN.DOG_ID	=	U_DOGOVOR.DOG_ID		
	--							)
							)													AND					
							U_ISPOLNEN.DEL_FLAG			IS	NULL				
				)

				+

				--	----------------------------------------------------------------------------------
				--	Сумма изменения задолженности по основному долгу по иным основаниям (+) увеличение
				--	----------------------------------------------------------------------------------
				(
					SELECT	ISNULL(	SUM(U_ISPOLNEN.SUMK), 0 )
					FROM	U_ISPOLNEN (NOLOCK)
					LEFT	OUTER JOIN U_PS (NOLOCK)	ON	
							U_PS.RESIDENT_ID		=	U_ISPOLNEN.RESIDENT_ID	AND
							U_PS.PS_ID				=	U_ISPOLNEN.PS_ID		AND
							U_PS.DEL_FLAG 			IS	NULL
					WHERE	U_ISPOLNEN.RESIDENT_ID	=	U_DOGOVOR.RESIDENT_ID	AND
							U_ISPOLNEN.VALK			=	U_DOGOVOR.KVALK			AND
							U_ISPOLNEN.D_DOC		<	@D_CALC					AND
							U_ISPOLNEN.KODZ 		=	'13'					AND
							(
								--	Cсылка на Контракт (Договор) через Паспорт сделки
								(
									U_ISPOLNEN.PS_ID	IS	NOT NULL			AND
	--	------------------------------------------------------------------------------
	-- !!! Внимание:	Данный фрагмент обеспечивает будущую функциональность
	-- !!!				Убрать комментарии с данного фрагмента, только после внесения
	-- !!!				полей DOG_ID и DOG_NPP в структуру таблицы U_ISPOLNEN  
	--	------------------------------------------------------------------------------
	--								U_ISPOLNEN.DOG_ID	IS	NULL				AND
	--								U_ISPOLNEN.DOG_NPP	IS	NULL				AND
									--U_ISPOLNEN.PS_ID	=	U_PS.PS_ID			AND
									U_PS.DOG_ID			=	U_DOGOVOR.DOG_ID	
								)
	--	------------------------------------------------------------------------------
	-- !!! Внимание:	Данный фрагмент обеспечивает будущую функциональность
	-- !!!				Убрать комментарии с данного фрагмента, только после внесения
	-- !!!				полей DOG_ID и DOG_NPP в структуру таблицы U_ISPOLNEN  
	--	------------------------------------------------------------------------------
	--							OR
	--							--	Ссылка на Контракт (Договор) напрямую
	--							(
	--								U_ISPOLNEN.PS_ID	IS	NULL				AND
	--								U_ISPOLNEN.DOG_ID	IS	NOT NULL			AND
	--								U_ISPOLNEN.DOG_NPP	IS	NOT NULL			AND
	--								U_ISPOLNEN.DOG_ID	=	U_DOGOVOR.DOG_ID		
	--							)
							)													AND					
							U_ISPOLNEN.DEL_FLAG			IS	NULL				
				)

			)			AS	SUM_DIFFERENT

	FROM	U_DOGOVOR (NOLOCK)
	INNER	JOIN	U_USERS_RESIDENTS (NOLOCK) ON 
			U_USERS_RESIDENTS.RESIDENT_ID	= U_DOGOVOR.RESIDENT_ID		AND
			U_USERS_RESIDENTS.USER_ID		= @USER_ID
	INNER	JOIN	U_RESIDENTS (NOLOCK) ON	
			U_RESIDENTS.RESIDENT_ID			= U_DOGOVOR.RESIDENT_ID		AND
			U_RESIDENTS.DEL_FLAG 			IS NULL	
	INNER	JOIN	U_IN_PART (NOLOCK) ON
			U_IN_PART.PARTNER_ID			=	U_DOGOVOR.PARTNER_ID	AND
			U_IN_PART.DEL_FLAG				IS NULL
	WHERE	-- отбор по Участнику ВЭД
			(
				@RESIDENT_ID 			= 0 			OR
				U_DOGOVOR.RESIDENT_ID	= @RESIDENT_ID	 
			)															AND
			-- отбор по Виду Договора 
			( 
				@VID_KONTR				=	'0'			OR
				U_DOGOVOR.VID_KONTR		=	@VID_KONTR
			)															AND
			-- отбор по Договору 
			( 
				@DOG_ID					=	0			OR
				U_DOGOVOR.DOG_ID		=	@DOG_ID
			)															AND
			-- отбор по Иностранному контрагенту
			(
				@PARTNER_ID 			= 0 			OR
				U_IN_PART.PARTNER_ID	= @PARTNER_ID	 
			)															AND
			-- только Кредитные договоры
			CHARINDEX(U_DOGOVOR.VID_KONTR, '56') > 0					AND
			-- отбор по диапазону Даты завершения исполнения обязательств
			(	@D_END_BEG	IS NULL		OR
				ISNULL( [dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID), CONVERT(DATETIME, '30000606' ))	>= ISNULL(@D_END_BEG, CONVERT(DATETIME, '19000101'))
			)	AND
			(	@D_END_END	IS NULL		OR
				ISNULL( [dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID), CONVERT(DATETIME, '30000606' ))	<= ISNULL(@D_END_END, CONVERT(DATETIME, '30000606'))	
			)	AND
			U_DOGOVOR.DEL_FLAG		IS	NULL
	--GROUP	BY U_DOGOVOR.RESIDENT_ID, U_IN_PART.NAMEP, U_DOGOVOR.DOG_ID, U_DOGOVOR.VID_KONTR, U_DOGOVOR.N_KONTR, U_DOGOVOR.D_KONTR, U_DOGOVOR.KVALK
	--ORDER	BY NAMER_CR, U_IN_PART.NAMEP, U_DOGOVOR.N_KONTR, U_DOGOVOR.D_KONTR, U_DOGOVOR.KVALK
	GROUP	BY U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID, U_DOGOVOR.VID_KONTR, U_DOGOVOR.N_KONTR, U_DOGOVOR.D_KONTR, U_DOGOVOR.KVALK, U_IN_PART.NAMEP
	ORDER	BY NAMER_CR, U_DOGOVOR.N_KONTR, U_DOGOVOR.D_KONTR, U_DOGOVOR.KVALK	
GO

GRANT  EXECUTE  ON [dbo].[U_DOGOVOR_LIST_OBOROT_CREDIT]  TO [OPERS], [AUDITS]
GO

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

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

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

--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[U_PS_SELECT]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[U_PS_SELECT]
GO

CREATE PROCEDURE [dbo].[U_PS_SELECT]
--	---------------------------------------------------------------------------------
--	Чтение информации о Паспортах сделок для Участника ВЭД
--	---------------------------------------------------------------------------------
--	(Модификация	в версии 2.1.0)
--	---------------------------------------------------------------------------------
(
	@RESIDENT_ID	AS INTEGER,
	@TYPE_PS		AS INTEGER = 0
) 
AS
	IF @TYPE_PS = 0
		--
		--	Все ПС 
		--
		SELECT	U_PS.*,
				U_DOGOVOR.PARTNER_ID 							AS PARTNER_ID__DOG,
				ISNULL(U_DOGOVOR.N_DOPSOGL, U_DOGOVOR.N_KONTR)	AS N_KONTR__DOG,
				U_DOGOVOR.D_KONTR 								AS D_KONTR__DOG,
				U_DOGOVOR.KVALK									AS KVALK__DOG,
				U_DOGOVOR.SUMK 									AS SUMK__DOG,
				U_DOGOVOR.D_END 								AS D_END__DOG,
				U_DOGOVOR.R3_G7 								AS R3_G7__DOG, 
				U_DOGOVOR.F1_R3_G8 								AS F1_R3_G8__DOG,
				U_DOGOVOR.F1_R3_G9 								AS F1_R3_G9__DOG,
				U_DOGOVOR.F1_R3_G10 							AS F1_R3_G10__DOG, 
				U_DOGOVOR.F2_R3_G8 								AS F2_R3_G8__DOG,
				U_DOGOVOR.F2_R3_G9 								AS F2_R3_G9__DOG,
				U_DOGOVOR.F2_R3_G10 							AS F2_R3_G10__DOG, 
				U_DOGOVOR.VID_USLUG 							AS VID_USLUG__DOG,
				U_IN_PART.*,
				U_BANKS.NAMEB,
				U_BANKS.NAMEB_S
		FROM	U_PS (NOLOCK)
		INNER	JOIN	U_BANKS	(NOLOCK) ON 
				U_PS.BANK_ID			= U_BANKS.BANK_ID		
		INNER	JOIN	U_DOGOVOR (NOLOCK) ON 
				U_DOGOVOR.RESIDENT_ID	= U_PS.RESIDENT_ID		AND
				U_DOGOVOR.DOG_ID		= U_PS.DOG_ID			AND
				U_DOGOVOR.DOG_NPP		= U_PS.DOG_NPP
		INNER	JOIN	U_IN_PART (NOLOCK) ON	
				U_IN_PART.PARTNER_ID	= U_DOGOVOR.PARTNER_ID	
		WHERE	U_PS.RESIDENT_ID		= @RESIDENT_ID			AND
				U_PS.DEL_FLAG			IS NULL		
		ORDER	BY U_PS.D_PS DESC, U_PS.N_PS DESC

IF @TYPE_PS = 1
		--
		--	ПС Контракты
		--
		SELECT	U_PS.*,
				U_DOGOVOR.PARTNER_ID 							AS PARTNER_ID__DOG,
				ISNULL(U_DOGOVOR.N_DOPSOGL, U_DOGOVOR.N_KONTR)	AS N_KONTR__DOG,
				U_DOGOVOR.D_KONTR 								AS D_KONTR__DOG,
				U_DOGOVOR.KVALK									AS KVALK__DOG,
				U_DOGOVOR.SUMK 									AS SUMK__DOG,
				U_DOGOVOR.D_END 								AS D_END__DOG,
				U_DOGOVOR.R3_G7 								AS R3_G7__DOG, 
				U_DOGOVOR.F1_R3_G8 								AS F1_R3_G8__DOG,
				U_DOGOVOR.F1_R3_G9 								AS F1_R3_G9__DOG,
				U_DOGOVOR.F1_R3_G10 							AS F1_R3_G10_DOG, 
				U_DOGOVOR.F2_R3_G8 								AS F2_R3_G8__DOG,
				U_DOGOVOR.F2_R3_G9 								AS F2_R3_G9__DOG,
				U_DOGOVOR.F2_R3_G10 							AS F2_R3_G10__DOG, 
				U_DOGOVOR.VID_USLUG 							AS VID_USLUG__DOG,
				U_IN_PART.*,
				U_BANKS.NAMEB,
				U_BANKS.NAMEB_S
		FROM	U_PS (NOLOCK)
		INNER	JOIN	U_BANKS	(NOLOCK) ON 
				U_PS.BANK_ID			= U_BANKS.BANK_ID		
		INNER	JOIN	U_DOGOVOR (NOLOCK) ON 
				U_DOGOVOR.RESIDENT_ID	= U_PS.RESIDENT_ID		AND
				U_DOGOVOR.DOG_ID		= U_PS.DOG_ID			AND
				U_DOGOVOR.DOG_NPP		= U_PS.DOG_NPP
		INNER	JOIN	U_IN_PART (NOLOCK) ON	
				U_IN_PART.PARTNER_ID	= U_DOGOVOR.PARTNER_ID	
		WHERE	U_PS.RESIDENT_ID		= @RESIDENT_ID			AND
				U_PS.DEL_FLAG			IS NULL					AND 	
				(
					 SUBSTRING( U_PS.N_PS, 20, 1 ) = '1'	OR
					 SUBSTRING( U_PS.N_PS, 20, 1 ) = '2'	OR
					 SUBSTRING( U_PS.N_PS, 20, 1 ) = '3'	OR
					 SUBSTRING( U_PS.N_PS, 20, 1 ) = '4'	OR
					 SUBSTRING( U_PS.N_PS, 20, 1 ) = '9'
				)				
		ORDER	BY U_PS.D_PS DESC, U_PS.N_PS DESC
ELSE
		--
		--	ПС Кредиты
		--
		SELECT	U_PS.*,
				U_DOGOVOR.PARTNER_ID 							AS PARTNER_ID__DOG,
				ISNULL(U_DOGOVOR.N_DOPSOGL, U_DOGOVOR.N_KONTR)	AS N_KONTR__DOG,
				U_DOGOVOR.D_KONTR 								AS D_KONTR__DOG,
				U_DOGOVOR.KVALK									AS KVALK__DOG,
				U_DOGOVOR.SUMK 									AS SUMK__DOG,
				U_DOGOVOR.D_END 								AS D_END__DOG,
				U_DOGOVOR.R3_G7 								AS R3_G7__DOG, 
				U_DOGOVOR.F1_R3_G8 								AS F1_R3_G8__DOG,
				U_DOGOVOR.F1_R3_G9 								AS F1_R3_G9__DOG,
				U_DOGOVOR.F1_R3_G10 							AS F1_R3_G10_DOG, 
				U_DOGOVOR.F2_R3_G8 								AS F2_R3_G8__DOG,
				U_DOGOVOR.F2_R3_G9 								AS F2_R3_G9__DOG,
				U_DOGOVOR.F2_R3_G10 							AS F2_R3_G10__DOG, 
				U_DOGOVOR.VID_USLUG 							AS VID_USLUG__DOG,
				U_IN_PART.*,
				U_BANKS.NAMEB,
				U_BANKS.NAMEB_S
		FROM	U_PS (NOLOCK)
		INNER	JOIN	U_BANKS	(NOLOCK) ON 
				U_PS.BANK_ID			= U_BANKS.BANK_ID		
		INNER	JOIN	U_DOGOVOR (NOLOCK) ON 
				U_DOGOVOR.RESIDENT_ID	= U_PS.RESIDENT_ID		AND
				U_DOGOVOR.DOG_ID		= U_PS.DOG_ID			AND
				U_DOGOVOR.DOG_NPP		= U_PS.DOG_NPP
		INNER	JOIN	U_IN_PART (NOLOCK) ON	
				U_IN_PART.PARTNER_ID	= U_DOGOVOR.PARTNER_ID	
		WHERE	U_PS.RESIDENT_ID		= @RESIDENT_ID			AND
				U_PS.DEL_FLAG			IS NULL					AND 	
				(
					 SUBSTRING( U_PS.N_PS, 20, 1 ) = '5'	OR
					 SUBSTRING( U_PS.N_PS, 20, 1 ) = '6'	
				)
		ORDER	BY U_PS.D_PS DESC, U_PS.N_PS DESC						
GO

GRANT  EXECUTE  ON [dbo].[U_PS_SELECT]  TO [OPERS], [AUDITS]
GO

--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[U_PS_SELECT_BY_BANK_ID]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[U_PS_SELECT_BY_BANK_ID]
GO

CREATE PROCEDURE [dbo].[U_PS_SELECT_BY_BANK_ID]
--	----------------------------------------------------------------------------------------------------------------------------------------
--	Выборка Паспортов сделок Участника ВЭД по идентификатору уполномоченного Банка
--	----------------------------------------------------------------------------------------------------------------------------------------
--	Используется в формах ввода/коррекции Платежа, ПД и трёх видов Справок
--	@FLAG_TYPE_PS	= 0 - для всех типов, 1 - для контрактных ПС (при вводе ПД), 2 - для кредитных ПС (не используется)
--	----------------------------------------------------------------------------------------------------------------------------------------
--	(Модификация	в версии 2.1.0)
--	----------------------------------------------------------------------------------------------------------------------------------------
(
	@RESIDENT_ID	AS INTEGER,
	@BANK_ID		AS INTEGER,
	@FLAG_TYPE_PS	AS INTEGER = 0
	
) 
AS
	SELECT	@FLAG_TYPE_PS	= ISNULL(@FLAG_TYPE_PS, 0)

	SELECT	U_PS.N_PS,
			U_PS.PS_ID,
			U_PS.DOG_ID,
			U_PS.DOG_NPP,
			U_PS.BANK_ID,
			U_PS.F1_R62_SROK,
			U_PS.N_PS_OLD,
			U_PS.N_PS_DR,
			U_DOGOVOR.PARTNER_ID,
			U_DOGOVOR.VID_USLUG,
			U_DOGOVOR.KVALK,
			U_DOGOVOR.KONTR_SROK
	FROM	U_PS (NOLOCK)
	INNER	JOIN U_DOGOVOR (NOLOCK) ON
			U_DOGOVOR.RESIDENT_ID	= U_PS.RESIDENT_ID	AND
			U_DOGOVOR.DOG_ID		= U_PS.DOG_ID		AND
			U_DOGOVOR.DOG_NPP		= U_PS.DOG_NPP		AND
			U_DOGOVOR.DEL_FLAG		IS NULL	
	WHERE	U_PS.RESIDENT_ID		= @RESIDENT_ID		AND
			U_PS.BANK_ID			= @BANK_ID			AND
			(	@FLAG_TYPE_PS		= 0	
				OR
				(	@FLAG_TYPE_PS	= 1 AND
					(
					 SUBSTRING( U_PS.N_PS, 20, 1 ) = '1'	OR
					 SUBSTRING( U_PS.N_PS, 20, 1 ) = '2'	OR
					 SUBSTRING( U_PS.N_PS, 20, 1 ) = '3'	OR
					 SUBSTRING( U_PS.N_PS, 20, 1 ) = '4'	OR
					 SUBSTRING( U_PS.N_PS, 20, 1 ) = '9'
					)	
				)						
				OR
				(	@FLAG_TYPE_PS	= 2 AND
					(
					 SUBSTRING( U_PS.N_PS, 20, 1 ) = '5'	OR
					 SUBSTRING( U_PS.N_PS, 20, 1 ) = '6'
					)	
				)	
			)												AND
			U_PS.DEL_FLAG			IS NULL			
	ORDER	BY U_PS.N_PS DESC
GO

GRANT  EXECUTE  ON [dbo].[U_PS_SELECT_BY_BANK_ID]  TO [OPERS], [AUDITS]
GO

--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[U_PS_INSERT]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[U_PS_INSERT]
GO

CREATE PROCEDURE [dbo].[U_PS_INSERT]
--	------------------------------------------------------------------------------------------------------------------------
--	Добавление Паспорта сделки
--	------------------------------------------------------------------------------------------------------------------------
--
--	Возвращает: 
--	1. RC 				
--	   RC =	0	- ПС был добавлен	
--		9	- Договор не найден в БД						
--		10	- Ошибка при добавлении ПС 
--		20 	- Ошибка при вычислении идентификатора ПС
--		30	- Дублирование номера ПС
--		50	- Ошибка добавления уполномоченного лица Участника ВЭД
--		60	- Ошибка добавления уполномоченного лица Банка 
--		70	- Буквенный код валюты, входящий в код ставки "ЛИБОР" отсутствует в справочнике 
--		75	- Буквенный код валюты, входящий в код ставки "ЛИБОР" не соответствует коду валюты цены договора 
--		80	- Код ставки "ЛИБОР" отсутствует в справочнике 
--		85	- Договор с указанными номером и датой уже используется в другом ПС для данного Участника ВЭД и Иностранного контрагента 
--		100	- Ошибка при регистрации события
-- 		340	- Код валюты цены кредитного договора (пункт 6.2 графа 1) отсутствует в справочнике
-- 		440	- Неверный символ в пункте 6.5 (форма 2)
-- 		450	- Неверный символ в пункте 6.6 (форма 2)
-- 		460	- Для типа кредитного договора "5" - не проставляется отметка о принадлежности
--			  иностранного кредитора к международной финансовой организации
-- 		470	- Для типа кредитного договора "6" - допускается только одна отметка 
--			  о принадлежности иностранного кредитора к международной финансовой организации
-- 		480	- Для типа кредитного договора "6" - должна быть отметка 
--			  о принадлежности иностранного кредитора к международной финансовой организации
-- 		500	- Дата подписи ПС 1-ым лицом от Участника ВЭД больше текущей даты
-- 		510	- Дата подписи ПС 2-ым лицом от Участника ВЭД больше текущей даты
-- 		520	- Дата подписи ПС лицом от Банка больше текущей даты
--		560	- Дата, по состоянию на которую указывается задолженность по основному долгу, больше текущей даты
--
--	2. PS_ID
--		= 0	- ПС не был добавлен	
--		> 0	- Идентификатор добавленного ПС	
--	------------------------------------------------------------------------------------------------------------------------
--	(Модификация	в версии 2.1.0)
--	------------------------------------------------------------------------------------------------------------------------
(
	@RESIDENT_ID		AS	INTEGER,
	@BANK_ID			AS	INTEGER,
	@DOG_ID				AS	INTEGER,
	@DOG_NPP			AS	INTEGER,
	@PARTNER_ID			AS	INTEGER	= NULL,
	@N_PS				AS	CHAR (22), 
	@D_PS				AS	SMALLDATETIME	= NULL,
	@N_KONTR			AS	VARCHAR (100)	= NULL, 
	@D_KONTR			AS	SMALLDATETIME	= NULL,  
	@KVALK				AS	CHAR (3)		= NULL, 
	@SUMK				AS	DECIMAL (16, 2)	= NULL, 
	@D_END				AS	DATETIME		= NULL,  
	@R3_G7				AS	DECIMAL (16, 2)	= NULL, 
	@F1_R3_G8			AS	CHAR (1)		= NULL, 
	@F1_R3_G9			AS	CHAR (1)		= NULL,
	@F1_R3_G10			AS	CHAR (1)		= NULL,
	@F1_R61_USL			AS	VARCHAR (3000)	= NULL,
	@F1_R62_SROK		AS	CHAR (4)		= NULL,
	@F1_R63_D_LIST2 	AS	SMALLDATETIME	= NULL,
	@F2_R3_G8			AS	DECIMAL (16, 2)	= NULL,
	@F2_R3_G9			AS	CHAR (1)		= NULL, 
	@F2_R3_G10			AS	CHAR (1)		= NULL, 
	@N_PS_OLD			AS	VARCHAR (100)	= NULL, 
	@N_PS_DR			AS	CHAR (22)		= NULL, 
	@D_PS_MOD			AS	SMALLDATETIME	= NULL,  
	@N_PS_MOD			AS	INTEGER			= NULL,  
	@D_CLOSE			AS	SMALLDATETIME	= NULL,  
	@O_CLOSE			AS	VARCHAR (50)	= NULL, 
	@F2_R61_G1			AS	VARCHAR (250)	= NULL, 
	@F2_R61_G2			AS	CHAR  (6)		= NULL, 
	@F2_R61_G3			AS	VARCHAR (250)	= NULL, 
	@F2_R61_G4			AS	VARCHAR (250)	= NULL, 
	@F2_R62_G1			AS	CHAR (3)		= NULL, 
	@F2_R62_G2			AS	DECIMAL (16, 2)	= NULL, 
	@F2_R62_G3_DATE		AS	SMALLDATETIME	= NULL, 
	@F2_R63_USL			AS	VARCHAR (500)	= NULL, 
	@F2_R64_USL			AS	VARCHAR (500)	= NULL, 
	@F2_R65_MFK			AS	CHAR (1)		= NULL, 
	@F2_R65_EBRR		AS	CHAR (1)		= NULL, 
	@F2_R65_MB			AS	CHAR (1)		= NULL, 
	@F2_R65_DMFO		AS	CHAR (1)		= NULL, 
	@F2_R65_KRED		AS	CHAR (1)		= NULL, 
	@F2_R66_INVEST		AS	CHAR (1)		= NULL, 
	@F2_R67_SUM			AS	DECIMAL (16, 2)	= NULL, 
	@FIO_UPOLNOMR1		AS	VARCHAR (100)	= NULL,
	@DOL_UPOLNOMR1		AS	VARCHAR (100)	= NULL,
	@D_UPOLNOMR1		AS	SMALLDATETIME	= NULL,  
	@FIO_UPOLNOMR2		AS	VARCHAR (100)	= NULL,
	@DOL_UPOLNOMR2		AS	VARCHAR (100)	= NULL,
	@D_UPOLNOMR2		AS	SMALLDATETIME	= NULL,  
	@FIO_UPOLNOMB		AS	VARCHAR (100)	= NULL,
	@DOL_UPOLNOMB		AS	VARCHAR (100)	= NULL,
	@D_UPOLNOMB			AS	SMALLDATETIME	= NULL,  
	@USER_ID			AS	VARCHAR (30),
	@PRIM				AS	VARCHAR (500)	= NULL,
	@NAMER 				AS	VARCHAR (300)	= NULL,
  	@INN 				AS	VARCHAR(12)		= NULL,
  	@KPP 				AS	CHAR (9)		= NULL,
  	@OGRN  				AS	VARCHAR(15)		= NULL,
  	@DGR  				AS	SMALLDATETIME	= NULL,
  	@SUB  				AS	VARCHAR (50)	= NULL,
  	@REGION  			AS	VARCHAR (50)	= NULL,
  	@CITY  				AS	VARCHAR (50)	= NULL,
  	@PUNKT  			AS	VARCHAR (50)	= NULL,
	@STREET  			AS	VARCHAR (250)	= NULL,
  	@HOUSE  			AS	VARCHAR (50)	= NULL,
  	@KORPUS  			AS	VARCHAR (50)	= NULL,
  	@OFFICE  			AS	VARCHAR (50)	= NULL,
  	@VID_USLUG  		AS  VARCHAR (7)		= NULL,
	@PRIZ_PROJECT		AS  VARCHAR (1)		= NULL,
	@UNI_ID				AS  UNIQUEIDENTIFIER	= NULL,
	@D_LOAD				AS  SMALLDATETIME	= NULL,  
	@SRC_LOAD			AS	VARCHAR (15)	= NULL,  
	@D_PRED				AS  SMALLDATETIME	= NULL,  
	@D_PRED_PEREOF		AS  SMALLDATETIME	= NULL,  
	@DOG_ID_BANK		AS  INTEGER			= NULL,
	@DOG_NPP_BANK		AS  INTEGER			= NULL,
	@PS_ID				AS  INTEGER OUTPUT,
  	@RC					AS  INTEGER OUTPUT
)
 AS

	SET NOCOUNT ON

	--
	--	Рабочие переменные
	--
	DECLARE	@NEW_ID			AS INTEGER, 
			@RETURN_STATUS	AS INTEGER,
			@KOL			AS INTEGER,
			@UPOLNOMR_ID1	AS INTEGER,
			@UPOLNOMR_ID2	AS INTEGER,
			@UPOLNOMB_ID	AS INTEGER,
			@RC1			AS INTEGER
			
	--
	--	Начальные значения
	--
	SELECT	@PS_ID			= 0 
	SELECT	@NEW_ID			= 0 
	SELECT	@RETURN_STATUS	= 0
	SELECT	@KOL			= 0 

	--
	--	Поиск Договора
	--
	SELECT	@PARTNER_ID	= PARTNER_ID,
			@N_KONTR	= ISNULL(N_DOPSOGL, N_KONTR), 
			@D_KONTR	= D_KONTR,  
			@KVALK		= KVALK, 
			@SUMK		= SUMK, 
			@D_END		= D_END,  
			@R3_G7		= R3_G7, 
			@F1_R3_G8	= F1_R3_G8, 
			@F1_R3_G9	= F1_R3_G9,
			@F1_R3_G10	= F1_R3_G10,
			@F2_R3_G8	= F2_R3_G8,
			@F2_R3_G9	= F2_R3_G9, 
			@F2_R3_G10	= F2_R3_G10, 
			@VID_USLUG	= VID_USLUG
	FROM	U_DOGOVOR (NOLOCK)	
	WHERE	RESIDENT_ID	= @RESIDENT_ID	AND
			DOG_ID		= @DOG_ID		AND
			DOG_NPP		= @DOG_NPP		AND
			DEL_FLAG	IS NULL
	IF	@PARTNER_ID	IS NULL
		BEGIN
			SELECT	@RC		= 9
			GOTO	EXIT_PS_INSERT
		END

	--
	--	Проверка на дублирование номера ПС
	--	Примечание: для проектов ПС в 1-ой позиции указывается спец символ '#' 
	--	(Для проектов не выполняется!!!)
	--
		IF SUBSTRING( @N_PS, 1, 1) <> '#'	OR	@PRIZ_PROJECT	IS NULL
		BEGIN
			IF	EXISTS	(
						SELECT	*
						FROM	U_PS (NOLOCK)
						WHERE	N_PS		= @N_PS		AND
								DEL_FLAG	IS NULL					
					)
				BEGIN			
					SELECT	@RC		= 30
					GOTO	EXIT_PS_INSERT
				END	
		END

	
	--
	--	Проверка на использование Договора в широком смысле другим открытым ПС
	--	Для закрытых ПС не выполняется
	--
		IF	@D_CLOSE	IS NULL
			BEGIN
				IF EXISTS	(
							SELECT	*
							FROM	U_PS (NOLOCK)
							WHERE	RESIDENT_ID	= @RESIDENT_ID	AND
									DOG_ID		= @DOG_ID		AND
									D_CLOSE		IS NULL			AND
									DEL_FLAG	IS NULL	
						)
					BEGIN
						SELECT	@RC		= 85
						GOTO	EXIT_PS_INSERT
					END
			END


	--
	--	Проверка кода ставки "ЛИБОР"
	--
	IF	@F2_R61_G2	IS NOT NULL 
		BEGIN
			--
			--	Проверка кода ставки "ЛИБОР"
			--
			IF NOT EXISTS	(
						SELECT	*
						FROM	LIBOR (NOLOCK)
						WHERE	KOD	= SUBSTRING(@F2_R61_G2, 1, 3)
					)
				BEGIN
					SELECT	@RC		= 80
					GOTO	EXIT_PS_INSERT
				END

			--
			--	Проверка кода валюты в коде ставки "ЛИБОР"
			--
			IF NOT EXISTS	(
						SELECT	*
						FROM	VALW (NOLOCK)
						WHERE	KOD_LAT	= SUBSTRING(@F2_R61_G2, 4, 3)
					)
		  		BEGIN
		  			SELECT	@RC		= 70
		  			GOTO	EXIT_PS_INSERT
		  		END

			--
			--	Проверка кода валюты в коде ставки "ЛИБОР"
			--
			IF NOT EXISTS	(
						SELECT	* 
						FROM	VALW (NOLOCK)
						WHERE	KOD_LAT	= SUBSTRING(@F2_R61_G2, 4, 3)	AND
								KOD		= @KVALK
					)
		  		BEGIN
		  			SELECT	@RC		= 75
		  			GOTO	EXIT_PS_INSERT
		  		END

		END

	--	------------------------------------------------------------------------
	--	Проверка кода валюты цены кредитного договора (пункт 6.2 графа 1)
	--	------------------------------------------------------------------------
	IF	@F2_R62_G1	IS NOT NULL
		BEGIN
			IF	NOT	EXISTS (
							SELECT	*
							FROM	VALW (NOLOCK)
							WHERE	KOD	= @F2_R62_G1
						)
				BEGIN
					SELECT	@RC = 340
					GOTO	EXIT_PS_INSERT
				END
		END

	--	------------------------------------------------------------------------------------------------------------
	--	Проверка даты, на которую указывается начальная задолженность по основному долгу (пункт 6.2 графа 3)
	--	------------------------------------------------------------------------------------------------------------
	IF	@F2_R62_G3_DATE	IS NOT NULL
		BEGIN
			IF	@F2_R62_G3_DATE	> CONVERT( SMALLDATETIME, GETDATE() ) 
				BEGIN
					SELECT	@RC = 560
					GOTO   	EXIT_PS_INSERT	
				END
		END
	
	--	---------------------------------------------------------------------------------------------------------
	--	Обнуляем счетчик отметки о принадлежности иностранного кредитора к международной финансовой организации
	SELECT	@KOL = 0

	--	Отметка  о принадлежности к Международной валютной организации (символ X)
	IF	@F2_R65_MFK	IS NOT NULL
		BEGIN
			IF	@F2_R65_MFK	<> 'X'
				BEGIN
					SELECT	@RC = 440
					GOTO	EXIT_PS_INSERT
				END
			ELSE
				SELECT	@KOL = @KOL + 1
		END

	--	Отметка  о принадлежности к ЕБРР (символ X)
	IF	@F2_R65_EBRR	IS NOT NULL
		BEGIN
			IF	@F2_R65_EBRR	<> 'X'
				BEGIN
					SELECT	@RC = 440
					GOTO	EXIT_PS_INSERT
				END
			ELSE
				SELECT	@KOL = @KOL + 1
		END

	--	Отметка  о принадлежности к Мировому банку (символ X)
	IF	@F2_R65_MB	IS NOT NULL
		BEGIN
			IF	@F2_R65_MB	<> 'X'
				BEGIN
					SELECT	@RC = 440
					GOTO	EXIT_PS_INSERT
				END
			ELSE
				SELECT	@KOL = @KOL + 1
		END

	--	Отметка  о принадлежности к Другим финансовым международные организации (символ X)
	IF	@F2_R65_DMFO	IS NOT NULL
		BEGIN
			IF	@F2_R65_DMFO	<> 'X'
				BEGIN
					SELECT	@RC = 440
					GOTO	EXIT_PS_INSERT
				END
			ELSE
				SELECT	@KOL = @KOL + 1
		END

	--	Отметка  о принадлежности к Кредиторам (символ X)
	IF	@F2_R65_KRED	IS NOT NULL
		BEGIN
			IF	@F2_R65_KRED	<> 'X'
				BEGIN
					SELECT	@RC = 440
					GOTO	EXIT_PS_INSERT
				END
			ELSE
				SELECT	@KOL = @KOL + 1
		END

	--	Отметка о наличии отношений прямого инвестирования (символ X)
	IF	@F2_R66_INVEST	IS NOT NULL
		BEGIN
			IF	@F2_R66_INVEST	<> 'X'
				BEGIN
					SELECT	@RC = 450
					GOTO	EXIT_PS_INSERT
				END
		END

	--	Контроль для ПС с типом "5"
	IF	SUBSTRING(@N_PS, 20, 1) = '5'
		BEGIN
			IF	@KOL > 0				
				BEGIN
					SELECT	@RC = 460
					GOTO	EXIT_PS_INSERT
				END
		END

	--	Контроль для ПС с типом "6"
	IF	SUBSTRING(@N_PS, 20, 1) = '6'
		BEGIN
			IF	@KOL > 1				
				BEGIN
					SELECT	@RC = 470
					GOTO	EXIT_PS_INSERT
				END
		END

	--	Контроль для ПС с типом "6"
	IF	SUBSTRING(@N_PS, 20, 1) = '6'
		BEGIN
			IF	@KOL = 0				
				BEGIN
					SELECT	@RC = 480
					GOTO	EXIT_PS_INSERT
				END
		END
	--	---------------------------------------------------------------------------------------------------------

	--	--------------------------------------------------------
	--	Контроль даты подписи ПС 1-ым лицом от Участника ВЭД
	--	--------------------------------------------------------
	IF	@D_UPOLNOMR1	IS NOT NULL
		BEGIN
			IF	@D_UPOLNOMR1	> CONVERT( SMALLDATETIME, GETDATE() )  		
				BEGIN
					SELECT	@RC = 500
					GOTO   	EXIT_PS_INSERT
				END
		END
	
	--	--------------------------------------------------------	
	--	Контроль даты подписи ПС 2-ым лицом от Участника ВЭД
	--	--------------------------------------------------------
	IF	@D_UPOLNOMR2	IS NOT NULL
		BEGIN
			IF	@D_UPOLNOMR2	> CONVERT( SMALLDATETIME, GETDATE() ) 
				BEGIN
					SELECT	@RC = 510
					GOTO   	EXIT_PS_INSERT	
				END
		END

	--	--------------------------------------------------------
	--	Контроль даты подписи ПС лицом от Банка 
	--	--------------------------------------------------------
	IF	@D_UPOLNOMB		IS NOT NULL
		BEGIN
			IF	@D_UPOLNOMB	> CONVERT( SMALLDATETIME, GETDATE() ) 
				BEGIN
					SELECT	@RC = 520
					GOTO   	EXIT_PS_INSERT	
				END
		END

	--
	--	Проверка наличия Уполномоченного лица от Участника ВЭД
	--	с правом 1-ой подписи
	--	и определение его идентификатора
	--
	SELECT @UPOLNOMR_ID1 = NULL

	IF	@FIO_UPOLNOMR1 IS NOT NULL			
		BEGIN
			SELECT	@UPOLNOMR_ID1 				= UPOLNOMR_ID 
			FROM	U_UPOLNOMR (NOLOCK)
			WHERE	RESIDENT_ID								= @RESIDENT_ID										AND
					UPPER(RTRIM(LTRIM(FIO)))				= UPPER(RTRIM(LTRIM(@FIO_UPOLNOMR1)))				AND	
					UPPER(RTRIM(LTRIM(ISNULL(DOL, ''))))	= UPPER(RTRIM(LTRIM(ISNULL(@DOL_UPOLNOMR1, ''))))	AND
					DEL_FLAG								IS NULL
	
			IF	@UPOLNOMR_ID1 IS NULL
				BEGIN
					--
					--	Добавление уполномоченного лица
					--
					SELECT	@UPOLNOMR_ID1	= MAX( UPOLNOMR_ID ) + 1
					FROM	U_UPOLNOMR (NOLOCK)
					WHERE	RESIDENT_ID		= @RESIDENT_ID			
					IF	@@ERROR <> 0
						BEGIN	
							SELECT	@RC		= 50
							GOTO	EXIT_PS_INSERT
						END
		
					SELECT	@UPOLNOMR_ID1	= ISNULL(@UPOLNOMR_ID1, 1)

					INSERT	INTO U_UPOLNOMR  	
							( RESIDENT_ID, UPOLNOMR_ID, FIO, DOL, PRIM, DEL_FLAG )
					VALUES
							( @RESIDENT_ID, @UPOLNOMR_ID1, @FIO_UPOLNOMR1, @DOL_UPOLNOMR1, NULL, NULL )
					IF	@@ERROR <> 0
						BEGIN	
							SELECT	@RC		= 50
							GOTO	EXIT_PS_INSERT
						END
				END
		END

	--
	--	Проверка наличия Уполномоченного лица от Участника ВЭД
	--	с правом 2-ой подписи
	--	и определение его идентификатора
	--
	SELECT @UPOLNOMR_ID2 = NULL		

	IF	@FIO_UPOLNOMR2 IS NOT NULL 
		BEGIN
			SELECT	@UPOLNOMR_ID2 				= UPOLNOMR_ID
			FROM	U_UPOLNOMR (NOLOCK)
			WHERE	RESIDENT_ID								= @RESIDENT_ID										AND
					UPPER(RTRIM(LTRIM(FIO)))				= UPPER(RTRIM(LTRIM(@FIO_UPOLNOMR2)))				AND	
					UPPER(RTRIM(LTRIM(ISNULL(DOL, ''))))	= UPPER(RTRIM(LTRIM(ISNULL(@DOL_UPOLNOMR2, ''))))	AND
					DEL_FLAG								IS NULL
	
			IF	@UPOLNOMR_ID2 IS NULL
				BEGIN
					--
					--	Добавление уполномоченного лица
					--
					SELECT	@UPOLNOMR_ID2 = MAX(UPOLNOMR_ID) + 1
					FROM	U_UPOLNOMR (NOLOCK)
					WHERE	RESIDENT_ID	= @RESIDENT_ID			
					IF	@@ERROR <> 0
						BEGIN	
							SELECT	@RC	= 50
							GOTO	EXIT_PS_INSERT
						END
		
					SELECT	@UPOLNOMR_ID2	= ISNULL(@UPOLNOMR_ID2, 1)

					INSERT	INTO	U_UPOLNOMR  	
							( RESIDENT_ID, UPOLNOMR_ID, FIO, DOL, PRIM, DEL_FLAG )
					VALUES
							( @RESIDENT_ID, @UPOLNOMR_ID2, @FIO_UPOLNOMR2, @DOL_UPOLNOMR2, NULL, NULL )
					IF	@@ERROR <> 0
						BEGIN	
							SELECT	@RC		= 50
							GOTO	EXIT_PS_INSERT
						END
				END
		END

	--
	--	Проверка наличия Уполномоченного лица Банка
	--	и определение его идентификатора
	--
	SELECT	@UPOLNOMB_ID =	NULL

	IF	@FIO_UPOLNOMB IS NOT NULL	AND	@DOL_UPOLNOMB IS NOT NULL 	
		BEGIN

			SELECT	@UPOLNOMB_ID 			= UPOLNOMB_ID 
			FROM	U_UPOLNOMB (NOLOCK)
			WHERE	BANK_ID						= @BANK_ID								AND
					UPPER(RTRIM(LTRIM(FIO)))	= UPPER(RTRIM(LTRIM(@FIO_UPOLNOMB)))	AND	
					UPPER(RTRIM(LTRIM(DOL)))	= UPPER(RTRIM(LTRIM(@DOL_UPOLNOMB)))	AND
					DEL_FLAG					IS NULL
	
			IF	@UPOLNOMB_ID IS NULL
				BEGIN
					--
					--	Добавление уполномоченного лица
					--
					SELECT	@UPOLNOMB_ID = MAX(UPOLNOMB_ID) + 1
					FROM	U_UPOLNOMB (NOLOCK)
					WHERE	BANK_ID		= @BANK_ID		
					IF	@@ERROR <> 0
						BEGIN	
							SELECT	@RC		= 60
							GOTO	EXIT_PS_INSERT
						END

					SELECT	@UPOLNOMB_ID	= ISNULL(@UPOLNOMB_ID, 1)

					INSERT	INTO	U_UPOLNOMB  	
							(BANK_ID,  UPOLNOMB_ID, FIO, DOL, N_PECH, PRIM, DEL_FLAG)
					VALUES
							(@BANK_ID, @UPOLNOMB_ID, @FIO_UPOLNOMB, @DOL_UPOLNOMB, NULL, NULL, NULL)
					IF	@@ERROR <> 0
						BEGIN	
							SELECT	@RC		= 60
							GOTO	EXIT_PS_INSERT
						END
				END
		END

			--	-------------------------------------------	
			--	Добавляем новую запись
			--	-------------------------------------------
	
			--
			--	Определяем новый ID 
			--
			SELECT	@NEW_ID		= MAX(PS_ID) + 1
			FROM	U_PS (NOLOCK)
			WHERE	RESIDENT_ID	= @RESIDENT_ID	
			IF	@@ERROR <> 0
				BEGIN	
					SELECT	@RC		= 20
					GOTO	EXIT_PS_INSERT
				END
	
			SELECT	@NEW_ID	= ISNULL(@NEW_ID, 1)

			--	-------------------------------------------	
			--	Добавляем новую запись
			--	-------------------------------------------
			BEGIN	TRANSACTION

			INSERT	INTO	U_PS 
				(
					RESIDENT_ID , 
					PS_ID , 
				 	BANK_ID ,
					DOG_ID ,
					DOG_NPP ,
 					PARTNER_ID , 
		 			N_PS  , 
					D_PS ,
 					N_KONTR , 
 					D_KONTR , 
 					KVALK , 
 					SUMK  , 
 			 		D_END  , 
 					R3_G7 , 
 			 		F1_R3_G8 , 
 			 		F1_R3_G9  , 
 			 		F1_R3_G10  , 
					F1_R61_USL  ,
					F1_R62_SROK  ,
					F1_R63_D_LIST2 ,
 			 		F2_R3_G8  , 
 			 		F2_R3_G9 , 
 			 		F2_R3_G10 , 
 			 		N_PS_OLD  , 
 			 		N_PS_DR  , 
 			 		D_PS_MOD , 
 			 		N_PS_MOD  ,  
 			 		D_CLOSE  ,  
 			 		O_CLOSE , 
 			 		F2_R61_G1  ,  
 			 		F2_R61_G2 ,   
 			 		F2_R61_G3 ,  
 			 		F2_R61_G4 ,  
 			 		F2_R62_G1 ,  
 			 		F2_R62_G2 , 
					F2_R62_G3_DATE , 
 			 		F2_R63_USL ,  
 			 		F2_R64_USL , 
 			 		F2_R65_MFK   ,   
 			 		F2_R65_EBRR ,  
 			 		F2_R65_MB  ,   
 			 		F2_R65_DMFO ,   
 			 		F2_R65_KRED  , 
 			 		F2_R66_INVEST  ,  
 			 		F2_R67_SUM , 
 			 		UPOLNOMR_ID1 , 
					D_UPOLNOMR1,
 			 		UPOLNOMR_ID2 ,
					D_UPOLNOMR2 ,
 			 		UPOLNOMB_ID , 
					D_UPOLNOMB,
 			 		DEL_FLAG ,
					DKOR ,
					PRIM,
					NAMER,
				  	INN ,
				  	KPP ,
				  	OGRN,
				  	DGR ,
				  	SUB ,
				  	REGION,
				  	CITY ,
				  	PUNKT ,
					STREET,
				  	HOUSE ,
				  	KORPUS,
				  	OFFICE ,
				  	VID_USLUG ,
					PRIZ_PROJECT ,
					UNI_ID ,
					D_LOAD ,
					SRC_LOAD,
					D_PRED ,  
					D_PRED_PEREOF ,
					DOG_ID_BANK ,
					DOG_NPP_BANK
				)
			VALUES
				(
					@RESIDENT_ID  ,
					@NEW_ID    ,
					@BANK_ID ,
					@DOG_ID ,
					@DOG_NPP ,
					@PARTNER_ID  ,
					@N_PS   , 
					@D_PS ,
					@N_KONTR  , 
					@D_KONTR  ,  
					@KVALK   , 
					@SUMK   , 
					@D_END   ,  
					@R3_G7  , 
					@F1_R3_G8 , 
					@F1_R3_G9 ,
					@F1_R3_G10 ,
					@F1_R61_USL  ,
					@F1_R62_SROK ,
					@F1_R63_D_LIST2 ,
					@F2_R3_G8 ,
					@F2_R3_G9 , 
					@F2_R3_G10 , 
					@N_PS_OLD , 
					@N_PS_DR , 
					@D_PS_MOD ,  
					@N_PS_MOD ,  
					@D_CLOSE ,  
					@O_CLOSE , 
					@F2_R61_G1 , 
					@F2_R61_G2 , 
					@F2_R61_G3 , 
					@F2_R61_G4 , 
					@F2_R62_G1 , 
					@F2_R62_G2 , 
					@F2_R62_G3_DATE , 
					@F2_R63_USL , 
					@F2_R64_USL , 
					@F2_R65_MFK , 
					@F2_R65_EBRR , 
					@F2_R65_MB , 
					@F2_R65_DMFO , 
					@F2_R65_KRED , 
					@F2_R66_INVEST  , 
					@F2_R67_SUM , 
					@UPOLNOMR_ID1 ,
					@D_UPOLNOMR1,
					@UPOLNOMR_ID2 ,
					@D_UPOLNOMR2,	
					@UPOLNOMB_ID ,
					@D_UPOLNOMB,
					NULL ,
					CONVERT(SMALLDATETIME,GETDATE()),
					@PRIM,
					@NAMER	,
				  	@INN ,
				  	@KPP,
				  	@OGRN,
				  	@DGR,
				  	@SUB,
				  	@REGION,
				  	@CITY,
				  	@PUNKT,
					@STREET ,
				  	@HOUSE ,
				  	@KORPUS,
				  	@OFFICE ,
				  	@VID_USLUG ,
					@PRIZ_PROJECT ,
					@UNI_ID ,
					@D_LOAD ,
					@SRC_LOAD,
					@D_PRED ,  
					@D_PRED_PEREOF ,
					@DOG_ID_BANK ,
					@DOG_NPP_BANK
				)
			IF	@@ERROR <> 0
				BEGIN	
					ROLLBACK TRANSACTION 
					SELECT	@RC		= 10
					GOTO	EXIT_PS_INSERT
				END
			ELSE
				BEGIN	
					SELECT	@RC 	= 0
					SELECT	@PS_ID	= @NEW_ID
				END
	
	--
	--	Добавление события в журнал событий
	--
	EXECUTE	@RETURN_STATUS	= U_EVENT_INSERT
			@EVENT_NAME		= 'INS_PS',
			@USER_ID		= @USER_ID,
			@BANK_ID		= @BANK_ID,
			@RESIDENT_ID	= @RESIDENT_ID,
			@PS_ID			= @NEW_ID
			
	IF	@RETURN_STATUS <> 0
		BEGIN
			ROLLBACK TRANSACTION
			SELECT	@PS_ID = 0
		END
	ELSE 
		COMMIT TRANSACTION 
--
--	Возврат кода завершения и идентификатора добавленного ПС
--
EXIT_PS_INSERT:
	SELECT	RC = @RC + @RETURN_STATUS, PS_ID = @PS_ID
GO

GRANT  EXECUTE  ON [dbo].[U_PS_INSERT]  TO [OPERS]
GO

--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[U_PS_UPDATE]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[U_PS_UPDATE]
GO

CREATE PROCEDURE [dbo].[U_PS_UPDATE]
--	------------------------------------------------------------------------------------------------------------------------
--	Изменение информации Паспорта сделки 
--	------------------------------------------------------------------------------------------------------------------------
--
--	Возвращает RC: 				
--	   RC =	0	- Информация  ПС была изменена
--		9	- Договор не найден в БД						
--		10	- Ошибка при изменении информации ПС 
--		11	- ПС не найден в БД
--		12	- Невозможно изменить уполномоченный Банк ПС, так как есть платежи со ссылкой на данный ПС
--		13	- Невозможно изменить уполномоченный Банк ПС, так как есть валютные операции со ссылкой на данный ПС
--		14	- Невозможно изменить уполномоченный Банк ПС, так как есть подтверждающие документы со ссылкой на данный ПС
--		15	- Невозможно изменить уполномоченный Банк ПС, так как есть поступления валюты РФ со ссылкой на данный ПС
--		16	- Невозможно изменить Договор (контракт) - есть ПД по ПС с распределением на Платежи в рамках Договора (контракта)
--		17	- Невозможно изменить Договор (контракт) - есть Платежи по ПС с распределением на ПД в рамках Договора (контракта)
--		18	- Невозможно изменить Договор (контракт) - есть Платежи по ПС с распределением на Возвраты в рамках Договора (контракта)
--		19	- Невозможно изменить Договор (контракт) - есть Возвраты по ПС с распределением на Платежи в рамках Договора (контракта)
--		30	- Дублирование номера ПС
--		50	- Ошибка добавления Уполномоченного лица Участника ВЭД
--		60	- Ошибка добавления Уполномоченного лица Банка
--		70	- Буквенный код валюты, входящий в код ставки "ЛИБОР" отсутствует в справочнике 
--		75	- Буквенный код валюты, входящий в код ставки "ЛИБОР" не соответствует валюте цены кредитного договора 
--		80	- Код ставки "ЛИБОР" отсутствует в справочнике 
--		85	- Выбранный Договор уже используется в другом действующем ПС данного Участника ВЭД
--		100	- Ошибка при регистрации события
--		340	- Код валюты цены кредитного договора (пункт 6.2 графа 1) отсутствует в справочнике
--		проверка с кодом 345 не выполняется при приёме/загрузке информации
--		345 - Код валюты цены кредитного договора (пункт 6.2 графа 1) не соответствует 
--			  коду валюты, указанному в Паспорте сделки, и не найден среди кодов валют в предыдущих условиях кредитного договора
-- 		440	- Неверный символ в пункте 6.5 (форма 2)
-- 		450	- Неверный символ в пункте 6.6 (форма 2)
-- 		460	- Для типа кредитного договора "5" - не проставляется отметка о принадлежности
--			  иностранного кредитора к международной финансовой организации
-- 		470	- Для типа кредитного договора "6" - допускается только одна отметка 
--			  о принадлежности иностранного кредитора к международной финансовой организации
-- 		480	- Для типа кредитного договора "6" - должна быть отметка 
--			  о принадлежности иностранного кредитора к международной финансовой организации
-- 		500	- Дата подписи ПС 1-ым лицом от Участника ВЭД больше текущей даты
-- 		510	- Дата подписи ПС 2-ым лицом от Участника ВЭД больше текущей даты
-- 		520	- Дата подписи ПС лицом от Банка больше текущей даты
--		560	- Дата, по состоянию на которую указывается задолженность по основному долгу, больше текущей даты
--		проверки с кодами 901-914 не выполняются при приёме/загрузке информации
--		901	- Невозможно изменить код валюты цены - в базе данных есть Разрешения с таким кодом валюты цены
--		902	- Невозможно изменить код валюты цены - в базе данных есть Изменения задолженности с таким кодом валюты цены
--		903	- Невозможно изменить код валюты цены - в базе данных есть График платежей с таким кодом валюты цены
--		904	- Невозможно изменить код валюты цены - в базе данных есть График возвратов с таким кодом валюты цены
--		905	- Невозможно изменить код валюты цены - в базе данных есть Займы с таким кодом валюты цены
--		906	- Невозможно изменить код валюты цены - в базе данных есть Транши с таким кодом валюты цены
--		907	- Невозможно изменить код валюты цены - в базе данных есть Обеспечения исполнения обязательств с таким кодом валюты цены
--		908	- Невозможно изменить код валюты цены - в базе данных есть Кредиты с таким кодом валюты цены
--		909	- Невозможно изменить код валюты цены - в базе данных есть Исполнения обязательств с таким кодом валюты цены
--		910	- Невозможно изменить код валюты цены - в базе данных есть Платежи с таким кодом валюты цены
--		911	- Невозможно изменить код валюты цены - в базе данных есть Валютные операции с таким кодом валюты цены
--		912	- Невозможно изменить код валюты цены - в базе данных есть Подтверждающие документы с таким кодом валюты цены
--		913	- Невозможно изменить код валюты цены - в базе данных есть Поступления валюты РФ с таким кодом валюты цены
--		914	- Невозможно изменить код валюты цены - в базе данных есть Начальная задолженность с таким кодом валюты цены
--	------------------------------------------------------------------------------------------------------------------------
--	(Модификация	в версии 2.1.0)
--	------------------------------------------------------------------------------------------------------------------------
(
	@RESIDENT_ID	AS INTEGER,
	@PS_ID			AS INTEGER,
	@BANK_ID		AS INTEGER,
	@DOG_ID			AS INTEGER,
	@DOG_NPP		AS INTEGER,
	@PARTNER_ID		AS INTEGER			= NULL,
	@N_PS			AS CHAR (22), 
	@D_PS			AS SMALLDATETIME	= NULL,
	@N_KONTR		AS VARCHAR (100)	= NULL, 
	@D_KONTR		AS SMALLDATETIME	= NULL,  
	@KVALK			AS CHAR (3)			= NULL, 
	@SUMK			AS DECIMAL (16, 2)	= NULL, 
	@D_END			AS DATETIME			= NULL,  
	@R3_G7			AS DECIMAL (16, 2)	= NULL, 
	@F1_R3_G8		AS CHAR (1)			= NULL, 
	@F1_R3_G9		AS CHAR (1)			= NULL,
	@F1_R3_G10		AS CHAR (1)			= NULL,
	@F1_R61_USL		AS VARCHAR (3000)	= NULL,
	@F1_R62_SROK	AS CHAR (4)			= NULL,
	@F1_R63_D_LIST2 AS SMALLDATETIME	= NULL,
	@F2_R3_G8		AS DECIMAL (16, 2)	= NULL,
	@F2_R3_G9		AS CHAR (1)			= NULL, 
	@F2_R3_G10		AS CHAR (1)			= NULL, 
	@N_PS_OLD		AS VARCHAR (100)	=	NULL, 
	@N_PS_DR		AS CHAR (22)		=	NULL, 
	@D_PS_MOD		AS SMALLDATETIME	=	NULL,  
	@N_PS_MOD		AS INTEGER			=	NULL,  
	@D_CLOSE		AS SMALLDATETIME	=	NULL,  
	@O_CLOSE		AS VARCHAR (50)		=	NULL, 
	@F2_R61_G1		AS VARCHAR (250)	=	NULL, 
	@F2_R61_G2		AS CHAR  (6)		=	NULL, 
	@F2_R61_G3		AS VARCHAR (250)	=	NULL, 
	@F2_R61_G4		AS VARCHAR (250)	=	NULL, 
	@F2_R62_G1		AS CHAR  (3)		=	NULL, 
	@F2_R62_G2		AS DECIMAL (16, 2)	=	NULL, 
	@F2_R62_G3_DATE	AS SMALLDATETIME	=	NULL, 
	@F2_R63_USL		AS VARCHAR (500)	=	NULL, 
	@F2_R64_USL		AS VARCHAR (500)	=	NULL, 
	@F2_R65_MFK		AS CHAR (1)			=	NULL, 
	@F2_R65_EBRR	AS CHAR (1)			=	NULL, 
	@F2_R65_MB		AS CHAR (1)			=	NULL, 
	@F2_R65_DMFO	AS CHAR (1)			=	NULL, 
	@F2_R65_KRED	AS CHAR (1)			=	NULL, 
	@F2_R66_INVEST	AS CHAR (1)			=	NULL, 
	@F2_R67_SUM		AS DECIMAL (16, 2)	=	NULL, 
	@FIO_UPOLNOMR1	AS VARCHAR (100)	=	NULL,
	@DOL_UPOLNOMR1	AS VARCHAR (100)	=	NULL,
	@D_UPOLNOMR1	AS SMALLDATETIME	=	NULL, 
	@FIO_UPOLNOMR2	AS VARCHAR(100)		=	NULL,
	@DOL_UPOLNOMR2	AS VARCHAR(100)		=	NULL,
	@D_UPOLNOMR2	AS SMALLDATETIME	=	NULL, 
	@FIO_UPOLNOMB	AS VARCHAR(100)		=	NULL,
	@DOL_UPOLNOMB	AS VARCHAR(100)		=	NULL,
	@D_UPOLNOMB		AS SMALLDATETIME	=	NULL, 
	@USER_ID		AS VARCHAR(30),
	@PRIM			AS VARCHAR (500)	=	NULL,
	@NAMER 			AS VARCHAR (300)	=	NULL,
  	@INN 			AS VARCHAR (12)		=	NULL,
  	@KPP 			AS CHAR (9)			=	NULL,
  	@OGRN  			AS VARCHAR (15)		=	NULL,
  	@DGR  			AS SMALLDATETIME	=	NULL,
  	@SUB  			AS VARCHAR (50)		=	NULL,
  	@REGION  		AS VARCHAR (50)		=	NULL,
  	@CITY  			AS VARCHAR (50)		=	NULL,
  	@PUNKT  		AS VARCHAR (50)		=	NULL,
	@STREET  		AS VARCHAR (250)	=	NULL,
  	@HOUSE  		AS VARCHAR (50)		=	NULL,
  	@KORPUS  		AS VARCHAR (50)		=	NULL,
  	@OFFICE  		AS VARCHAR (50)		=	NULL,
  	@VID_USLUG		AS VARCHAR (7)		=	NULL,
	@PRIZ_PROJECT	AS VARCHAR (1)		=	NULL,
	@UNI_ID			AS UNIQUEIDENTIFIER	=	NULL,
	@D_LOAD			AS SMALLDATETIME	= 	NULL,  
	@SRC_LOAD		AS VARCHAR (15)		=	NULL,  
	@D_PRED			AS SMALLDATETIME	=	NULL,  
	@D_PRED_PEREOF	AS SMALLDATETIME	= 	NULL,  
	@DOG_ID_BANK	AS INTEGER			= 	NULL,
	@DOG_NPP_BANK	AS INTEGER			= 	NULL,
	@RC				AS INTEGER OUTPUT
)
 AS

	SET NOCOUNT ON

	--
	--	Рабочие переменные
	--
	DECLARE	@OLD_BANK_ID		AS INTEGER, 
			@OLD_DOG_ID			AS INTEGER, 
			@RETURN_STATUS		AS INTEGER,
			@KOL				AS INTEGER,
			@UPOLNOMR_ID1		AS INTEGER,
			@UPOLNOMR_ID2		AS INTEGER,
			@UPOLNOMB_ID		AS INTEGER,
			@RC1				AS INTEGER,
			@PRIZ_LOAD			AS INTEGER,
			@KVALK_OLD			AS CHAR (3),
			@PRIZ_CHECK_KVALK	AS INTEGER

	--
	--	Начальные значения
	--
	SELECT	@RETURN_STATUS		= 0
	SELECT	@KOL				= 0 
	SELECT	@RC					= 0
	SELECT	@RC1				= 0
	SELECT	@KVALK_OLD			= NULL 
	SELECT	@PRIZ_CHECK_KVALK	= 1 

	--
	--	Поиск Договора
	--
	SELECT	@PARTNER_ID	= PARTNER_ID,
			@N_KONTR	= ISNULL(N_DOPSOGL, N_KONTR), 
			@D_KONTR	= D_KONTR,  
			@KVALK		= KVALK, 
			@SUMK		= SUMK, 
			@D_END		= D_END,  
			@R3_G7		= R3_G7, 
			@F1_R3_G8	= F1_R3_G8, 
			@F1_R3_G9	= F1_R3_G9,
			@F1_R3_G10	= F1_R3_G10,
			@F2_R3_G8	= F2_R3_G8,
			@F2_R3_G9	= F2_R3_G9, 
			@F2_R3_G10	= F2_R3_G10, 
			@VID_USLUG	= VID_USLUG
	FROM	U_DOGOVOR (NOLOCK)	
	WHERE	RESIDENT_ID	= @RESIDENT_ID	AND
			DOG_ID		= @DOG_ID		AND
			DOG_NPP		= @DOG_NPP		AND
			DEL_FLAG	IS NULL
	IF	@PARTNER_ID	IS NULL
		BEGIN
			SELECT	@RC		= 9
			GOTO	EXIT_PS_UPDATE
		END

	--
	-- Если параметр @D_LOAD не NULL, то это обновление ПС при повторной загрузке из XML-файла.
	-- @PRIZ_LOAD используется ниже для проверки с кодом возврата 345: при повторной загрузке проверка НЕ выполняется!
	-- Проверки с кодом возврата 345 это Контроль кода валюты цены кредитного договора (пункт 6.2 графа 1)
	-- А также при проверке с кодами возврата 901-914 (на возможность изменить КВЦ) 
	--
	IF	@D_LOAD	IS	NOT NULL
		SELECT	@PRIZ_LOAD	= 1
	ELSE
		SELECT	@PRIZ_LOAD	= 0

	--
	-- Определяем Банк ПС и Договор
	--
	SELECT	@OLD_BANK_ID	= BANK_ID,
			@OLD_DOG_ID		= DOG_ID
	FROM	U_PS (NOLOCK)
	WHERE	RESIDENT_ID	= 	@RESIDENT_ID	AND
			PS_ID		=	@PS_ID			AND
			DEL_FLAG	IS NULL		
	IF	@OLD_BANK_ID IS NULL
		BEGIN	
			SELECT	@RC	= 11
			GOTO	EXIT_PS_UPDATE
		END

	--	--------------------------------------------------------------------
	--	Контроль возможности изменения кода валюты цены  
	--	При загрузке из XML-файла не выполняется!
	--	--------------------------------------------------------------------
	IF	@PRIZ_LOAD = 0
		BEGIN
		--
		--	Старое значение кода валюты цены
		--
		SELECT	@KVALK_OLD				= U_DOGOVOR.KVALK
		FROM	U_PS (NOLOCK)
		INNER	JOIN U_DOGOVOR (NOLOCK) ON
				U_DOGOVOR.RESIDENT_ID	= U_PS.RESIDENT_ID	AND
				U_DOGOVOR.DOG_ID		= U_PS.DOG_ID		AND
				U_DOGOVOR.DOG_NPP		= U_PS.DOG_NPP	
		WHERE	U_PS.RESIDENT_ID		= @RESIDENT_ID		AND
				U_PS.PS_ID				= @PS_ID			AND
				U_PS.DEL_FLAG			IS NULL
		IF	@KVALK_OLD	IS NULL
			BEGIN
				SELECT	@RC	= 11
				GOTO	EXIT_PS_UPDATE
			END

		--
		--	Новое значение кода валюты цены
		--
		SELECT	@KVALK					= U_DOGOVOR.KVALK
		FROM	U_DOGOVOR (NOLOCK) 
		WHERE	U_DOGOVOR.RESIDENT_ID	= @RESIDENT_ID	AND
				U_DOGOVOR.DOG_ID		= @DOG_ID		AND
				U_DOGOVOR.DOG_NPP		= @DOG_NPP		AND
				U_DOGOVOR.DEL_FLAG		IS NULL
		IF	@KVALK	IS NULL
			BEGIN
				SELECT	@RC	= 11
				GOTO	EXIT_PS_UPDATE
			END
	
		--
		--	Проверка возможности изменения кода валюты цены (если новый код не равен старому)
		--
		IF	ISNULL(@KVALK, '')	<> ISNULL(@KVALK_OLD, '')
			BEGIN
				--
				--	Если в таблице U_DOGOVOR есть записи со старым КВЦ - 
				--	проверка возможности изменения кода валюты цены НЕ выполняется (@PRIZ_CHECK_KVALK = 0)
				--	
				IF	EXISTS	(
							SELECT	*
							FROM	U_DOGOVOR (NOLOCK)
							WHERE	RESIDENT_ID	= 	@RESIDENT_ID	AND
									DOG_ID		= 	@DOG_ID			AND
									KVALK		= 	@KVALK_OLD		AND
									DEL_FLAG	IS 	NULL				
						)
					SELECT	@PRIZ_CHECK_KVALK	= 0
					
				--					
				--	Начало проверки возможности изменения кода валюты цены
				--
				IF	@PRIZ_CHECK_KVALK = 1
					BEGIN
						--
						--	1. По таблице U_RAZRESH
						--
						IF	EXISTS	(
									SELECT	*
									FROM	U_RAZRESH (NOLOCK)
									WHERE	RESIDENT_ID	= @RESIDENT_ID	AND
											PS_ID		= @PS_ID		AND
											DEL_FLAG	IS NULL			AND
											VALK		= @KVALK_OLD	
								)			
							BEGIN
								SELECT	@RC	= 901
								GOTO	EXIT_PS_UPDATE
							END
	
						--
						--	2. По таблице U_PS_IZMEN_ZADOL
						--
						IF	EXISTS	(
									SELECT	*
									FROM	U_PS_IZMEN_ZADOL (NOLOCK)
									WHERE	RESIDENT_ID	= @RESIDENT_ID	AND
											PS_ID		= @PS_ID		AND
											DEL_FLAG	IS NULL			AND
											VALK		= @KVALK_OLD	
								)			
							BEGIN
								SELECT	@RC	= 902
								GOTO	EXIT_PS_UPDATE
							END
	
						--
						--	3. По таблице U_GRAF_PLAT
						--
						IF	EXISTS	(
									SELECT	*
									FROM	U_GRAF_PLAT (NOLOCK)
									WHERE	RESIDENT_ID	= @RESIDENT_ID	AND
											PS_ID		= @PS_ID		AND
											DEL_FLAG	IS NULL			AND
											VALP		= @KVALK_OLD	
								)			
							BEGIN
								SELECT	@RC	= 903
								GOTO	EXIT_PS_UPDATE
							END
	
						--
						--	4. По таблице U_GRAF_VOZVR
						--
						IF	EXISTS	(
									SELECT	*
									FROM	U_GRAF_VOZVR (NOLOCK)
									WHERE	RESIDENT_ID	= @RESIDENT_ID	AND
											PS_ID		= @PS_ID		AND
											DEL_FLAG	IS NULL			AND
											VALK		= @KVALK_OLD	
								)			
							BEGIN
								SELECT	@RC	= 904
								GOTO	EXIT_PS_UPDATE
							END
	
						--
						--	5. По таблице U_ZAIM
						--
						IF	EXISTS	(
									SELECT	*
									FROM	U_ZAIM (NOLOCK)
									WHERE	RESIDENT_ID	= @RESIDENT_ID	AND
											PS_ID		= @PS_ID		AND
											DEL_FLAG	IS NULL			AND
											VALK		= @KVALK_OLD	
								)			
							BEGIN
								SELECT	@RC	= 905
								GOTO	EXIT_PS_UPDATE
							END
	
						--
						--	6. По таблице U_TRANSH
						--
						IF	EXISTS	(
									SELECT	*
									FROM	U_TRANSH (NOLOCK)
									WHERE	RESIDENT_ID	= @RESIDENT_ID	AND
											PS_ID		= @PS_ID		AND
											DEL_FLAG	IS NULL			AND
											VALK		= @KVALK_OLD	
									)			
							BEGIN
								SELECT	@RC	= 906
								GOTO	EXIT_PS_UPDATE
							END
	
						--
						--	7. По таблице U_OBESPECH
						--
						IF	EXISTS	(
									SELECT	*
									FROM	U_OBESPECH (NOLOCK)
									WHERE	RESIDENT_ID	= @RESIDENT_ID	AND
											PS_ID		= @PS_ID		AND
											DEL_FLAG	IS NULL			AND
											VALK		= @KVALK_OLD	
								)			
							BEGIN
								SELECT	@RC	= 907
								GOTO	EXIT_PS_UPDATE
							END
	
						--
						--	8. По таблице U_KREDIT
						--
						IF	EXISTS	(
									SELECT	*
									FROM	U_KREDIT (NOLOCK)
									WHERE	RESIDENT_ID	= @RESIDENT_ID	AND
											PS_ID		= @PS_ID		AND
											DEL_FLAG	IS NULL			AND
											VALK		= @KVALK_OLD	
									)			
							BEGIN
								SELECT	@RC	= 908
								GOTO	EXIT_PS_UPDATE
							END
	
						--
						--	9. По таблице U_ISPOLNEN
						--
						IF	EXISTS	(
									SELECT	*
									FROM	U_ISPOLNEN (NOLOCK)
									WHERE	RESIDENT_ID	= @RESIDENT_ID	AND
											PS_ID		= @PS_ID		AND
											DEL_FLAG	IS NULL			AND
											VALK		= @KVALK_OLD	
								)			
							BEGIN
								SELECT	@RC	= 909
								GOTO	EXIT_PS_UPDATE
							END
	
						--
						--	10. По таблице U_OPLATA
						--
						IF	EXISTS	(
									SELECT	*
									FROM	U_OPLATA (NOLOCK)
									WHERE	RESIDENT_ID	= @RESIDENT_ID	AND
											PS_ID		= @PS_ID		AND
											DEL_FLAG	IS NULL			AND
											VALK		= @KVALK_OLD	
								)			
							BEGIN
								SELECT	@RC	= 910
								GOTO	EXIT_PS_UPDATE
							END
	
						--
						--	11. По таблице U_SPR_VAL_OPR
						--
						IF	EXISTS	(
									SELECT	*
									FROM	U_SPR_VAL_OPR (NOLOCK)
									WHERE	RESIDENT_ID	= @RESIDENT_ID	AND
											PS_ID		= @PS_ID		AND
											DEL_FLAG	IS NULL			AND
											VALK		= @KVALK_OLD	
								)			
							BEGIN
								SELECT	@RC	= 911
								GOTO	EXIT_PS_UPDATE
							END
	
						--
						--	12. По таблице U_SPR_CONFIRM
						--
						IF	EXISTS	(
									SELECT	*
									FROM	U_SPR_CONFIRM (NOLOCK)
									WHERE	RESIDENT_ID	= @RESIDENT_ID	AND
											PS_ID		= @PS_ID		AND
											DEL_FLAG	IS NULL			AND
											VALK		= @KVALK_OLD	
								)			
							BEGIN
								SELECT	@RC	= 912
								GOTO	EXIT_PS_UPDATE
							END
	
						--
						--	13. По таблице U_SPR_RUB
						--
						IF	EXISTS	(
									SELECT	*
									FROM	U_SPR_RUB (NOLOCK)
									WHERE	RESIDENT_ID	= @RESIDENT_ID	AND
											PS_ID		= @PS_ID		AND
											DEL_FLAG	IS NULL			AND
											VALK		= @KVALK_OLD		
								)			
							BEGIN
								SELECT	@RC	= 913
								GOTO	EXIT_PS_UPDATE
							END
	
						--
						--	14. По таблице U_PS (6.2)
						--
						IF	EXISTS	(
									SELECT	*
									FROM	U_PS (NOLOCK)
									WHERE	RESIDENT_ID	= @RESIDENT_ID	AND
											PS_ID		= @PS_ID		AND
											DEL_FLAG	IS NULL			AND
											F2_R62_G1	= @KVALK_OLD	
								)			
							BEGIN
								SELECT	@RC	= 914
								GOTO	EXIT_PS_UPDATE
							END
	
					END	-- @PRIZ_CHECK_KVALK = 1
			END	-- ISNULL(@KVALK, '')	<> ISNULL(@KVALK_OLD, '')
		END	-- @PRIZ_LOAD = 0


	--
	--	@DOG_ID_BANK, @DOG_NPP_BANK, @UNI_ID, дата загрузки @D_LOAD и источник @SRC_LOAD (если не переданы на вход, то берём значения из записи)
	--
	IF @DOG_ID_BANK	IS	NULL 
		SELECT	@DOG_ID_BANK	= DOG_ID_BANK
		FROM	U_PS (NOLOCK)
		WHERE	RESIDENT_ID	= 	@RESIDENT_ID	AND
				PS_ID		=	@PS_ID			AND
				DEL_FLAG	IS NULL		
	IF @DOG_NPP_BANK	IS	NULL 
		SELECT	@DOG_NPP_BANK	= DOG_NPP_BANK
		FROM	U_PS (NOLOCK)
		WHERE	RESIDENT_ID	= 	@RESIDENT_ID	AND
				PS_ID		=	@PS_ID			AND
				DEL_FLAG	IS NULL		
	IF @UNI_ID	IS	NULL 
		SELECT	@UNI_ID	= UNI_ID
		FROM	U_PS (NOLOCK)
		WHERE	RESIDENT_ID	= 	@RESIDENT_ID	AND
				PS_ID		=	@PS_ID			AND
				DEL_FLAG	IS NULL		
	IF @D_LOAD	IS	NULL 
		SELECT	@D_LOAD	= D_LOAD
		FROM	U_PS (NOLOCK)
		WHERE	RESIDENT_ID	= 	@RESIDENT_ID	AND
				PS_ID		=	@PS_ID			AND
				DEL_FLAG	IS NULL	
	IF @SRC_LOAD	IS	NULL 
		SELECT	@SRC_LOAD	= SRC_LOAD
		FROM	U_PS (NOLOCK)
		WHERE	RESIDENT_ID	= 	@RESIDENT_ID	AND
				PS_ID		=	@PS_ID			AND
				DEL_FLAG	IS NULL		


	--
	--	Проверка на возможность смены Уполномоченного Банка ПС
	--	
	IF	@OLD_BANK_ID <> @BANK_ID
		BEGIN
			--
			--	Количество платежей со ссылкой на данный ПС
			--
			EXECUTE	@KOL	= 	U_PS_LINKS_U_OPLATA
								@RESIDENT_ID	= @RESIDENT_ID,
								@PS_ID		= @PS_ID	
			IF	@KOL	> 0
				BEGIN	
					SELECT	@RC	= 12
					GOTO	EXIT_PS_UPDATE
				END

			--
			--	Количество валютных операций со ссылкой на данный ПС
			--
			EXECUTE	@KOL	= 	U_PS_LINKS_U_SPR_VAL_OPR
								@RESIDENT_ID	= @RESIDENT_ID,
								@PS_ID		= @PS_ID	
			IF	@KOL	> 0
				BEGIN	
					SELECT	@RC	= 13
					GOTO	EXIT_PS_UPDATE
				END

			--
			--	Количество подтверждающих документов со ссылкой на данный ПС
			--
			EXECUTE	@KOL	=	U_PS_LINKS_U_SPR_CONFIRM
								@RESIDENT_ID	= @RESIDENT_ID,
								@PS_ID		= @PS_ID	
			IF	@KOL	> 0
				BEGIN	
					SELECT	@RC	= 14
					GOTO	EXIT_PS_UPDATE
				END

			--
			--	Количество поступлений валюты РФ со ссылкой на данный ПС
			--
			EXECUTE	@KOL	=	U_PS_LINKS_U_SPR_RUB
								@RESIDENT_ID	= @RESIDENT_ID,
								@PS_ID		= @PS_ID	
			IF	@KOL	> 0
				BEGIN	
					SELECT	@RC	= 15
					GOTO	EXIT_PS_UPDATE
				END

		END


		--
		--	Проверка на возможность смены Договора (контракта)
		--	
		IF	@OLD_DOG_ID <> @DOG_ID
			BEGIN
				--	есть ПД по ПС с распределением на Платежи в рамках Договора (контракта)
				SELECT	@KOL = COUNT(*)
				FROM	U_RASPRED_OPLATA_SPR_CONFIRM (NOLOCK)
				INNER	JOIN U_SPR_CONFIRM (NOLOCK) ON
						U_SPR_CONFIRM.RESIDENT_ID	= @RESIDENT_ID							AND
						U_SPR_CONFIRM.PD_ID			= U_RASPRED_OPLATA_SPR_CONFIRM.PD_ID	AND
						U_SPR_CONFIRM.PS_ID			= @PS_ID								AND
						U_SPR_CONFIRM.DEL_FLAG		IS NULL
				INNER	JOIN U_OPLATA (NOLOCK) ON
						U_OPLATA.RESIDENT_ID		= @RESIDENT_ID							AND
						U_OPLATA.OPL_ID				= U_RASPRED_OPLATA_SPR_CONFIRM.OPL_ID	AND
						U_OPLATA.DOG_ID				= @OLD_DOG_ID							AND
						U_OPLATA.DEL_FLAG			IS NULL
				WHERE	U_RASPRED_OPLATA_SPR_CONFIRM.RESIDENT_ID	= @RESIDENT_ID	
				IF	@KOL	> 0
					BEGIN	
						SELECT	@RC	= 16
						GOTO	EXIT_PS_UPDATE
					END
	
				--	есть Платежи по ПС с распределением на ПД в рамках Договора (контракта)
				SELECT	@KOL = COUNT(*)
				FROM	U_RASPRED_OPLATA_SPR_CONFIRM (NOLOCK)
				INNER	JOIN U_OPLATA (NOLOCK) ON
						U_OPLATA.RESIDENT_ID		= @RESIDENT_ID							AND
						U_OPLATA.OPL_ID				= U_RASPRED_OPLATA_SPR_CONFIRM.OPL_ID	AND
						U_OPLATA.PS_ID				= @PS_ID								AND
						U_OPLATA.DEL_FLAG			IS NULL
				INNER	JOIN U_SPR_CONFIRM (NOLOCK) ON
						U_SPR_CONFIRM.RESIDENT_ID	= @RESIDENT_ID							AND
						U_SPR_CONFIRM.PD_ID			= U_RASPRED_OPLATA_SPR_CONFIRM.PD_ID	AND
						U_SPR_CONFIRM.DOG_ID		= @OLD_DOG_ID							AND
						U_SPR_CONFIRM.DEL_FLAG		IS NULL
				WHERE	U_RASPRED_OPLATA_SPR_CONFIRM.RESIDENT_ID	= @RESIDENT_ID	
				IF	@KOL	> 0
					BEGIN	
						SELECT	@RC	= 17
						GOTO	EXIT_PS_UPDATE
					END
	
				--	есть Платежи по ПС с распределением на Возвраты в рамках Договора (контракта)
				SELECT	@KOL = COUNT(*)
				FROM	U_RASPRED_OPLATA_OPLATA (NOLOCK)
				INNER	JOIN U_OPLATA (NOLOCK) ON
						U_OPLATA.RESIDENT_ID		= @RESIDENT_ID							AND
						U_OPLATA.OPL_ID				= U_RASPRED_OPLATA_OPLATA.OPL_ID2		AND
						U_OPLATA.PS_ID				= @PS_ID								AND
						U_OPLATA.DEL_FLAG			IS NULL
				INNER	JOIN U_OPLATA  AS U_OPL_VOZV (NOLOCK) ON
						U_OPL_VOZV.RESIDENT_ID		= @RESIDENT_ID							AND
						U_OPL_VOZV.OPL_ID			= U_RASPRED_OPLATA_OPLATA.OPL_ID		AND
						U_OPL_VOZV.DOG_ID			= @OLD_DOG_ID							AND
						U_OPL_VOZV.DEL_FLAG			IS NULL
				WHERE	U_RASPRED_OPLATA_OPLATA.RESIDENT_ID	= @RESIDENT_ID	
				IF	@KOL	> 0
					BEGIN	
						SELECT	@RC	= 18
						GOTO	EXIT_PS_UPDATE
					END
	
				--	есть Возвраты по ПС с распределением на Платежи в рамках Договора (контракта)
				SELECT	@KOL = COUNT(*)
				FROM	U_RASPRED_OPLATA_OPLATA (NOLOCK)
				INNER	JOIN U_OPLATA (NOLOCK) ON
						U_OPLATA.RESIDENT_ID		= @RESIDENT_ID							AND
						U_OPLATA.OPL_ID				= U_RASPRED_OPLATA_OPLATA.OPL_ID		AND
						U_OPLATA.PS_ID				= @PS_ID								AND
						U_OPLATA.DEL_FLAG			IS NULL
				INNER	JOIN U_OPLATA AS U_OPL_PLAT (NOLOCK) ON
						U_OPL_PLAT.RESIDENT_ID		= @RESIDENT_ID							AND
						U_OPL_PLAT.OPL_ID			= U_RASPRED_OPLATA_OPLATA.OPL_ID2		AND
						U_OPL_PLAT.DOG_ID			= @OLD_DOG_ID							AND
						U_OPL_PLAT.DEL_FLAG			IS NULL
				WHERE	U_RASPRED_OPLATA_OPLATA.RESIDENT_ID	= @RESIDENT_ID	
				IF	@KOL	> 0
					BEGIN	
						SELECT	@RC	= 19
						GOTO	EXIT_PS_UPDATE
					END
			END

	--
	--	Проверка на дублирование номера ПС
	--	Примечание: для проектов ПС в 1-ой позиции указывается спец символ '#' 
	--	(Для проектов не выполняется!!!)
	--
	IF	SUBSTRING( @N_PS, 1, 1) <> '#'	OR	@PRIZ_PROJECT	IS NULL
		BEGIN
			IF	EXISTS	(
						SELECT	*
						FROM	U_PS (NOLOCK)
						WHERE	N_PS				= 	@N_PS			AND
								(
									RESIDENT_ID		<>	@RESIDENT_ID 	OR
									(
										RESIDENT_ID	=	@RESIDENT_ID 	AND		
										PS_ID		<>	@PS_ID
									)
								)										AND
								DEL_FLAG			IS 	NULL					
					)
				BEGIN			
					SELECT	@RC		= 30
					GOTO	EXIT_PS_UPDATE
				END	
		END

	--
	--	Проверка на использование Договора в широком смысле другим открытым ПС
	--	Для закрытых ПС не выполняется
	--
		IF	@D_CLOSE	IS NULL
			BEGIN
				IF EXISTS	(
							SELECT	*
							FROM	U_PS (NOLOCK)
							WHERE	RESIDENT_ID	= @RESIDENT_ID	AND
									PS_ID		<>@PS_ID		AND
									DOG_ID		= @DOG_ID		AND
									D_CLOSE		IS NULL			AND
									DEL_FLAG	IS NULL	
						)
					BEGIN
						SELECT	@RC		= 85
						SELECT	@PS_ID	= 0
						GOTO	EXIT_PS_UPDATE
					END
			END
	
	--
	--	Проверка кода ставки "ЛИБОР"
	--
	IF	@F2_R61_G2	IS NOT NULL 
		BEGIN
			--
			--	Проверка кода валюты в коде ставки "ЛИБОР"
			--
			IF NOT EXISTS	(
						SELECT	*
						FROM	LIBOR (NOLOCK)
						WHERE	KOD	= SUBSTRING(@F2_R61_G2, 1, 3)
					)
				BEGIN
					SELECT	@RC		= 80
					GOTO	EXIT_PS_UPDATE
				END

			--
			--	Проверка кода валюты в коде ставки "ЛИБОР"
			--
			IF NOT EXISTS	(
						SELECT	* 
						FROM	VALW (NOLOCK)
						WHERE	KOD_LAT = SUBSTRING(@F2_R61_G2, 4, 3)
					)
		  		BEGIN
		  			SELECT	@RC		= 70
		  			GOTO	EXIT_PS_UPDATE
		  		END

			--
			--	Проверка кода валюты в коде ставки "ЛИБОР"
			--
			IF NOT EXISTS	(
						SELECT	*
						FROM	VALW (NOLOCK)
						WHERE	KOD_LAT	= SUBSTRING(@F2_R61_G2, 4, 3)	AND
								KOD	= @KVALK
					)
		  		BEGIN
		  			SELECT	@RC		= 75
		  			GOTO	EXIT_PS_UPDATE
		  		END

		END

	--	--------------------------------------------------------------------
	--	Проверка кода валюты цены кредитного договора (пункт 6.2 графа 1)
	--	--------------------------------------------------------------------
	IF	@F2_R62_G1	IS NOT NULL
		BEGIN
			IF	NOT	EXISTS (
							SELECT	*
							FROM	VALW (NOLOCK)
							WHERE	KOD	= @F2_R62_G1
						)
				BEGIN
					SELECT	@RC = 340
					GOTO	EXIT_PS_UPDATE
				END
		END

	--	------------------------------------------------------------------------------------------------------------
	--	Проверка даты, на которую указывается начальная задолженность по основному долгу (пункт 6.2 графа 3)
	--	------------------------------------------------------------------------------------------------------------
	IF	@F2_R62_G3_DATE	IS NOT NULL
		BEGIN
			IF	@F2_R62_G3_DATE	> CONVERT( SMALLDATETIME, GETDATE() ) 
				BEGIN
					SELECT	@RC = 560
					GOTO   	EXIT_PS_UPDATE	
				END
		END

	--	--------------------------------------------------------------------
	--	Контроль кода валюты цены кредитного договора (пункт 6.2 графа 1) 
	--	на допустимое значение
	--	При загрузке из XML-файла выполняется!
	--	--------------------------------------------------------------------
	IF	@F2_R62_G1	IS NOT NULL	AND @PRIZ_LOAD	= 0
		BEGIN
				IF	@F2_R62_G1 NOT IN	( 
									SELECT	DISTINCT KVALK 
									FROM	U_DOGOVOR (NOLOCK) 
									WHERE	RESIDENT_ID	=	@RESIDENT_ID	AND
											DOG_ID		=	@DOG_ID			AND
											DEL_FLAG	IS	NULL 
								)
				BEGIN	
						SELECT	@RC		= 345
			  			GOTO	EXIT_PS_UPDATE
				END
		END

	--
	--	Проверка кода срока погашения суммы кредитного договора (раздел 3 графа 10)
	--
	IF	@F2_R3_G10	IS NOT NULL
		BEGIN
			IF	NOT	EXISTS (
							SELECT	*
							FROM	POGASHEN (NOLOCK)
							WHERE	KOD	= @F2_R3_G10
						)
				BEGIN
					SELECT	@RC 	= 350
					GOTO	EXIT_PS_UPDATE
				END
		END

	--	Валютная оговорка (символ X)
	IF	@F1_R3_G8	IS NOT NULL
		BEGIN
			IF	@F1_R3_G8	<> 'X'
				BEGIN
					SELECT	@RC 	= 400
					GOTO	EXIT_PS_UPDATE
				END
		END

	--	ввоз\вывоз товаров 16,17,19 разделов Товарной номенклатуры ВЭД (символ X)
	IF	@F1_R3_G9	IS NOT NULL
		BEGIN
			IF	@F1_R3_G9	<> 'X'
				BEGIN
					SELECT	@RC 	= 410
					GOTO	EXIT_PS_UPDATE
				END
		END

	--	Проведение строительных работ и подрядных работ за пределами РФ (символ X)
	IF	@F1_R3_G10	IS NOT NULL
		BEGIN
			IF	@F1_R3_G10	<> 'X'
				BEGIN
					SELECT	@RC 	= 420
					GOTO	EXIT_PS_UPDATE
				END
		END

	--	Валютная оговорка (символ X)
	IF	@F2_R3_G9	IS NOT NULL
		BEGIN
			IF	@F2_R3_G9	<> 'X'
				BEGIN
					SELECT	@RC 	= 430
					GOTO	EXIT_PS_UPDATE
				END
		END

	-- ---------------------------------------------------------------------------------------------------------
	--	Обнуляем счетчик отметки о принадлежности иностранного кредитора к международной финансовой организации
	SELECT	@KOL = 0

	--	Отметка о принадлежности к Международной валютной организации (символ X)
	IF	@F2_R65_MFK	IS NOT NULL
		BEGIN
			IF	@F2_R65_MFK	<> 'X'
				BEGIN
					SELECT	@RC 	= 440
					GOTO	EXIT_PS_UPDATE
				END
			ELSE
				SELECT	@KOL = @KOL + 1
		END

	--	Отметка о принадлежности к ЕБРР (символ X)
	IF	@F2_R65_EBRR	IS NOT NULL
		BEGIN
			IF	@F2_R65_EBRR	<> 'X'
				BEGIN
					SELECT	@RC 	= 440
					GOTO	EXIT_PS_UPDATE
				END
			ELSE
				SELECT	@KOL = @KOL + 1
		END

	--	Отметка о принадлежности к Мировому банку (символ X)
	IF	@F2_R65_MB	IS NOT NULL
		BEGIN
			IF	@F2_R65_MB	<> 'X'
				BEGIN
					SELECT	@RC 	= 440
					GOTO	EXIT_PS_UPDATE
				END
			ELSE
				SELECT	@KOL = @KOL + 1
		END

	--	Отметка о принадлежности к Другим финансовым международные организации (символ X)
	IF	@F2_R65_DMFO	IS NOT NULL
		BEGIN
			IF	@F2_R65_DMFO	<> 'X'
				BEGIN
					SELECT	@RC 	= 440
					GOTO	EXIT_PS_UPDATE
				END
			ELSE
				SELECT	@KOL = @KOL + 1
		END

	--	Отметка о принадлежности к Кредиторам (символ X)
	IF	@F2_R65_KRED	IS NOT NULL
		BEGIN
			IF	@F2_R65_KRED	<> 'X'
				BEGIN
					SELECT	@RC 	= 440
					GOTO	EXIT_PS_UPDATE
				END
			ELSE
				SELECT	@KOL = @KOL + 1
		END

	--	Отметка о наличии отношений прямого инвестирования (символ X)
	IF	@F2_R66_INVEST	IS NOT NULL
		BEGIN
			IF	@F2_R66_INVEST	<> 'X'
				BEGIN
					SELECT	@RC 	= 450
					GOTO	EXIT_PS_UPDATE
				END
		END

	--	Контроль для ПС с типом "5"
	IF	SUBSTRING( @N_PS, 20, 1) = '5'
		BEGIN
			IF	@KOL > 0				
				BEGIN
					SELECT	@RC 	= 460
					GOTO	EXIT_PS_UPDATE
				END
		END

	--	Контроль для ПС с типом "6"
	IF	SUBSTRING( @N_PS, 20, 1) = '6'
		BEGIN
			IF	@KOL > 1				
				BEGIN
					SELECT	@RC 	= 470
					GOTO	EXIT_PS_UPDATE
				END
		END

	--	Контроль для ПС с типом "6"
	IF	SUBSTRING( @N_PS, 20, 1) = '6'
		BEGIN
			IF	@KOL = 0				
				BEGIN
					SELECT	@RC 	= 480
					GOTO	EXIT_PS_UPDATE
				END
		END
	--	-------------------------------------------------------------------------------------------

	--	----------------------------------------------------------
	--	Контроль даты подписи ПС 1-ым лицом от Участника ВЭД 
	--	----------------------------------------------------------
	IF	@D_UPOLNOMR1	IS NOT NULL
		BEGIN
			IF	@D_UPOLNOMR1	> CONVERT( SMALLDATETIME, GETDATE() )  		
				BEGIN
					SELECT	@RC 	= 500
					GOTO   	EXIT_PS_UPDATE
				END
		END
	
	--	----------------------------------------------------------
	--	Контроль даты подписи ПС 2-ым лицом от Участника ВЭД
	--	----------------------------------------------------------
	IF	@D_UPOLNOMR2	IS NOT NULL
		BEGIN
			IF	@D_UPOLNOMR2	> CONVERT( SMALLDATETIME, GETDATE() ) 
				BEGIN
					SELECT	@RC 	= 510
					GOTO   	EXIT_PS_UPDATE	
				END
		END

	--	----------------------------------------------------------
	--	Контроль даты подписи ПС лицом от Банка 
	--	----------------------------------------------------------
	IF	@D_UPOLNOMB		IS NOT NULL
		BEGIN
			IF	@D_UPOLNOMB	> CONVERT( SMALLDATETIME, GETDATE() ) 
				BEGIN
					SELECT	@RC 	= 520
					GOTO   	EXIT_PS_UPDATE	
				END
		END

	--
	--	Проверка наличия Уполномоченного лица от Участника ВЭД
	--	с правом 1-ой подписи
	--	и определение его идентификатора
	--
	SELECT	@UPOLNOMR_ID1 =	NULL

	IF	@FIO_UPOLNOMR1 IS NOT NULL
		BEGIN
			SELECT	@UPOLNOMR_ID1 							= UPOLNOMR_ID 
			FROM	U_UPOLNOMR (NOLOCK)
			WHERE	RESIDENT_ID								= @RESIDENT_ID										AND
					UPPER(RTRIM(LTRIM(FIO)))				= UPPER(RTRIM(LTRIM(@FIO_UPOLNOMR1)))				AND	
					UPPER(RTRIM(LTRIM(ISNULL(DOL, ''))))	= UPPER(RTRIM(LTRIM(ISNULL(@DOL_UPOLNOMR1, ''))))	AND
					DEL_FLAG								IS NULL
	
			IF	@UPOLNOMR_ID1 IS NULL
				BEGIN
					--
					--	Добавление уполномоченного лица Участника ВЭД
					--
					SELECT	@UPOLNOMR_ID1	= MAX( UPOLNOMR_ID ) + 1
					FROM	U_UPOLNOMR (NOLOCK)
					WHERE	RESIDENT_ID		= @RESIDENT_ID			
					IF	@@ERROR <> 0
						BEGIN	
							SELECT	@RC		= 50
							GOTO	EXIT_PS_UPDATE
						END

					SELECT	@UPOLNOMR_ID1	= ISNULL(@UPOLNOMR_ID1,  1 )

					INSERT	INTO	U_UPOLNOMR  	
							( RESIDENT_ID, UPOLNOMR_ID, FIO, DOL, PRIM, DEL_FLAG )
					VALUES
							( @RESIDENT_ID, @UPOLNOMR_ID1, @FIO_UPOLNOMR1, @DOL_UPOLNOMR1, NULL, NULL )
					IF	@@ERROR <> 0
						BEGIN	
							SELECT	@RC		= 50
							GOTO	EXIT_PS_UPDATE
						END
				END
		END

	--
	--	Проверка наличия Уполномоченного лица от Участника ВЭД
	--	с правом 2-ой подписи
	--	и определение его идентификатора
	--
	SELECT	@UPOLNOMR_ID2 = NULL		

	IF	@FIO_UPOLNOMR2 IS NOT NULL
		BEGIN
			SELECT	@UPOLNOMR_ID2 							= UPOLNOMR_ID 
			FROM	U_UPOLNOMR (NOLOCK)
			WHERE	RESIDENT_ID								= @RESIDENT_ID										AND
					UPPER(RTRIM(LTRIM(FIO)))				= UPPER(RTRIM(LTRIM(@FIO_UPOLNOMR2)))				AND	
					UPPER(RTRIM(LTRIM(ISNULL(DOL, ''))))	= UPPER(RTRIM(LTRIM(ISNULL(@DOL_UPOLNOMR2, ''))))	AND
					DEL_FLAG								IS NULL
	
			IF	@UPOLNOMR_ID2 IS NULL
				BEGIN
					--
					--	Добавление уполномоченного лица Участника ВЭД
					--
					SELECT	@UPOLNOMR_ID2	= MAX( UPOLNOMR_ID ) + 1
					FROM	U_UPOLNOMR (NOLOCK)
					WHERE	RESIDENT_ID		= @RESIDENT_ID			
					IF	@@ERROR <> 0
						BEGIN	
							SELECT	@RC		= 50
							GOTO	EXIT_PS_UPDATE
						END
		
					SELECT	@UPOLNOMR_ID2	= ISNULL(@UPOLNOMR_ID2,  1 )

					INSERT	INTO	U_UPOLNOMR  	
							( RESIDENT_ID, UPOLNOMR_ID, FIO, DOL, PRIM, DEL_FLAG )
					VALUES
							( @RESIDENT_ID, @UPOLNOMR_ID2, @FIO_UPOLNOMR2, @DOL_UPOLNOMR2, NULL, NULL )
					IF	@@ERROR <> 0
						BEGIN	
							SELECT	@RC		= 50
							GOTO	EXIT_PS_UPDATE
						END
				END
		END

	--
	--	Проверка наличия Уполномоченного лица Банка
	--	и определение его идентификатора
	--
	SELECT	@UPOLNOMB_ID = NULL

	IF	@FIO_UPOLNOMB IS NOT NULL	AND @DOL_UPOLNOMB IS NOT NULL
		BEGIN
			SELECT	@UPOLNOMB_ID				= UPOLNOMB_ID 
			FROM	U_UPOLNOMB (NOLOCK)
			WHERE   BANK_ID						= @BANK_ID								AND
					UPPER(RTRIM(LTRIM(FIO)))	= UPPER(RTRIM(LTRIM(@FIO_UPOLNOMB)))	AND	
					UPPER(RTRIM(LTRIM(DOL)))	= UPPER(RTRIM(LTRIM(@DOL_UPOLNOMB)))	AND
					DEL_FLAG					IS NULL
	
			IF	@UPOLNOMB_ID IS NULL
				BEGIN
					--
					--	Добавление Уполномоченного лица Банка
					--
					SELECT	@UPOLNOMB_ID	= MAX( UPOLNOMB_ID ) + 1
					FROM	U_UPOLNOMB (NOLOCK)
					WHERE	BANK_ID			= @BANK_ID		
					IF	@@ERROR <> 0
						BEGIN	
							SELECT	@RC		= 60
							GOTO	EXIT_PS_UPDATE
						END

					SELECT	@UPOLNOMB_ID	= ISNULL( @UPOLNOMB_ID,  1 )

					INSERT	INTO	U_UPOLNOMB  	
							( BANK_ID,  UPOLNOMB_ID, FIO, DOL, N_PECH, PRIM, DEL_FLAG )
					VALUES
							( @BANK_ID, @UPOLNOMB_ID, @FIO_UPOLNOMB, @DOL_UPOLNOMB, NULL, NULL, NULL )
					IF	@@ERROR <> 0
						BEGIN	
							SELECT	@RC		= 60
							GOTO	EXIT_PS_UPDATE
						END
				END
		END

	--
	--	Обновление информации
	--
	BEGIN	TRANSACTION

	UPDATE	U_PS
	SET 	BANK_ID			= @BANK_ID , 
			DOG_ID			= @DOG_ID , 
			DOG_NPP			= @DOG_NPP , 
			PARTNER_ID		= @PARTNER_ID , 
			N_PS 			= @N_PS  , 
			D_PS			= @D_PS ,
	 		N_KONTR 		= @N_KONTR  , 
			D_KONTR 		= @D_KONTR  , 
	 		KVALK 			= @KVALK , 
	 		SUMK 			= @SUMK  , 
	 		D_END 			= @D_END  , 
	 		R3_G7 			= @R3_G7 , 
			F1_R3_G8 		= @F1_R3_G8 , 
			F1_R3_G9 		= @F1_R3_G9  , 
	 		F1_R3_G10 		= @F1_R3_G10  , 
			F1_R61_USL		= @F1_R61_USL  ,
			F1_R62_SROK		= @F1_R62_SROK ,
			F1_R63_D_LIST2	= @F1_R63_D_LIST2 ,
	 		F2_R3_G8 		= @F2_R3_G8  , 
	 		F2_R3_G9 		= @F2_R3_G9 , 
	 		F2_R3_G10 		= @F2_R3_G10 , 
	 		N_PS_OLD 		= @N_PS_OLD  , 
	 		N_PS_DR 		= @N_PS_DR  , 
	 		D_PS_MOD 		= @D_PS_MOD , 
	 		N_PS_MOD 		= @N_PS_MOD  ,  
	 		D_CLOSE 		= @D_CLOSE  ,  
	 		O_CLOSE 		= @O_CLOSE , 
	 		F2_R61_G1 		= @F2_R61_G1  ,  
	 		F2_R61_G2 		= @F2_R61_G2 ,   
	 		F2_R61_G3 		= @F2_R61_G3 ,  
	 		F2_R61_G4 		= @F2_R61_G4 ,  
	 		F2_R62_G1 		= @F2_R62_G1 ,  
	 		F2_R62_G2 		= @F2_R62_G2 , 
			F2_R62_G3_DATE	= @F2_R62_G3_DATE,
	 		F2_R63_USL 		= @F2_R63_USL ,  
	 		F2_R64_USL  	= @F2_R64_USL , 
	 		F2_R65_MFK 		= @F2_R65_MFK   ,   
			F2_R65_EBRR 	= @F2_R65_EBRR ,  
	 		F2_R65_MB 		= @F2_R65_MB  ,   
	 		F2_R65_DMFO 	= @F2_R65_DMFO ,   
			F2_R65_KRED 	= @F2_R65_KRED  , 
	 		F2_R66_INVEST	= @F2_R66_INVEST  ,
	 		F2_R67_SUM 		= @F2_R67_SUM ,
	 		UPOLNOMR_ID1 	= @UPOLNOMR_ID1 ,
			D_UPOLNOMR1 	= @D_UPOLNOMR1,
	 		UPOLNOMR_ID2 	= @UPOLNOMR_ID2 , 
			D_UPOLNOMR2 	= @D_UPOLNOMR2,
	 		UPOLNOMB_ID 	= @UPOLNOMB_ID,
			D_UPOLNOMB		= @D_UPOLNOMB,
			PRIM			= @PRIM,
			NAMER			= @NAMER,
			INN 			= @INN ,
			KPP 			= @KPP,
			OGRN 			= @OGRN,
			DGR 			= @DGR,
			SUB 			= @SUB,
			REGION 			= @REGION,
			CITY 			= @CITY,
			PUNKT 			= @PUNKT,
			STREET 			= @STREET ,
			HOUSE 			= @HOUSE ,
		  	KORPUS 			= @KORPUS,
		  	OFFICE 			= @OFFICE ,
		  	VID_USLUG		= @VID_USLUG ,
			PRIZ_PROJECT	= @PRIZ_PROJECT ,
			DKOR			= CONVERT(SMALLDATETIME,GETDATE()),
			UNI_ID			= @UNI_ID,
			D_LOAD			= @D_LOAD,
			SRC_LOAD 		= @SRC_LOAD,
			D_PRED			= @D_PRED ,
			D_PRED_PEREOF	= @D_PRED_PEREOF ,
			DOG_ID_BANK		= @DOG_ID_BANK , 
			DOG_NPP_BANK	= @DOG_NPP_BANK 
	WHERE	RESIDENT_ID		= @RESIDENT_ID 	AND
			PS_ID 			= @PS_ID   		AND		
			DEL_FLAG 		IS NULL 
	IF	@@ERROR <> 0
		BEGIN	
			ROLLBACK TRANSACTION 
			SELECT	@RC		= 10
			GOTO	EXIT_PS_UPDATE
		END
	
	--
	--	Добавление события в журнал событий
	--
	EXECUTE	@RETURN_STATUS	= U_EVENT_INSERT
			@EVENT_NAME		= 'EDIT_PS',
			@USER_ID		= @USER_ID,
			@BANK_ID		= @BANK_ID,
			@RESIDENT_ID	= @RESIDENT_ID,
			@PS_ID			= @PS_ID
			
	IF	@RETURN_STATUS <> 0
		BEGIN
			SELECT	@RC = @RETURN_STATUS
			ROLLBACK TRANSACTION
		END
	ELSE 
		COMMIT TRANSACTION 

--
--	Возврат кода завершения
--
EXIT_PS_UPDATE:
	SELECT	RC = @RC
GO

GRANT  EXECUTE  ON [dbo].[U_PS_UPDATE]  TO [OPERS]
GO

--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[U_PS_LIST_SALDO]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[U_PS_LIST_SALDO]
GO

CREATE PROCEDURE [dbo].[U_PS_LIST_SALDO] 
--	------------------------------------------------------------------------------------------------------------------------
--	Подготовка информации для отчета "Сальдо расчётов по Паспортам сделок"
--	для ПС с типом контрактов 1,2,3,4 и 9
--	------------------------------------------------------------------------------------------------------------------------
--	@USER_ID 		-	идентификатор пользователя
--	@RESIDENT_ID 	-	идентификатор Клиента банка (если 0, то все Клиенты Банка)
--	@BANK_ID 		-	идентификатор Уполномоченного банка (если 0, то все Банки)
--	@VID_KONTR		- 	тип ПС (если '0', то для всех типов)
--	@PS_ID 			-	идентификатор ПС ( если 0, то все ПС )	
--	@D_END_BEG		-	нижняя граница диапазона дат окончания исполнения обязательств по контракту	
--	@D_END_END		-	верхняя граница диапазона дат окончания исполнения обязательств по контракту
--	@D_CALC			-	дата, на которую расчитывается сальдо
--	------------------------------------------------------------------------------------------------------------------------
--	(Модификация	в версии 2.1.0)
--	------------------------------------------------------------------------------------------------------------------------
(
	@USER_ID		AS VARCHAR(30),
	@RESIDENT_ID	AS INTEGER,
	@BANK_ID		AS INTEGER			= 0,
	@VID_KONTR		AS CHAR(10)			= '0',
	@PS_ID			AS INTEGER,
	@D_END_BEG		AS DATETIME,
	@D_END_END		AS DATETIME,
	@D_CALC			AS SMALLDATETIME
)

AS

SET NOCOUNT ON

	--	-------------------------------------
	--	Нвчальные значения
	--	-------------------------------------
	--	Ecли не указана дата расчёта, то расчёт производится на текущую дату
	IF	@D_CALC	IS NULL
		SELECT	@D_CALC	= CONVERT( SMALLDATETIME, GETDATE() )

	--	Для точности расчёта будем применять "<" вместо "<="
	--	Поэтому увеличиваем расчётную дату на 1-н день
	SELECT	@D_CALC	= DATEADD( day, 1, @D_CALC )


SELECT	@RESIDENT_ID	= ISNULL(@RESIDENT_ID, 0)
SELECT	@BANK_ID		= ISNULL(@BANK_ID, 0)
SELECT	@VID_KONTR		= ISNULL(@VID_KONTR, '0')
SELECT	@PS_ID			= ISNULL(@PS_ID, 0)

SELECT	U_PS.RESIDENT_ID, 
		U_PS.PS_ID, 
		U_PS.NAMER, 
		U_PS.N_PS, 
		U_DOGOVOR.KVALK, 
		(SELECT	D.SUMK	FROM U_DOGOVOR AS D (NOLOCK) WHERE D.RESIDENT_ID=U_PS.RESIDENT_ID AND D.DOG_ID = U_PS.DOG_ID AND D.DOG_NPP = U_PS.DOG_NPP) AS SUMK,
		(SELECT D.D_END	FROM U_DOGOVOR AS D (NOLOCK) WHERE D.RESIDENT_ID=U_PS.RESIDENT_ID AND D.DOG_ID = U_PS.DOG_ID AND D.DOG_NPP = U_PS.DOG_NPP) AS D_END,
		U_PS.D_CLOSE,
		(	
			SELECT	ISNULL(	SUM(SUMK), 0 )
			FROM	U_OPLATA (NOLOCK)
			INNER	JOIN VIDOP	(NOLOCK)	ON	
					U_OPLATA.KODOP	=	VIDOP.KOD	AND	
					VIDOP.PR_SALDO	=	1
			WHERE	U_OPLATA.RESIDENT_ID 	= 	U_PS.RESIDENT_ID					AND
					U_OPLATA.PS_ID			=	U_PS.PS_ID							AND
					U_OPLATA.VALK			= 	U_DOGOVOR.KVALK						AND
					U_OPLATA.DIRECTION		= 	'1'									AND
					U_OPLATA.D_REFER		<	@D_CALC								AND
					U_OPLATA.DEL_FLAG		IS NULL
		)	AS	SUM_ZACH, 
		(
			SELECT	ISNULL( SUM( SUMK ), 0 )
			FROM	U_OPLATA (NOLOCK)
			INNER	JOIN VIDOP	(NOLOCK)	ON	
					U_OPLATA.KODOP	=	VIDOP.KOD	AND	
					VIDOP.PR_SALDO	=	1
			WHERE	U_OPLATA.RESIDENT_ID	=	U_PS.RESIDENT_ID					AND
					U_OPLATA.PS_ID			=	U_PS.PS_ID							AND
					U_OPLATA.VALK			= 	U_DOGOVOR.KVALK						AND
					U_OPLATA.DIRECTION		= 	'2'									AND			
					U_OPLATA.D_REFER		<	@D_CALC								AND
					U_OPLATA.DEL_FLAG		IS NULL		
		)	AS	SUM_SPIS,
		(
			 SELECT ISNULL( SUM( SUMK ), 0 )
			 FROM	U_SPR_CONFIRM (NOLOCK)
			 WHERE	U_SPR_CONFIRM.RESIDENT_ID	=	U_PS.RESIDENT_ID 				AND
					U_SPR_CONFIRM.PS_ID			=	U_PS.PS_ID						AND
					U_SPR_CONFIRM.VALK			=	U_DOGOVOR.KVALK					AND
					(		
					 ( 
					   ( U_SPR_CONFIRM.KODD	= '01' OR U_SPR_CONFIRM.KODD = '02' OR U_SPR_CONFIRM.KODD = '04' )	AND  
					   U_SPR_CONFIRM.DIRECTION IS NULL							AND
					   (  SUBSTRING(U_PS.N_PS, 20, 1 ) = '2' OR  SUBSTRING(U_PS.N_PS, 20, 1 ) = '4' OR  ( SUBSTRING(U_PS.N_PS, 20, 1 ) = '9' AND ( U_SPR_CONFIRM.TYPE = '2' OR U_SPR_CONFIRM.TYPE = '4' ) ) )
	   		    	     )		
					   OR
					 (
					   ( U_SPR_CONFIRM.KODD = '01' OR U_SPR_CONFIRM.KODD = '02' OR U_SPR_CONFIRM.KODD = '04' )    AND  
					   U_SPR_CONFIRM.DIRECTION = '1'				
					 )			
					)							AND
					U_SPR_CONFIRM.D_DOC			<  @D_CALC							AND
					U_SPR_CONFIRM.PR_NOT_CALC	IS NULL							    AND
					U_SPR_CONFIRM.DEL_FLAG		IS NULL	
		)	AS SUM_CONFIRM_010204_PLUS,
		(
			 SELECT ISNULL( SUM( SUMK ), 0 )
			 FROM	U_SPR_CONFIRM (NOLOCK)
			 WHERE	U_SPR_CONFIRM.RESIDENT_ID	=	U_PS.RESIDENT_ID 				AND
					U_SPR_CONFIRM.PS_ID			=	U_PS.PS_ID						AND
					U_SPR_CONFIRM.VALK			=	U_DOGOVOR.KVALK					AND
					(		
					 ( 
					   ( U_SPR_CONFIRM.KODD = '01' OR U_SPR_CONFIRM.KODD = '02' OR U_SPR_CONFIRM.KODD = '04' )	AND  
					   U_SPR_CONFIRM.DIRECTION IS NULL							AND
					   (  SUBSTRING(U_PS.N_PS, 20, 1 ) = '1' OR  SUBSTRING(U_PS.N_PS, 20, 1 ) = '3' OR  ( SUBSTRING(U_PS.N_PS, 20, 1 ) = '9' AND ( U_SPR_CONFIRM.TYPE = '1' OR U_SPR_CONFIRM.TYPE = '3' ) ) )
		   		         )		
					   OR
					 (
					   ( U_SPR_CONFIRM.KODD = '01' OR U_SPR_CONFIRM.KODD = '02' OR U_SPR_CONFIRM.KODD = '04' )    AND  
					   U_SPR_CONFIRM.DIRECTION = '2'				
					 )			
					)																AND
					U_SPR_CONFIRM.D_DOC			<  @D_CALC							AND
      				U_SPR_CONFIRM.PR_NOT_CALC	IS NULL							    AND
					U_SPR_CONFIRM.DEL_FLAG		IS NULL	
		)	AS SUM_CONFIRM_010204_MINUS,
		(
			 SELECT ISNULL( SUM( SUMK ), 0 )
			 FROM	U_SPR_CONFIRM (NOLOCK)
			 WHERE	U_SPR_CONFIRM.RESIDENT_ID	=	U_PS.RESIDENT_ID 				AND
					U_SPR_CONFIRM.PS_ID			=	U_PS.PS_ID						AND
					U_SPR_CONFIRM.VALK			=	U_DOGOVOR.KVALK					AND
					( U_SPR_CONFIRM.KODD = '03' OR U_SPR_CONFIRM.KODD = '05' ) 		AND  
					U_SPR_CONFIRM.D_DOC			<	@D_CALC							AND
					U_SPR_CONFIRM.PR_NOT_CALC	IS NULL								AND
					U_SPR_CONFIRM.DEL_FLAG		IS NULL	
		)	AS SUM_CONFIRM_0305_MINUS,
		(
			 SELECT	ISNULL( SUM( SUMK ), 0 ) 
			 FROM	U_SPR_CONFIRM (NOLOCK)
			 WHERE	U_SPR_CONFIRM.RESIDENT_ID	=	U_PS.RESIDENT_ID 	AND
					U_SPR_CONFIRM.PS_ID			=	U_PS.PS_ID			AND
					U_SPR_CONFIRM.VALK			=	U_DOGOVOR.KVALK		AND
					U_SPR_CONFIRM.KODD			>= '10'					AND
					U_SPR_CONFIRM.KODD			<= '11'					AND
					U_SPR_CONFIRM.D_DOC			<  @D_CALC				AND
					U_SPR_CONFIRM.PR_NOT_CALC	IS NULL					AND
					U_SPR_CONFIRM.DEL_FLAG		IS NULL			
		)	AS SUM_CONFIRM_1011_MINUS,
		(
			 SELECT	ISNULL( SUM( SUMK ), 0 ) 
			 FROM	U_SPR_CONFIRM (NOLOCK)
			 WHERE	U_SPR_CONFIRM.RESIDENT_ID	=	U_PS.RESIDENT_ID 	AND
					U_SPR_CONFIRM.PS_ID			=	U_PS.PS_ID			AND
					U_SPR_CONFIRM.VALK			=	U_DOGOVOR.KVALK		AND
					U_SPR_CONFIRM.KODD			>= '12'					AND
					U_SPR_CONFIRM.KODD			<= '13'					AND
					U_SPR_CONFIRM.D_DOC			<  @D_CALC				AND
					U_SPR_CONFIRM.PR_NOT_CALC	IS NULL					AND
					U_SPR_CONFIRM.DEL_FLAG		IS NULL			
		)	AS SUM_CONFIRM_1213_PLUS,
		(
			 SELECT ISNULL( SUM( SUMK ), 0 )
			 FROM	U_SPR_CONFIRM (NOLOCK)
			 WHERE	U_SPR_CONFIRM.RESIDENT_ID	=	U_PS.RESIDENT_ID 	AND
					U_SPR_CONFIRM.PS_ID			=	U_PS.PS_ID			AND
					U_SPR_CONFIRM.VALK			=	U_DOGOVOR.KVALK		AND
					(		
					 ( 
					   U_SPR_CONFIRM.KODD	= '14'						AND  
					   U_SPR_CONFIRM.DIRECTION IS NULL					AND
					   (  SUBSTRING(U_PS.N_PS, 20, 1 ) = '1' OR  SUBSTRING(U_PS.N_PS, 20, 1 ) = '3' OR  ( SUBSTRING(U_PS.N_PS, 20, 1 ) = '9' AND ( U_SPR_CONFIRM.TYPE = '1' OR U_SPR_CONFIRM.TYPE = '3' ) ) )
		   		         )		
					   OR
					 (
					   U_SPR_CONFIRM.KODD	= '14'						AND  
					   U_SPR_CONFIRM.DIRECTION = '2'				
					 )			
					)													AND
					U_SPR_CONFIRM.D_DOC			<	@D_CALC				AND
					U_SPR_CONFIRM.PR_NOT_CALC	IS NULL					AND
					U_SPR_CONFIRM.DEL_FLAG		IS NULL	
		)	AS SUM_CONFIRM_14_PLUS,
		(
			 SELECT ISNULL( SUM( SUMK ), 0 )
			 FROM	U_SPR_CONFIRM (NOLOCK)
			 WHERE	U_SPR_CONFIRM.RESIDENT_ID	= U_PS.RESIDENT_ID		AND
					U_SPR_CONFIRM.PS_ID			= U_PS.PS_ID			AND
					U_SPR_CONFIRM.VALK			= U_DOGOVOR.KVALK		AND
					(		
					 ( 
					   U_SPR_CONFIRM.KODD	= '14'						AND  
					   U_SPR_CONFIRM.DIRECTION IS NULL					AND
					   (  SUBSTRING(U_PS.N_PS, 20, 1 ) = '2' OR  SUBSTRING(U_PS.N_PS, 20, 1 ) = '4' OR  ( SUBSTRING(U_PS.N_PS, 20, 1 ) = '9' AND ( U_SPR_CONFIRM.TYPE = '2' OR U_SPR_CONFIRM.TYPE = '4' ) ) )
		   		         )		
					   OR
					 (
					   U_SPR_CONFIRM.KODD	= '14'						AND  
					   U_SPR_CONFIRM.DIRECTION = '1'				
					 )			
					)													AND
					U_SPR_CONFIRM.D_DOC			<	@D_CALC				AND
					U_SPR_CONFIRM.PR_NOT_CALC	IS NULL					AND
					U_SPR_CONFIRM.DEL_FLAG		IS NULL	
		)	AS SUM_CONFIRM_14_MINUS,
		CASE
			WHEN	U_DOGOVOR.KVALK	= (SELECT MAX(D.KVALK) FROM U_DOGOVOR AS D (NOLOCK) WHERE D.RESIDENT_ID=U_PS.RESIDENT_ID AND D.DOG_ID = U_PS.DOG_ID AND D.DOG_NPP = U_PS.DOG_NPP)
			THEN	1
			ELSE	2
		END	AS	SORT_ORDER
FROM	U_PS (NOLOCK)
INNER	JOIN	U_USERS_RESIDENTS (NOLOCK) ON 
		U_USERS_RESIDENTS.RESIDENT_ID	= U_PS.RESIDENT_ID		AND
		U_USERS_RESIDENTS.USER_ID		= @USER_ID
INNER	JOIN	U_RESIDENTS (NOLOCK) ON	
		U_RESIDENTS.RESIDENT_ID			= U_PS.RESIDENT_ID		AND
		(
			@RESIDENT_ID = 0 							OR
			U_RESIDENTS.RESIDENT_ID		= @RESIDENT_ID	 
		)														AND
		U_RESIDENTS.DEL_FLAG 			IS NULL		
INNER	JOIN	U_DOGOVOR (NOLOCK) ON
		U_DOGOVOR.RESIDENT_ID			=	U_PS.RESIDENT_ID	AND
		U_DOGOVOR.DOG_ID				=	U_PS.DOG_ID			AND
		U_DOGOVOR.DEL_FLAG				IS NULL
WHERE	( 
			@BANK_ID						=	0			OR
			U_PS.BANK_ID					=	@BANK_ID
		)														AND
		( 
			@VID_KONTR						=	'0'			OR
			SUBSTRING( U_PS.N_PS, 20, 1 )	=	@VID_KONTR
		)														AND
		SUBSTRING( U_PS.N_PS, 20, 1 )	<> '5'					AND
		SUBSTRING( U_PS.N_PS, 20, 1 )	<> '6'					AND
		EXISTS	(
					SELECT	*
					FROM	U_DOGOVOR AS D (NOLOCK)
					WHERE	D.RESIDENT_ID			=	U_PS.RESIDENT_ID	AND
							D.DOG_ID				=	U_PS.DOG_ID			AND
							D.DOG_NPP				=	U_PS.DOG_NPP		AND
							D.DEL_FLAG				IS NULL					AND
							ISNULL( D.D_END, CONVERT(DATETIME, '30000606' ))	>= ISNULL(@D_END_BEG, CONVERT(DATETIME, '19000101'))	AND
							ISNULL( D.D_END, CONVERT(DATETIME, '30000606' ))	<= ISNULL(@D_END_END, CONVERT(DATETIME, '30000606'))
				)												AND
		U_PS.DEL_FLAG			IS NULL							AND
		( 
			@RESIDENT_ID	=	0	OR	
			(U_PS.RESIDENT_ID = @RESIDENT_ID	AND @PS_ID = 0) OR 
			(U_PS.RESIDENT_ID = @RESIDENT_ID	AND U_PS.PS_ID = @PS_ID )
		)	
GROUP	BY U_PS.RESIDENT_ID, U_PS.PS_ID, U_PS.NAMER, U_PS.N_PS, U_PS.D_CLOSE, U_PS.DOG_ID, U_PS.DOG_NPP, U_DOGOVOR.KVALK
ORDER	BY U_PS.N_PS, SORT_ORDER, U_DOGOVOR.KVALK
GO

GRANT  EXECUTE  ON [dbo].[U_PS_LIST_SALDO]  TO [OPERS], [AUDITS]
GO

--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[U_PS_LIST_SALDO_2]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[U_PS_LIST_SALDO_2]
GO

CREATE PROCEDURE [dbo].[U_PS_LIST_SALDO_2] 
--	------------------------------------------------------------------------------------------------------------------------
--	Подготовка информации для отчета "Сальдо расчётов по ПС (дополнительная форма)"
--	для ПС с типом контрактов 1,2,3,4 и 9
--	------------------------------------------------------------------------------------------------------------------------
--	@USER_ID 		-	идентификатор пользователя
--	@RESIDENT_ID 	-	идентификатор Клиента банка (если 0, то все Клиенты Банка)
--	@PARTNER_ID 	-	идентификатор Иностранного контрагента (если 0, то все Иностранные контрагенты)
--	@BANK_ID 		-	идентификатор Уполномоченного банка (если 0, то все Банки)
--	@VID_KONTR		- 	тип ПС (если '0', то для всех типов)
--	@PS_ID 			-	идентификатор ПС ( если 0, то все ПС )	
--	@D_END_BEG		-	нижняя граница диапазона дат окончания исполнения обязательств по контракту	
--	@D_END_END		-	верхняя граница диапазона дат окончания исполнения обязательств по контракту
--	@D_CALC			-	дата, на которую расчитывается сальдо
--	------------------------------------------------------------------------------------------------------------------------
--	(Модификация	в версии 2.1.0)
--	------------------------------------------------------------------------------------------------------------------------
(
	@USER_ID		AS VARCHAR(30),
	@RESIDENT_ID	AS INTEGER,
	@PARTNER_ID		AS INTEGER,
	@BANK_ID		AS INTEGER			= 0,
	@VID_KONTR		AS CHAR(10)			= '0',
	@PS_ID			AS INTEGER,
	@D_END_BEG		AS DATETIME,
	@D_END_END		AS DATETIME,
	@D_CALC			AS SMALLDATETIME
)

AS

SET NOCOUNT ON

	--	-------------------------------------
	--	Нвчальные значения
	--	-------------------------------------
	--	Ecли не указана дата расчёта, то расчёт производится на текущую дату
	IF	@D_CALC	IS NULL
		SELECT	@D_CALC	= CONVERT( SMALLDATETIME, GETDATE() )

	--	Для точности расчёта будем применять "<" вместо "<="
	--	Поэтому увеличиваем расчётную дату на 1-н день
	SELECT	@D_CALC	= DATEADD( day, 1, @D_CALC )

SELECT	@RESIDENT_ID	= ISNULL(@RESIDENT_ID, 0)
SELECT	@PARTNER_ID		= ISNULL(@PARTNER_ID, 0)
SELECT	@BANK_ID		= ISNULL(@BANK_ID, 0)
SELECT	@VID_KONTR		= ISNULL(@VID_KONTR, '0')
SELECT	@PS_ID			= ISNULL(@PS_ID, 0)

SELECT	U_PS.RESIDENT_ID, 
		U_IN_PART.PARTNER_ID,
		U_IN_PART.NAMEP,
		U_PS.PS_ID, 
		U_PS.NAMER, 
		U_PS.N_PS, 
		(SELECT	D.N_KONTR	FROM U_DOGOVOR AS D (NOLOCK) WHERE D.RESIDENT_ID=U_PS.RESIDENT_ID AND D.DOG_ID = U_PS.DOG_ID AND D.DOG_NPP = U_PS.DOG_NPP) AS N_KONTR,
		U_DOGOVOR.KVALK, 
		(SELECT	D.SUMK	FROM U_DOGOVOR AS D (NOLOCK) WHERE D.RESIDENT_ID=U_PS.RESIDENT_ID AND D.DOG_ID = U_PS.DOG_ID AND D.DOG_NPP = U_PS.DOG_NPP) AS SUMK,
		(SELECT D.D_END	FROM U_DOGOVOR AS D (NOLOCK) WHERE D.RESIDENT_ID=U_PS.RESIDENT_ID AND D.DOG_ID = U_PS.DOG_ID AND D.DOG_NPP = U_PS.DOG_NPP) AS D_END,
		U_PS.D_CLOSE,
		(	
			SELECT	ISNULL(	SUM(SUMK), 0 )
			FROM	U_OPLATA (NOLOCK)
			INNER	JOIN VIDOP	(NOLOCK)	ON	
					U_OPLATA.KODOP	=	VIDOP.KOD	AND	
					VIDOP.PR_SALDO	=	1
			WHERE	U_OPLATA.RESIDENT_ID 	= 	U_PS.RESIDENT_ID					AND
					U_OPLATA.PS_ID			=	U_PS.PS_ID							AND
					U_OPLATA.VALK			= 	U_DOGOVOR.KVALK						AND
					U_OPLATA.DIRECTION		= 	'1'									AND
					U_OPLATA.D_REFER		<	@D_CALC								AND
					U_OPLATA.DEL_FLAG		IS NULL
		)	AS	SUM_ZACH, 
		(
			SELECT	ISNULL( SUM( SUMK ), 0 )
			FROM	U_OPLATA (NOLOCK)
			INNER	JOIN VIDOP	(NOLOCK)	ON	
					U_OPLATA.KODOP	=	VIDOP.KOD	AND	
					VIDOP.PR_SALDO	=	1
			WHERE	U_OPLATA.RESIDENT_ID	=	U_PS.RESIDENT_ID					AND
					U_OPLATA.PS_ID			=	U_PS.PS_ID							AND
					U_OPLATA.VALK			= 	U_DOGOVOR.KVALK						AND
					U_OPLATA.DIRECTION		= 	'2'									AND			
					U_OPLATA.D_REFER		<  @D_CALC								AND
					U_OPLATA.DEL_FLAG		IS NULL		
		)	AS	SUM_SPIS,
		(
			 SELECT ISNULL( SUM( SUMK ), 0 )
			 FROM	U_SPR_CONFIRM (NOLOCK)
			 WHERE	U_SPR_CONFIRM.RESIDENT_ID	=	U_PS.RESIDENT_ID 				AND
					U_SPR_CONFIRM.PS_ID			=	U_PS.PS_ID						AND
					U_SPR_CONFIRM.VALK			=	U_DOGOVOR.KVALK					AND
					(		
					 ( 
					   ( U_SPR_CONFIRM.KODD	= '01' OR U_SPR_CONFIRM.KODD = '02' OR U_SPR_CONFIRM.KODD = '04' )	AND  
					   U_SPR_CONFIRM.DIRECTION IS NULL							AND
					   (  SUBSTRING(U_PS.N_PS, 20, 1 ) = '2' OR  SUBSTRING(U_PS.N_PS, 20, 1 ) = '4' OR  ( SUBSTRING(U_PS.N_PS, 20, 1 ) = '9' AND ( U_SPR_CONFIRM.TYPE = '2' OR U_SPR_CONFIRM.TYPE = '4' ) ) )
	   		    	     )		
					   OR
					 (
					   ( U_SPR_CONFIRM.KODD = '01' OR U_SPR_CONFIRM.KODD = '02' OR U_SPR_CONFIRM.KODD = '04' )    AND  
					   U_SPR_CONFIRM.DIRECTION = '1'				
					 )			
					)							AND
					U_SPR_CONFIRM.D_DOC			<  @D_CALC						AND
					U_SPR_CONFIRM.PR_NOT_CALC	IS NULL							AND
					U_SPR_CONFIRM.DEL_FLAG		IS NULL	
		)	AS SUM_CONFIRM_010204_PLUS,
		(
			 SELECT ISNULL( SUM( SUMK ), 0 )
			 FROM	U_SPR_CONFIRM (NOLOCK)
			 WHERE	U_SPR_CONFIRM.RESIDENT_ID	=	U_PS.RESIDENT_ID 				AND
					U_SPR_CONFIRM.PS_ID			=	U_PS.PS_ID						AND
					U_SPR_CONFIRM.VALK			=	U_DOGOVOR.KVALK					AND
					(		
					 ( 
					   ( U_SPR_CONFIRM.KODD = '01' OR U_SPR_CONFIRM.KODD = '02' OR U_SPR_CONFIRM.KODD = '04' )	AND  
					   U_SPR_CONFIRM.DIRECTION IS NULL							AND
					   (  SUBSTRING(U_PS.N_PS, 20, 1 ) = '1' OR  SUBSTRING(U_PS.N_PS, 20, 1 ) = '3' OR  ( SUBSTRING(U_PS.N_PS, 20, 1 ) = '9' AND ( U_SPR_CONFIRM.TYPE = '1' OR U_SPR_CONFIRM.TYPE = '3' ) ) )
		   		         )		
					   OR
					 (
					   ( U_SPR_CONFIRM.KODD = '01' OR U_SPR_CONFIRM.KODD = '02' OR U_SPR_CONFIRM.KODD = '04' )    AND  
					   U_SPR_CONFIRM.DIRECTION = '2'				
					 )			
					)																AND
					U_SPR_CONFIRM.D_DOC			<  @D_CALC							AND
					U_SPR_CONFIRM.PR_NOT_CALC	IS NULL								AND
					U_SPR_CONFIRM.DEL_FLAG		IS NULL	
		)	AS SUM_CONFIRM_010204_MINUS,
		(
			 SELECT ISNULL( SUM( SUMK ), 0 )
			 FROM	U_SPR_CONFIRM (NOLOCK)
			 WHERE	U_SPR_CONFIRM.RESIDENT_ID	=	U_PS.RESIDENT_ID 				AND
					U_SPR_CONFIRM.PS_ID			=	U_PS.PS_ID						AND
					U_SPR_CONFIRM.VALK			=	U_DOGOVOR.KVALK					AND
					( U_SPR_CONFIRM.KODD = '03' OR U_SPR_CONFIRM.KODD = '05' ) 		AND  
					U_SPR_CONFIRM.D_DOC			<	@D_CALC							AND
					U_SPR_CONFIRM.PR_NOT_CALC	IS NULL								AND
					U_SPR_CONFIRM.DEL_FLAG		IS NULL	
		)	AS SUM_CONFIRM_0305_MINUS,
		(
			 SELECT	ISNULL( SUM( SUMK ), 0 ) 
			 FROM	U_SPR_CONFIRM (NOLOCK)
			 WHERE	U_SPR_CONFIRM.RESIDENT_ID	=	U_PS.RESIDENT_ID 	AND
					U_SPR_CONFIRM.PS_ID			=	U_PS.PS_ID			AND
					U_SPR_CONFIRM.VALK			=	U_DOGOVOR.KVALK		AND
					U_SPR_CONFIRM.KODD			>= '10'					AND
					U_SPR_CONFIRM.KODD			<= '11'					AND
					U_SPR_CONFIRM.D_DOC			<  @D_CALC				AND
					U_SPR_CONFIRM.PR_NOT_CALC	IS NULL					AND
					U_SPR_CONFIRM.DEL_FLAG		IS NULL			
		)	AS SUM_CONFIRM_1011_MINUS,
		(
			 SELECT	ISNULL( SUM( SUMK ), 0 ) 
			 FROM	U_SPR_CONFIRM (NOLOCK)
			 WHERE	U_SPR_CONFIRM.RESIDENT_ID	=	U_PS.RESIDENT_ID 	AND
					U_SPR_CONFIRM.PS_ID			=	U_PS.PS_ID			AND
					U_SPR_CONFIRM.VALK			=	U_DOGOVOR.KVALK		AND
					U_SPR_CONFIRM.KODD			>= '12'					AND
					U_SPR_CONFIRM.KODD			<= '13'					AND
					U_SPR_CONFIRM.D_DOC			<  @D_CALC				AND
					U_SPR_CONFIRM.PR_NOT_CALC	IS NULL					AND
					U_SPR_CONFIRM.DEL_FLAG		IS NULL			
		)	AS SUM_CONFIRM_1213_PLUS,
		(
			 SELECT ISNULL( SUM( SUMK ), 0 )
			 FROM	U_SPR_CONFIRM (NOLOCK)
			 WHERE	U_SPR_CONFIRM.RESIDENT_ID	=	U_PS.RESIDENT_ID 	AND
					U_SPR_CONFIRM.PS_ID			=	U_PS.PS_ID			AND
					U_SPR_CONFIRM.VALK			=	U_DOGOVOR.KVALK		AND
					(		
					 ( 
					   U_SPR_CONFIRM.KODD	= '14'						AND  
					   U_SPR_CONFIRM.DIRECTION IS NULL					AND
					   (  SUBSTRING(U_PS.N_PS, 20, 1 ) = '1' OR  SUBSTRING(U_PS.N_PS, 20, 1 ) = '3' OR  ( SUBSTRING(U_PS.N_PS, 20, 1 ) = '9' AND ( U_SPR_CONFIRM.TYPE = '1' OR U_SPR_CONFIRM.TYPE = '3' ) ) )
		   		         )		
					   OR
					 (
					   U_SPR_CONFIRM.KODD	= '14'						AND  
					   U_SPR_CONFIRM.DIRECTION = '2'				
					 )			
					)													AND
					U_SPR_CONFIRM.D_DOC			<	@D_CALC				AND
					U_SPR_CONFIRM.PR_NOT_CALC	IS NULL					AND
					U_SPR_CONFIRM.DEL_FLAG		IS NULL	
		)	AS SUM_CONFIRM_14_PLUS,
		(
			 SELECT ISNULL( SUM( SUMK ), 0 )
			 FROM	U_SPR_CONFIRM (NOLOCK)
			 WHERE	U_SPR_CONFIRM.RESIDENT_ID	= U_PS.RESIDENT_ID		AND
					U_SPR_CONFIRM.PS_ID			= U_PS.PS_ID			AND
					U_SPR_CONFIRM.VALK			= U_DOGOVOR.KVALK		AND
					(		
					 ( 
					   U_SPR_CONFIRM.KODD	= '14'						AND  
					   U_SPR_CONFIRM.DIRECTION IS NULL					AND
					   (  SUBSTRING(U_PS.N_PS, 20, 1 ) = '2' OR  SUBSTRING(U_PS.N_PS, 20, 1 ) = '4' OR  ( SUBSTRING(U_PS.N_PS, 20, 1 ) = '9' AND ( U_SPR_CONFIRM.TYPE = '2' OR U_SPR_CONFIRM.TYPE = '4' ) ) )
		   		         )		
					   OR
					 (
					   U_SPR_CONFIRM.KODD	= '14'						AND  
					   U_SPR_CONFIRM.DIRECTION = '1'				
					 )			
					)													AND
					U_SPR_CONFIRM.D_DOC			<  @D_CALC				AND
					U_SPR_CONFIRM.PR_NOT_CALC	IS NULL					AND
					U_SPR_CONFIRM.DEL_FLAG		IS NULL	
		)	AS SUM_CONFIRM_14_MINUS,
		CASE
			WHEN	U_DOGOVOR.KVALK	= (SELECT MAX(D.KVALK) FROM U_DOGOVOR AS D (NOLOCK) WHERE D.RESIDENT_ID=U_PS.RESIDENT_ID AND D.DOG_ID = U_PS.DOG_ID AND D.DOG_NPP = U_PS.DOG_NPP)
			THEN	1
			ELSE	2
		END	AS	SORT_ORDER
FROM	U_PS (NOLOCK)
INNER	JOIN	U_USERS_RESIDENTS (NOLOCK) ON 
		U_USERS_RESIDENTS.RESIDENT_ID	= U_PS.RESIDENT_ID		AND
		U_USERS_RESIDENTS.USER_ID		= @USER_ID
INNER	JOIN	U_RESIDENTS (NOLOCK) ON	
		U_RESIDENTS.RESIDENT_ID			= U_PS.RESIDENT_ID		AND
		(
			@RESIDENT_ID = 0 							OR
			U_RESIDENTS.RESIDENT_ID		= @RESIDENT_ID	 
		)														AND
		U_RESIDENTS.DEL_FLAG 			IS NULL		
INNER	JOIN	U_DOGOVOR (NOLOCK) ON
		U_DOGOVOR.RESIDENT_ID			=	U_PS.RESIDENT_ID	AND
		U_DOGOVOR.DOG_ID				=	U_PS.DOG_ID			AND
		U_DOGOVOR.DEL_FLAG				IS NULL
INNER	JOIN	U_IN_PART (NOLOCK) ON
		U_IN_PART.PARTNER_ID			=	U_DOGOVOR.PARTNER_ID	AND
		(
			@PARTNER_ID = 0 							OR
			U_IN_PART.PARTNER_ID		= @PARTNER_ID	 
		)														AND
		U_IN_PART.DEL_FLAG				IS NULL
WHERE	( 
			@BANK_ID						=	0			OR
			U_PS.BANK_ID					=	@BANK_ID
		)														AND
		( 
			@VID_KONTR						=	'0'			OR
			SUBSTRING( U_PS.N_PS, 20, 1 )	=	@VID_KONTR
		)														AND
		SUBSTRING( U_PS.N_PS, 20, 1 )	<> '5'					AND
		SUBSTRING( U_PS.N_PS, 20, 1 )	<> '6'					AND
		EXISTS	(
					SELECT	*
					FROM	U_DOGOVOR AS D (NOLOCK)
					WHERE	D.RESIDENT_ID			=	U_PS.RESIDENT_ID	AND
							D.DOG_ID				=	U_PS.DOG_ID			AND
							D.DOG_NPP				=	U_PS.DOG_NPP		AND
							D.DEL_FLAG				IS NULL					AND
							ISNULL( D.D_END, CONVERT(DATETIME, '30000606' ))	>= ISNULL(@D_END_BEG, CONVERT(DATETIME, '19000101'))	AND
							ISNULL( D.D_END, CONVERT(DATETIME, '30000606' ))	<= ISNULL(@D_END_END, CONVERT(DATETIME, '30000606'))
				)												AND
		U_PS.DEL_FLAG			IS NULL							AND
		( 
			@RESIDENT_ID	=	0	OR	
			(U_PS.RESIDENT_ID = @RESIDENT_ID	AND @PS_ID = 0) OR 
			(U_PS.RESIDENT_ID = @RESIDENT_ID	AND U_PS.PS_ID = @PS_ID )
		)	
GROUP	BY	U_PS.RESIDENT_ID, U_IN_PART.PARTNER_ID, U_IN_PART.NAMEP, U_PS.PS_ID, U_PS.NAMER, U_PS.N_PS, U_PS.D_CLOSE, U_PS.DOG_ID, U_PS.DOG_NPP, U_DOGOVOR.KVALK
ORDER	BY	U_PS.NAMER, U_IN_PART.NAMEP, U_PS.N_PS, SORT_ORDER, U_DOGOVOR.KVALK
GO

GRANT  EXECUTE  ON [dbo].[U_PS_LIST_SALDO_2]  TO [OPERS], [AUDITS]
GO

--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[U_PS_LIST_ZADOL]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[U_PS_LIST_ZADOL]
GO

CREATE PROCEDURE [dbo].[U_PS_LIST_ZADOL]
--	------------------------------------------------------------------------------------------------------------------------
--	Отчёт "Задолженность по основному долгу по ПС (кредитные договоры)"
--	------------------------------------------------------------------------------------------------------------------------
--	@USER_ID 		-	идентификатор пользователя
--	@RESIDENT_ID 	-	идентификатор Участника ВЭД (если 0, то все Участники ВЭД)
--	@BANK_ID 		-	идентификатор Уполномоченного банка (если 0, то все Банки)
--	@VID_KONTR		- 	тип ПС (если '0', то для всех типов)
--	@PS_ID 			-	идентификатор ПС ( если 0, то все ПС )	
--	@D_END_BEG		-	нижняя граница диапазона дат окончания исполнения обязательств по контракту	
--	@D_END_END		-	верхняя граница диапазона дат окончания исполнения обязательств по контракту
--	@D_CALC			-	дата, на которую расчитывается задолженность
--	@FLAG_PEREOF	-	признак выдачи только ПС у которых менялся код валюты цены договора
--						0 или NULL - все, 1 -  только ПС у которых менялся код валюты цены договора
--	------------------------------------------------------------------------------------------------------------------------
--	(Модификация	в версии 2.1.0)
--	------------------------------------------------------------------------------------------------------------------------
(
	@USER_ID		AS VARCHAR(30),
	@RESIDENT_ID	AS INTEGER,
	@BANK_ID		AS INTEGER			= 0,
	@VID_KONTR		AS CHAR(10)			= '0',
	@PS_ID			AS INTEGER,
	@D_END_BEG		AS DATETIME,
	@D_END_END		AS DATETIME,
	@D_CALC			AS SMALLDATETIME	= NULL,
	@FLAG_PEREOF	AS INTEGER			= NULL
)
AS

	SET	NOCOUNT ON

	SELECT	@RESIDENT_ID	= ISNULL(@RESIDENT_ID, 0)
	SELECT	@BANK_ID		= ISNULL(@BANK_ID, 0)
	SELECT	@VID_KONTR		= ISNULL(@VID_KONTR, '0')
	SELECT	@PS_ID			= ISNULL(@PS_ID, 0)

	--	-------------------------------------
	--	Нвчальные значения
	--	-------------------------------------

	--	Ecли не указана дата расчёта, то растёт производится на текущую дату
	IF	@D_CALC	IS NULL
		SELECT	@D_CALC	= CONVERT( SMALLDATETIME, GETDATE() )

	--	Для точности расчёта будем применять "<" вместо "<="
	--	Поэтому увеличиваем расчетную дату на 1-н день
	SELECT	@D_CALC	= DATEADD( day, 1, @D_CALC )

	IF	@FLAG_PEREOF IS NULL
		SELECT	@FLAG_PEREOF = 0	

	--	------------------------------------------------------------------
	--	Задолженность по КВЦ по ПС
	--	------------------------------------------------------------------
	SELECT	U_PS.RESIDENT_ID, 
			U_PS.PS_ID, 
			U_RESIDENTS.NAMER,
			U_PS.N_PS,
			U_DOGOVOR.KVALK,
			(SELECT	D.SUMK	FROM U_DOGOVOR AS D (NOLOCK) WHERE D.RESIDENT_ID=U_PS.RESIDENT_ID AND D.DOG_ID = U_PS.DOG_ID AND D.DOG_NPP = U_PS.DOG_NPP) AS SUMK,
			(SELECT D.D_END	FROM U_DOGOVOR AS D (NOLOCK) WHERE D.RESIDENT_ID=U_PS.RESIDENT_ID AND D.DOG_ID = U_PS.DOG_ID AND D.DOG_NPP = U_PS.DOG_NPP) AS D_END,
			U_PS.D_CLOSE,	
			--	-------------------------------------------
			--	Начальная задолженность
			--	-------------------------------------------
			ISNULL	(
						(
							CASE
								WHEN	( 
											U_PS.F2_R62_G1	IS NOT NULL AND 
											U_PS.F2_R62_G2	IS NOT NULL 
										)										
										THEN
											--	Код валюты и сумма первоначальной задолжнности были указаны в ПС
											CASE  
												WHEN U_PS.F2_R62_G1	=  U_DOGOVOR.KVALK	THEN	U_PS.F2_R62_G2	
												ELSE									0
											END

								ELSE		
											--	Информация отсутствует, т.е. первоначальной задолжнности нет 
											0
							END
						)	
						, 0
					)
				AS	SUM_62,

			--	----------------------------------------------------------------------
			--	Увеличение (начисление) сумма начальной задолженности в "новой" валюте 
			--	в случае изменения кода валюты цены кредитного договора
			--	----------------------------------------------------------------------
			(
				SELECT	ISNULL(	SUM(U_PS_IZMEN_ZADOL.SUMK), 0 )	
				FROM	U_PS_IZMEN_ZADOL (NOLOCK)
				WHERE	U_PS_IZMEN_ZADOL.RESIDENT_ID	= U_PS.RESIDENT_ID	AND
						U_PS_IZMEN_ZADOL.PS_ID			= U_PS.PS_ID		AND
						U_PS_IZMEN_ZADOL.VALK			= U_DOGOVOR.KVALK	AND
						U_PS_IZMEN_ZADOL.KOD			= '00151'			AND		
						U_PS_IZMEN_ZADOL.D_IZM			< @D_CALC			AND
						U_PS_IZMEN_ZADOL.DEL_FLAG		IS NULL							
			)	AS	SUM_IZM_VALK_PLUS,

			--	----------------------------------------------------------------------
			--	Уменьшение (списание) текущей задолженности в "старой" валюте 
			--	в случае изменения кода валюты цены кредитного договора
			--	----------------------------------------------------------------------
			(
				SELECT	ISNULL(	SUM(U_PS_IZMEN_ZADOL.SUMK), 0 )	
				FROM	U_PS_IZMEN_ZADOL (NOLOCK)
				WHERE	U_PS_IZMEN_ZADOL.RESIDENT_ID	= U_PS.RESIDENT_ID	AND
						U_PS_IZMEN_ZADOL.PS_ID			= U_PS.PS_ID		AND
						U_PS_IZMEN_ZADOL.VALK			= U_DOGOVOR.KVALK	AND
						U_PS_IZMEN_ZADOL.KOD			= '00152'			AND		
						U_PS_IZMEN_ZADOL.D_IZM			< @D_CALC			AND
						U_PS_IZMEN_ZADOL.DEL_FLAG		IS NULL							
			)	AS	SUM_IZM_VALK_MINUS,		

			--	--------------------------------------------------
			--	Сумма предоставленных заемных средств для типа '5'
			--	Сумма полученных заемных средств для типа '6'
			--	--------------------------------------------------
			(
				SELECT	ISNULL(	SUM(U_OPLATA.SUMK), 0 )
				FROM	U_OPLATA (NOLOCK)
				WHERE	U_OPLATA.RESIDENT_ID 	= U_PS.RESIDENT_ID		AND
						U_OPLATA.PS_ID			= U_PS.PS_ID			AND
						U_OPLATA.VALK			= U_DOGOVOR.KVALK		AND
						(
							(
								( 
									U_OPLATA.KODOP = '40010' OR 
									U_OPLATA.KODOP = '40020' 
								)										AND
								U_OPLATA.DIRECTION				= '2'	AND
								SUBSTRING( U_PS.N_PS, 20, 1 )	= '5'
							)	
							OR
							(
								(
									U_OPLATA.KODOP = '41010' OR 
									U_OPLATA.KODOP = '41020' 
								)										AND
								U_OPLATA.DIRECTION				= '1'	AND
								SUBSTRING( U_PS.N_PS, 20, 1 )	= '6'
							)
						)												AND
						U_OPLATA.D_REFER		< @D_CALC				AND
						(
							--	Дата начальной задолженности не определена
							U_PS.F2_R62_G3_DATE	IS NULL		
							OR
							--	Дата начальной задолженности определена
							--	и не учитываются платежи раньше этой даты
							(
								U_PS.F2_R62_G3_DATE	IS	NOT	NULL			AND
								U_OPLATA.D_REFER	>=	U_PS.F2_R62_G3_DATE	
							)
						)													AND
						U_OPLATA.DEL_FLAG		IS NULL
			)	AS	SUM_PLUS,
		
			--	--------------------------------------------------------------------------
			--	Сумма средств, зачисленных в счёт погашения основного долга для типа '5'
			--	Сумма средств, переведённых в счёт погашения основного долга для типа '6'
			--	--------------------------------------------------------------------------
			(
				SELECT	ISNULL(	SUM(U_OPLATA.SUMK), 0 )
				FROM	U_OPLATA (NOLOCK)
				WHERE
					U_OPLATA.RESIDENT_ID 	= U_PS.RESIDENT_ID		AND
					U_OPLATA.PS_ID			= U_PS.PS_ID			AND
					U_OPLATA.VALK			= U_DOGOVOR.KVALK		AND
					(
						(
							( 
								U_OPLATA.KODOP = '43010' OR 
								U_OPLATA.KODOP = '43020' 
							)										AND
							U_OPLATA.DIRECTION				= '1'	AND				
							SUBSTRING( U_PS.N_PS, 20, 1 )	= '5'			
						)	
						OR
						(
							( 
								U_OPLATA.KODOP = '42010' OR 
								U_OPLATA.KODOP = '42020' 
							)										AND
							U_OPLATA.DIRECTION				= '2'	AND
							SUBSTRING( U_PS.N_PS, 20, 1 )	= '6'
						)
					)												AND
					U_OPLATA.D_REFER		<	@D_CALC				AND
					(
						--	Дата начальной задолженности не определена
						U_PS.F2_R62_G3_DATE	IS NULL		
						OR
						--	Дата начальной задолженности определена
						--	и не учитываются платежи раньше этой даты
						(
							U_PS.F2_R62_G3_DATE	IS	NOT	NULL			AND
							U_OPLATA.D_REFER	>=	U_PS.F2_R62_G3_DATE	
						)
					)													AND
					U_OPLATA.DEL_FLAG		IS	NULL		
			) 	AS	SUM_MINUS,

			--	----------------------------------------------------------------------------------
			--	Сумма изменения задолженности по основному долгу по иным основаниям (-) уменьшение
			--	----------------------------------------------------------------------------------
			(
				SELECT	ISNULL(	SUM(U_ISPOLNEN.SUMK), 0 )
				FROM	U_ISPOLNEN (NOLOCK)
				WHERE	U_ISPOLNEN.RESIDENT_ID	= U_PS.RESIDENT_ID	AND
						U_ISPOLNEN.PS_ID		= U_PS.PS_ID		AND
						U_ISPOLNEN.VALK			= U_DOGOVOR.KVALK	AND
						U_ISPOLNEN.KODZ 		>= '02'				AND
						U_ISPOLNEN.KODZ 		<= '12'				AND							
						U_ISPOLNEN.D_DOC		< @D_CALC			AND
						U_ISPOLNEN.DEL_FLAG		IS NULL				
			)	AS	SUM_IZM_MINUS,
			
			--	----------------------------------------------------------------------------------
			--	Сумма изменения задолженности по основному долгу по иным основаниям (+) увеличение
			--	----------------------------------------------------------------------------------
			(
				SELECT	ISNULL(	SUM(U_ISPOLNEN.SUMK), 0 )
				FROM	U_ISPOLNEN (NOLOCK)
				WHERE	U_ISPOLNEN.RESIDENT_ID	= U_PS.RESIDENT_ID	AND
						U_ISPOLNEN.PS_ID		= U_PS.PS_ID		AND
						U_ISPOLNEN.VALK			= U_DOGOVOR.KVALK	AND
						U_ISPOLNEN.KODZ 		= '13'				AND
						U_ISPOLNEN.D_DOC		< @D_CALC			AND
						U_ISPOLNEN.DEL_FLAG		IS NULL				
			)	AS	SUM_IZM_PLUS,
			
			--	-------------------------------------------------------------------
			--	Сумма возвратов резидентами нерезидентам ошибочно зачисленных сумм,
			--	связанных с изменением основного долга для типа '5'
			--
			--	Сумма возвратов нерезидентами резидентам ошибочно списанных сумм, 
			--	связанных с изменением основного долга  для типа '6'
			--	-------------------------------------------------------------------
			(
				SELECT	ISNULL(	SUM(U_OPLATA.SUMK), 0 )
				FROM	U_OPLATA (NOLOCK)
				WHERE	U_OPLATA.RESIDENT_ID 	= U_PS.RESIDENT_ID			AND
						U_OPLATA.PS_ID			= U_PS.PS_ID				AND
						U_OPLATA.VALK			= U_DOGOVOR.KVALK			AND
						(
							(
								U_OPLATA.KODOP 					= '99010'	AND		
								U_OPLATA.DIRECTION				= '2'		AND
								U_OPLATA.TYPE_99010				= '1'		AND
								SUBSTRING( U_PS.N_PS, 20, 1 )	= '5'
							)	
							OR
							(
								U_OPLATA.KODOP 					= '99010'	AND		
								U_OPLATA.DIRECTION				= '1'		AND			
								U_OPLATA.TYPE_99010				= '1'		AND
								SUBSTRING( U_PS.N_PS, 20, 1 )	= '6'
							)
						)													AND
						U_OPLATA.D_REFER		< @D_CALC					AND
						(
							--	Дата начальной задолженности не определена
							U_PS.F2_R62_G3_DATE	IS NULL		
							OR
							--	Дата начальной задолженности определена
							--	и не учитываются платежи раньше этой даты
							(
								U_PS.F2_R62_G3_DATE	IS	NOT	NULL			AND
								U_OPLATA.D_REFER	>=	U_PS.F2_R62_G3_DATE	
							)
						)													AND
						U_OPLATA.DEL_FLAG		IS NULL
			)	AS	SUM_PLUS_99010,

			--	--------------------------------------------------------------------------------
			--	Сумма возвратов нерезидентами резидентам ошибочно списанных сумм, связанных 
			--	с изменением основного долга для типа '5'
			--
			--	Сумма возвратов резидентами нерезидентам зачисленных сумм, связанных с 
			--	изменением основного долга для типа '6'
			--	--------------------------------------------------------------------------------
			(
				SELECT	ISNULL(	SUM(U_OPLATA.SUMK), 0 )
				FROM	U_OPLATA (NOLOCK)
				WHERE	U_OPLATA.RESIDENT_ID 	= U_PS.RESIDENT_ID			AND
						U_OPLATA.PS_ID			= U_PS.PS_ID				AND
						U_OPLATA.VALK			= U_DOGOVOR.KVALK			AND
						(
							(
								U_OPLATA.KODOP 					= '99010'	AND		
								U_OPLATA.DIRECTION				= '1'		AND			
								U_OPLATA.TYPE_99010				= '1'		AND
								SUBSTRING( U_PS.N_PS, 20, 1 )	= '5'
							)	
							OR
							(
								U_OPLATA.KODOP 					= '99010'	AND		
								U_OPLATA.DIRECTION				= '2'		AND			
								U_OPLATA.TYPE_99010				= '1'		AND
								SUBSTRING( U_PS.N_PS, 20, 1 )	= '6'
							)
						)													AND
						U_OPLATA.D_REFER		< @D_CALC					AND
						(
							--	Дата начальной задолженности не определена
							U_PS.F2_R62_G3_DATE	IS NULL		
							OR
							--	Дата начальной задолженности определена
							--	и не учитываются платежи раньше этой даты
							(
								U_PS.F2_R62_G3_DATE	IS	NOT	NULL			AND
								U_OPLATA.D_REFER	>=	U_PS.F2_R62_G3_DATE	
							)
						)													AND
						U_OPLATA.DEL_FLAG		IS	NULL		
			) 	AS	SUM_MINUS_99010,
			CASE
				WHEN	U_DOGOVOR.KVALK	= (SELECT MAX(D.KVALK) FROM U_DOGOVOR AS D (NOLOCK) WHERE D.RESIDENT_ID=U_PS.RESIDENT_ID AND D.DOG_ID = U_PS.DOG_ID AND D.DOG_NPP = U_PS.DOG_NPP)
				THEN	1
				ELSE	2
			END	AS	SORT_ORDER
	FROM	U_PS (NOLOCK)
	INNER	JOIN	 U_USERS_RESIDENTS (NOLOCK) ON 
			U_USERS_RESIDENTS.RESIDENT_ID	= U_PS.RESIDENT_ID		AND
			U_USERS_RESIDENTS.USER_ID		= @USER_ID
	INNER	JOIN 	U_RESIDENTS (NOLOCK)	ON	
			U_RESIDENTS.RESIDENT_ID			= U_PS.RESIDENT_ID		AND
			(
				@RESIDENT_ID = 0						OR
				U_RESIDENTS.RESIDENT_ID	= @RESIDENT_ID	
			)														AND
			U_RESIDENTS.DEL_FLAG 			IS NULL		
	INNER	JOIN	U_DOGOVOR (NOLOCK) ON
			U_DOGOVOR.RESIDENT_ID			=	U_PS.RESIDENT_ID	AND
			U_DOGOVOR.DOG_ID				=	U_PS.DOG_ID			AND
			U_DOGOVOR.DEL_FLAG				IS NULL
	WHERE	( 
				@BANK_ID						=	0			OR
				U_PS.BANK_ID					=	@BANK_ID
			)														AND
			( 
				@VID_KONTR						=	'0'			OR
				SUBSTRING( U_PS.N_PS, 20, 1 )	=	@VID_KONTR
			)														AND
			( SUBSTRING( U_PS.N_PS, 20, 1 ) = '5' OR SUBSTRING( U_PS.N_PS, 20, 1 ) =  '6' )	AND
			EXISTS	(
						SELECT	*
						FROM	U_DOGOVOR AS D (NOLOCK)
						WHERE	D.RESIDENT_ID			=	U_PS.RESIDENT_ID	AND
								D.DOG_ID				=	U_PS.DOG_ID			AND
								D.DOG_NPP				=	U_PS.DOG_NPP		AND
								D.DEL_FLAG				IS NULL					AND
								ISNULL( D.D_END, CONVERT(DATETIME, '30000606' ))	>= ISNULL(@D_END_BEG, CONVERT(DATETIME, '19000101'))	AND
								ISNULL( D.D_END, CONVERT(DATETIME, '30000606' ))	<= ISNULL(@D_END_END, CONVERT(DATETIME, '30000606'))
					)															AND
			U_PS.DEL_FLAG			IS NULL										AND
			( 
				@RESIDENT_ID		= 0					OR	
				( U_PS.RESIDENT_ID	= @RESIDENT_ID	AND @PS_ID = 0 )	OR 
				( U_PS.RESIDENT_ID	= @RESIDENT_ID	AND U_PS.PS_ID = @PS_ID  )
			)													AND
			(
				@FLAG_PEREOF	= 0
				OR
				(
					@FLAG_PEREOF	= 1	AND
					EXISTS 	(
								SELECT	*
								FROM	U_DOGOVOR AS D (NOLOCK)
								WHERE	D.RESIDENT_ID	= U_DOGOVOR.RESIDENT_ID	AND
										D.DOG_ID		= U_DOGOVOR.DOG_ID		AND
										D.KVALK			<> U_DOGOVOR.KVALK		AND
										D.DEL_FLAG		IS NULL
							)

				)
			)																						
	GROUP	BY U_PS.RESIDENT_ID, U_PS.PS_ID, U_RESIDENTS.NAMER, U_PS.N_PS, U_PS.D_CLOSE, U_PS.F2_R62_G1, U_PS.F2_R62_G2, U_PS.F2_R62_G3_DATE, U_PS.DOG_ID, U_PS.DOG_NPP, U_DOGOVOR.KVALK
	ORDER	BY U_RESIDENTS.NAMER, N_PS, SORT_ORDER 
GO

GRANT  EXECUTE  ON [dbo].[U_PS_LIST_ZADOL]  TO [OPERS], [AUDITS]
GO

--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[U_PS_LOAD]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[U_PS_LOAD]
GO

CREATE PROCEDURE [dbo].[U_PS_LOAD]
--	------------------------------------------------------------------------------------------------------------------------
--	Приём Паспорта сделки
--	(для версии АСВКБ 7.14 и ранее)
--	------------------------------------------------------------------------------------------------------------------------
--	Перед приёмом ПС выполняется приём Договора по информации из ПС.
--
--	Возвращает: 
--	1. RC 				
--	   RC =	0	- ПС был принят
--		9	- Договор не найден в БД	
--		10	- Ошибка при приёме ПС 
--		11	- ПС не найден в БД (приём-обновление)
--		12	- Невозможно изменить уполномоченный Банк ПС, так как есть платежи со ссылкой на данный ПС (приём-обновление)
--		13	- Невозможно изменить уполномоченный Банк ПС, так как есть валютные операции со ссылкой на данный ПС (приём-обновление)
--		14	- Невозможно изменить уполномоченный Банк ПС, так как есть подтверждающие документы со ссылкой на данный ПС (приём-обновление)
--		15	- Невозможно изменить уполномоченный Банк ПС, так как есть поступления валюты РФ со ссылкой на данный ПС (приём-обновление)
--		16	- Невозможно изменить Договор (контракт) - есть ПД по ПС с распределением на Платежи в рамках Договора (контракта) (приём-обновление)
--		17	- Невозможно изменить Договор (контракт) - есть Платежи по ПС с распределением на ПД в рамках Договора (контракта) (приём-обновление)
--		18	- Невозможно изменить Договор (контракт) - есть Платежи по ПС с распределением на Возвраты в рамках Договора (контракта) (приём-обновление)
--		19	- Невозможно изменить Договор (контракт) - есть Возвраты по ПС с распределением на Платежи в рамках Договора (контракта) (приём-обновление)
--		20  - Ошибка при вычислении идентификатора ПС (приём-добавление)
--		30	- Дублирование номера ПС
--		40	- Код валюты Договора отсутствует в справочнике (старое)
--		50	- Ошибка добавления уполномоченного лица Участника ВЭД
--		60	- Ошибка добавления уполномоченного лица Банка 
--		70	- Буквенный код валюты, входящий в код ставки "ЛИБОР" отсутствует в справочнике 
--		75	- Буквенный код валюты, входящий в код ставки "ЛИБОР" не соответствует коду валюты цены договора 
--		80	- Код ставки "ЛИБОР" отсутствует в справочнике 
--		85	- Контракт с указанными номером и датой уже используется в другом ПС для данного Участника ВЭД и Иностранного контрагента 
--		90	- Код вида работ, услуг, передачи информации, результатов интеллектуальной деятельности операций неторгового характера отсутствует в справочнике (старое)
--		91	- Код страны Иностранного контрагента отсутствует в справочнике (старое)
--		92	- Ошибка при вычислении идентификатора Иностранного контрагента (старое)
--		93	- Ошибка при добавлении Иностранного контрагента (старое)
--		100	- Ошибка при регистрации события
-- 		340	- Код валюты цены кредитного договора (пункт 6.2 графа 1) отсутствует в справочнике
-- 		440	- Неверный символ в пункте 6.5 (форма 2)
-- 		450	- Неверный символ в пункте 6.6 (форма 2)
-- 		460	- Для типа кредитного договора "5" - не проставляется отметка о принадлежности
--			  иностранного кредитора к международной финансовой организации
-- 		470	- Для типа кредитного договора "6" - допускается только одна отметка 
--			  о принадлежности иностранного кредитора к международной финансовой организации
-- 		480	- Для типа кредитного договора "6" - должна быть отметка 
--			  о принадлежности иностранного кредитора к международной финансовой организации
-- 		500	- Дата подписи ПС 1-ым лицом от Клиента Банка больше текущей даты
-- 		510	- Дата подписи ПС 2-ым лицом от Клиента Банка больше текущей даты
-- 		520	- Дата подписи ПС лицом от Банка больше текущей даты
--		1010	- Ошибка при изменении информации Договора (обновление Договора при приёме ПС)
--		1011	- Договор не найден в БД (обновление Договора при приёме ПС)
--		1012	- Ошибка при изменении информации о Договоре в ПС (обновление Договора при приёме ПС)
--		1030	- Дублирование Договора (обновление Договора при приёме ПС)
--		1040	- Код валюты цены Договора отсутствует в справочнике (обновление Договора при приёме ПС)
--		1050	- Вид Договора отсутствует в справочнике (обновление Договора при приёме ПС)
-- 		1090	- Код вида работ, услуг, передачи информации, результатов интеллектуальной деятельности, операций неторгового характера отсутствует в справочнике (обновление Договора при приёме ПС)
--		1100	- Ошибка при регистрации события (обновление Договора при приёме ПС)
-- 		1140	- Не указан вид Договора (обновление Договора при приёме ПС)
-- 		1150	- Не указан Иностранный контрагент (обновление Договора при приёме ПС)
-- 		1160	- Не указан номер Договора (обновление Договора при приёме ПС)
-- 		1170	- Не указана дата Договора (обновление Договора при приёме ПС)
-- 		1180	- Не указан код валюты цены Договора (обновление Договора при приёме ПС)
--		1350	- Код срока погашения (раздел 3 графа 10 форма 2) отсутствует в справочнике (обновление Договора при приёме ПС)
-- 		1400	- Неверный символ в разделе 3 графа 8 (форма 1) (обновление Договора при приёме ПС)
-- 		1410	- Неверный символ в разделе 3 графа 9 (форма 1) (обновление Договора при приёме ПС)
-- 		1420	- Неверный символ в разделе 3 графа 10 (форма 1) (обновление Договора при приёме ПС)
-- 		1430	- Неверный символ в разделе 3 графа 9 (форма 2) (обновление Договора при приёме ПС)
-- 		1540	- Дата Договора больше текущей даты (обновление Договора при приёме ПС)
-- 		1550	- Дата окончания исполнения обязательств меньше даты подписания Договора (обновление Договора при приёме ПС)
--		2010	- Ошибка при добавлении Договора (добавление Договора при приёме ПС)
--		2020 	- Ошибка при вычислении идентификатора Договора (добавление Договора при приёме ПС)
--		2030	- Дублирование Договора (добавление Договора при приёме ПС)
--		2040	- Код валюты Договора отсутствует в справочнике (добавление Договора при приёме ПС)
--		2050	- Вид Договора отсутствует в справочнике (добавление Договора при приёме ПС)
-- 		2090	- Код вида работ, услуг, передачи информации, результатов интеллектуальной деятельности, операций неторгового характера отсутствует в справочнике (добавление Договора при приёме ПС)
--		2100	- Ошибка при регистрации событиям (добавление Договора при приёме ПС)
-- 		2140	- Не указан вид Договора (добавление Договора при приёме ПС)
-- 		2150	- Не указан Иностранный контрагент (добавление Договора при приёме ПС)
-- 		2160	- Не указан номер Договора (добавление Договора при приёме ПС)
-- 		2170	- Не указана дата Договора (добавление Договора при приёме ПС)
-- 		2180	- Не указан код валюты цены Договора (добавление Договора при приёме ПС)
-- 		2350	- Код срока погашения (раздел 3 графа 10 форма 2) отсутствует в справочнике (добавление Договора при приёме ПС)
-- 		2400	- Неверный символ в разделе 3 графа 8 (форма 1) (добавление Договора при приёме ПС)
-- 		2410	- Неверный символ в разделе 3 графа 9 (форма 1) (добавление Договора при приёме ПС)
-- 		2420	- Неверный символ в разделе 3 графа 10 (форма 1) (добавление Договора при приёме ПС)
-- 		2430	- Неверный символ в разделе 3 графа 9 (форма 2) (добавление Договора при приёме ПС)
-- 		2540	- Дата Договора больше текущей даты (добавление Договора при приёме ПС)
-- 		2550	- Дата окончания исполнения обязательств меньше даты подписания Договора (добавление Договора при приёме ПС)
--
--	2.FLAG_LOAD = 	1 - приём-добавление,
--					2 - приём-обновление,
--	------------------------------------------------------------------------------------------------------------------------
--	(Модификация	в версии 2.1.0)
--	------------------------------------------------------------------------------------------------------------------------
(
	@RESIDENT_ID		AS INTEGER,
	@BANK_ID			AS INTEGER,
	@DOG_ID				AS INTEGER			= NULL,
	@DOG_NPP			AS INTEGER			= NULL,
	@IN_PART__NAMEP		AS VARCHAR (300)	= NULL,
	@IN_PART__KODS		AS CHAR (3)			= NULL,
	@IN_PART__INN		AS VARCHAR (12)		= NULL,
	@IN_PART__ADRES		AS VARCHAR (300)	= NULL,
	@IN_PART__TYPE		AS CHAR (1)			= NULL,
	@UNI_ID				AS UNIQUEIDENTIFIER,
	@N_PS				AS CHAR (22), 
	@D_PS				AS SMALLDATETIME,
	@N_KONTR			AS VARCHAR (100), 
	@D_KONTR			AS SMALLDATETIME,  
	@N_DOPSOGL			AS VARCHAR (100)	= NULL, 
	@D_DOPSOGL			AS SMALLDATETIME	= NULL,  
	@KVALK				AS CHAR (3)			= NULL, 
	@SUMK				AS DECIMAL (16, 2)	= NULL, 
	@D_END				AS DATETIME			= NULL,  
	@R3_G7				AS DECIMAL (16, 2)	= NULL, 
	@F1_R3_G8			AS CHAR (1)			= NULL, 
	@F1_R3_G9			AS CHAR (1)			= NULL,
	@F1_R3_G10			AS CHAR (1)			= NULL,
	@F1_R61_USL			AS VARCHAR (3000),
	@F1_R62_SROK		AS CHAR (4),
	@F1_R63_D_LIST2 	AS SMALLDATETIME,
	@F2_R3_G8			AS DECIMAL (16, 2)	= NULL,
	@F2_R3_G9			AS CHAR (1)			= NULL, 
	@F2_R3_G10			AS CHAR (1)			= NULL, 
	@N_PS_OLD			AS VARCHAR (100), 
	@N_PS_DR			AS CHAR (22), 
	@D_PS_MOD			AS SMALLDATETIME,  
	@N_PS_MOD			AS INTEGER	,  
	@D_CLOSE			AS SMALLDATETIME,  
	@O_CLOSE			AS VARCHAR (50), 
	@F2_R61_G1			AS VARCHAR (250), 
	@F2_R61_G2			AS CHAR  (6), 
	@F2_R61_G3			AS VARCHAR (250), 
	@F2_R61_G4			AS VARCHAR (250), 
	@F2_R62_G1			AS CHAR (3), 
	@F2_R62_G2			AS DECIMAL (16, 2), 
	@F2_R63_USL			AS VARCHAR (500), 
	@F2_R64_USL			AS VARCHAR (500), 
	@F2_R65_MFK			AS CHAR (1), 
	@F2_R65_EBRR		AS CHAR (1), 
	@F2_R65_MB			AS CHAR (1), 
	@F2_R65_DMFO		AS CHAR (1), 
	@F2_R65_KRED		AS CHAR (1), 
	@F2_R66_INVEST		AS CHAR (1), 
	@F2_R67_SUM			AS DECIMAL (16, 2), 
	@FIO_UPOLNOMR1		AS VARCHAR (100),
	@DOL_UPOLNOMR1		AS VARCHAR (100),
	@D_UPOLNOMR1		AS SMALLDATETIME,  
	@FIO_UPOLNOMR2		AS VARCHAR (100),
	@DOL_UPOLNOMR2		AS VARCHAR (100),
	@D_UPOLNOMR2		AS SMALLDATETIME,  
	@FIO_UPOLNOMB		AS VARCHAR (100),
	@DOL_UPOLNOMB		AS VARCHAR (100),
	@D_UPOLNOMB			AS SMALLDATETIME,  
	@USER_ID			AS VARCHAR (30),
	@PRIM				AS VARCHAR (500),
	@NAMER 				AS VARCHAR (300),
  	@INN 				AS VARCHAR(12),
  	@KPP 				AS CHAR (9),
  	@OGRN  				AS VARCHAR(15),
  	@DGR  				AS SMALLDATETIME,
  	@SUB  				AS VARCHAR (50),
  	@REGION  			AS VARCHAR (50),
  	@CITY  				AS VARCHAR (50),
  	@PUNKT  			AS VARCHAR (50),
	@STREET  			AS VARCHAR (250),
  	@HOUSE  			AS VARCHAR (50),
  	@KORPUS  			AS VARCHAR (50),
  	@OFFICE  			AS VARCHAR (50),
  	@VID_USLUG  		AS VARCHAR (7)		= NULL,
	@D_PRED				AS SMALLDATETIME	= NULL,  
	@D_PRED_PEREOF		AS SMALLDATETIME	= NULL,  
	@DOG_ID_BANK		AS INTEGER 			= NULL,
	@DOG_NPP_BANK		AS INTEGER 			= NULL,
	@FLAG_LOAD			AS INTEGER OUTPUT,
  	@RC					AS INTEGER OUTPUT
)
 AS

	SET NOCOUNT ON
	--
	--	Рабочие переменные
	--
	DECLARE	@FLAG_FIND_DOG	AS INTEGER,
			@RC1			AS INTEGER,
			@RC2			AS INTEGER,
			@PS_ID_OLD		AS INTEGER,
			@PARTNER_ID_OLD	AS INTEGER,
			@D_TODAY		AS SMALLDATETIME,
			-- заголовок Договора
			@VID_KONTR		AS CHAR (1), 
			-- поля для перезаписи при приёме-обновлении
			@D_BEGIN		AS SMALLDATETIME,  
			@KOD_CONTROL  	AS VARCHAR (4),
			@PARTNER_ID2	AS INTEGER,
			@PRIM_DOG		AS VARCHAR (2000),
			@PRIM_PREDMET	AS VARCHAR (200),
			@PRIM_FIO_OTV	AS VARCHAR (100)
		

	--
	--	Начальные значения
	--
	SELECT	@FLAG_LOAD		= 1
	SELECT	@D_TODAY		= CONVERT(SMALLDATETIME,GETDATE())
	SELECT	@FLAG_FIND_DOG	= 0
	SELECT	@RC1			= 0
	SELECT	@RC2			= 0
	SELECT	@PS_ID_OLD		= NULL
	SELECT	@PARTNER_ID_OLD	= NULL
	-- заголовок Договора
	SELECT	@VID_KONTR		= NULL
	-- поля для перезаписи при приёме-обновлении Договора
	SELECT	@D_BEGIN		= NULL
	SELECT	@KOD_CONTROL	= NULL
	SELECT	@PRIM_DOG		= NULL
	SELECT	@PRIM_PREDMET	= NULL
	SELECT	@PRIM_FIO_OTV	= NULL
	
	--
	--	1. Поиск ПС по UNI_ID
	--
	SELECT	@PS_ID_OLD	= PS_ID
	FROM	U_PS (NOLOCK)
	WHERE	RESIDENT_ID	= @RESIDENT_ID	AND
			UNI_ID		= @UNI_ID		AND
			DEL_FLAG	IS NULL 
			
	IF @PS_ID_OLD IS NOT NULL
	-- ПС найден по UNI_ID -> приём-обновление
		SELECT	@FLAG_LOAD = 2
	ELSE
	BEGIN
		--
		--	2. Поиск ПС по Номеру ПС
		--
		SELECT	@PS_ID_OLD	= PS_ID
		FROM	U_PS (NOLOCK)
		WHERE	RESIDENT_ID	= @RESIDENT_ID	AND
				BANK_ID		= @BANK_ID		AND
				N_PS		= @N_PS			AND
				DEL_FLAG	IS NULL 
	
		IF @PS_ID_OLD IS NOT NULL
		-- ПС найден по Номеру ПС -> приём-обновление
			SELECT	@FLAG_LOAD = 2
	END	


	--
	--	Поиск Иностранного контрагента по переданным реквизитам
	--	
	SELECT	@PARTNER_ID_OLD				= PARTNER_ID 	
	FROM	U_IN_PART (NOLOCK)
	WHERE	KODS						= @IN_PART__KODS												AND
			UPPER(LTRIM(RTRIM(NAMEP)))	= UPPER(LTRIM(RTRIM(@IN_PART__NAMEP)))							AND
			ISNULL(INN, '')				= ISNULL(@IN_PART__INN, '')										AND
			UPPER(LTRIM(RTRIM(ISNULL(ADRES, ''))))	= UPPER(LTRIM(RTRIM(ISNULL(@IN_PART__ADRES, ''))))	AND
			ISNULL(TYPE, '')			= ISNULL(@IN_PART__TYPE, '')									AND
			DEL_FLAG					IS NULL
	
	IF ISNULL(@PARTNER_ID_OLD, 0) = 0 
	-- Иностранный контрагент не найден - будем добалять
	BEGIN
		--
		--	Проверка кода страны
		--
		IF NOT EXISTS	(	SELECT	*
							FROM	OKSMT (NOLOCK)
							WHERE	KOD	=  @IN_PART__KODS	
						)
			BEGIN
				SELECT	@RC		= 91
				GOTO	EXIT_PS_LOAD
			END
	
		--
		--	Определяем ID Иностранного контрагента
		--
		SELECT	@PARTNER_ID_OLD = MAX(PARTNER_ID) + 1
		FROM	U_IN_PART (NOLOCK)
			
		IF	@@ERROR <> 0
			BEGIN	
				SELECT	@RC		= 92
				GOTO	EXIT_PS_LOAD
			END
	
		SELECT	@PARTNER_ID_OLD	= ISNULL(@PARTNER_ID_OLD, 1)
	
		--	
		--	Добавляем новую запись об Иностранном контрагенте
		--
		INSERT	INTO	U_IN_PART  	
				( PARTNER_ID, NAMEP,  KODS, INN, ADRES, TYPE, DEL_FLAG )
		VALUES
				( @PARTNER_ID_OLD, @IN_PART__NAMEP, @IN_PART__KODS, @IN_PART__INN, @IN_PART__ADRES, @IN_PART__TYPE, NULL )
	
		IF	@@ERROR <> 0
			BEGIN	
				SELECT	@RC		= 93
				GOTO	EXIT_PS_LOAD
			END
	END	-- добавления Иностранного контрагента


	------------------------------------------------------------------------------------------------------------------------
	-- При приёме-обновлении ПС будем предварительно обновлять Договор по ПС по полученному ключу DOG_ID и DOG_NPP
	-- При приёме-добавлении ПС будем предварительно добавлять Договор по ПС для получения ключа DOG_ID и DOG_NPP
	------------------------------------------------------------------------------------------------------------------------
	-- Определяем тип контракта из номера ПС
	SELECT	@VID_KONTR	= SUBSTRING(@N_PS, 20, 1) 

	-- Если @N_KONTR = @N_DOPSOGL -> обнуляем @N_DOPSOGL и @D_DOPSOGL, считаем, что это первая запись о Договоре (это НЕ доп.соглашение)
	--IF	UPPER(LTRIM(RTRIM(@N_KONTR)))	= UPPER(LTRIM(RTRIM(@N_DOPSOGL)))
	--	BEGIN
	--		SELECT	@N_DOPSOGL	= NULL
	--		SELECT	@D_DOPSOGL	= NULL
	--	END

	--
	--	Поиск Договора по UNI_ID
	--
	SELECT	@DOG_ID			= DOG_ID,
			@DOG_NPP		= DOG_NPP,
			@D_BEGIN		= D_BEGIN,
			@VID_USLUG		= VID_USLUG,
			@KOD_CONTROL	= KOD_CONTROL,
			@PARTNER_ID2	= PARTNER_ID2,
			@PRIM_DOG		= PRIM,
			@PRIM_PREDMET	= PRIM_PREDMET,
			@PRIM_FIO_OTV	= PRIM_FIO_OTV
	FROM	U_DOGOVOR (NOLOCK)	
	WHERE	RESIDENT_ID	= @RESIDENT_ID	AND
			UNI_ID		= @UNI_ID		AND
			DEL_FLAG	IS NULL
	IF	@DOG_ID	IS NOT NULL
		--	Договор найден по UNI_ID -> Обновление Договора
		SELECT	@FLAG_FIND_DOG	= 1
	
	ELSE
		BEGIN
		--	Договор не найден по UNI_ID -> Поиск Договора по ключевым реквизитам 
			SELECT	@DOG_ID			= DOG_ID,
					@DOG_NPP		= DOG_NPP,
					@D_BEGIN		= D_BEGIN,
					@VID_USLUG		= VID_USLUG,
					@KOD_CONTROL	= KOD_CONTROL,
					@PARTNER_ID2	= PARTNER_ID2,
					@PRIM_DOG		= PRIM,
					@PRIM_PREDMET	= PRIM_PREDMET,
					@PRIM_FIO_OTV	= PRIM_FIO_OTV
			FROM	U_DOGOVOR (NOLOCK)
			WHERE	RESIDENT_ID		= @RESIDENT_ID																						AND
					PARTNER_ID		= @PARTNER_ID_OLD																					AND
					VID_KONTR		= @VID_KONTR																						AND
					N_KONTR			= @N_KONTR																							AND
					D_KONTR			= @D_KONTR																							AND
					ISNULL(N_DOPSOGL, '')	= ISNULL(@N_DOPSOGL, '')																	AND
					ISNULL(D_DOPSOGL, CONVERT(SMALLDATETIME, '19370101'))	= ISNULL(@D_DOPSOGL, CONVERT(SMALLDATETIME, '19370101'))	AND
					KVALK					= @KVALK																					AND
					SUMK					= @SUMK																						AND
					ISNULL(D_END, CONVERT(DATETIME, '19370101')) 		= ISNULL(@D_END, CONVERT(DATETIME, '19370101'))					AND
					ISNULL(R3_G7, 0)		= ISNULL(@R3_G7, 0)																			AND
					ISNULL(F1_R3_G8, '')	= ISNULL(@F1_R3_G8, '')																		AND
					ISNULL(F1_R3_G9, '')	= ISNULL(@F1_R3_G9, '')																		AND
					ISNULL(F1_R3_G10, '')	= ISNULL(@F1_R3_G10, '')																	AND
					ISNULL(F2_R3_G8, 0)		= ISNULL(@F2_R3_G8, 0)																		AND
					ISNULL(F2_R3_G9, '')	= ISNULL(@F2_R3_G9, '')																		AND
					ISNULL(F2_R3_G10, '')	= ISNULL(@F2_R3_G10, '')																	AND
					DEL_FLAG				IS NULL 																					AND
					UNI_ID					IS NULL
			IF	@DOG_ID IS NOT NULL
				-- Договор найден по ключевым реквизитам -> Обновление Договора
				SELECT	@FLAG_FIND_DOG	= 1
			
		END --@ELSE DOG_ID IS NOT NULL Договор не найден по UNI_ID
	
	IF	@FLAG_FIND_DOG = 0
		BEGIN
		--
		--	Добавление Договора
		--
			EXECUTE U_DOGOVOR_INSERT
					@RESIDENT_ID	= @RESIDENT_ID,
					@VID_KONTR		= @VID_KONTR,
					@PARTNER_ID		= @PARTNER_ID_OLD,
					@N_KONTR		= @N_KONTR, 
					@D_KONTR		= @D_KONTR,
					@N_DOPSOGL		= @N_DOPSOGL, 
					@D_DOPSOGL		= @D_DOPSOGL,
					@KVALK			= @KVALK, 
					@SUMK			= @SUMK,  
					@D_END			= @D_END,  
					@R3_G7			= @R3_G7,  
					@F1_R3_G8		= @F1_R3_G8,  
					@F1_R3_G9		= @F1_R3_G9,  
					@F1_R3_G10		= @F1_R3_G10,  
					@F2_R3_G8		= @F2_R3_G8,  
					@F2_R3_G9		= @F2_R3_G9,  
					@F2_R3_G10		= @F2_R3_G10,  
					@D_BEGIN		= @D_BEGIN,  
					@VID_USLUG  	= @VID_USLUG,
					@KOD_CONTROL  	= @KOD_CONTROL,
					@PARTNER_ID2	= @PARTNER_ID2,
					@PRIM			= @PRIM_DOG,
					@PRIM_PREDMET	= @PRIM_PREDMET,
					@PRIM_FIO_OTV	= @PRIM_FIO_OTV,
					@BANK_ID		= @BANK_ID,
					@USER_ID		= 'SYSTEM',
					@UNI_ID			= @UNI_ID,
					@D_LOAD			= @D_TODAY,
					@SRC_LOAD		= 'АСВКБ',
					@DOG_ID			= @DOG_ID OUTPUT,
					@DOG_NPP		= @DOG_NPP OUTPUT, 
					@RC				= @RC2 OUTPUT 
	
			IF	NOT ( @RC2 = 0 AND @DOG_ID > 0 AND @DOG_NPP > 0)	
				BEGIN
					SELECT	@RC = @RC2 + 2000
					GOTO	EXIT_PS_LOAD
				END
		END	--Добавление Договора
	ELSE	--@FLAG_FIND_DOG = 0
		BEGIN
		--
		--	Обновление Договора 
		--
			EXECUTE U_DOGOVOR_UPDATE
					@RESIDENT_ID	= @RESIDENT_ID,
					@DOG_ID			= @DOG_ID,
					@DOG_NPP		= @DOG_NPP,
					@VID_KONTR		= @VID_KONTR,
					@PARTNER_ID		= @PARTNER_ID_OLD,
					@N_KONTR		= @N_KONTR, 
					@D_KONTR		= @D_KONTR,
					@N_DOPSOGL		= @N_DOPSOGL, 
					@D_DOPSOGL		= @D_DOPSOGL,
					@KVALK			= @KVALK, 
					@SUMK			= @SUMK,  
					@D_END			= @D_END, 
					@R3_G7			= @R3_G7,  
					@F1_R3_G8		= @F1_R3_G8, 
					@F1_R3_G9		= @F1_R3_G9, 
					@F1_R3_G10		= @F1_R3_G10, 
					@F2_R3_G8		= @F2_R3_G8, 
					@F2_R3_G9		= @F2_R3_G9, 
					@F2_R3_G10		= @F2_R3_G10,
					@D_BEGIN		= @D_BEGIN,  
					@VID_USLUG  	= @VID_USLUG,
					@KOD_CONTROL  	= @KOD_CONTROL,
					@PARTNER_ID2	= @PARTNER_ID2,
					@PRIM			= @PRIM_DOG,
					@PRIM_PREDMET	= @PRIM_PREDMET,
					@PRIM_FIO_OTV	= @PRIM_FIO_OTV,
					@BANK_ID		= @BANK_ID,
		 			@USER_ID		= 'SYSTEM',
					@UNI_ID			= @UNI_ID,
					@D_LOAD			= @D_TODAY,
					@SRC_LOAD		= 'АСВКБ',
					@RC				= @RC1 OUTPUT 

			IF	@RC1 > 0					
				BEGIN
					SELECT	@RC = @RC1 + 1000
					GOTO	EXIT_PS_LOAD
				END	
		END	--Обновление Договора 


	IF	@FLAG_LOAD = 2 
	-- приём-обновление
	BEGIN
		--
		--	Обновление ПС 
		--
		SELECT	@N_KONTR	= ISNULL(@N_DOPSOGL, @N_KONTR)

		EXECUTE U_PS_UPDATE
				@RESIDENT_ID	= @RESIDENT_ID,
				@PS_ID			= @PS_ID_OLD,
				@BANK_ID		= @BANK_ID,
				@DOG_ID			= @DOG_ID,
				@DOG_NPP		= @DOG_NPP,
				@PARTNER_ID		= @PARTNER_ID_OLD,
				@N_PS			= @N_PS, 
				@D_PS			= @D_PS,
				@N_KONTR		= @N_KONTR, 
				@D_KONTR		= @D_KONTR,  
				@KVALK			= @KVALK, 
				@SUMK			= @SUMK, 
				@D_END			= @D_END,  
				@R3_G7			= @R3_G7, 
				@F1_R3_G8		= @F1_R3_G8, 
				@F1_R3_G9		= @F1_R3_G9,
				@F1_R3_G10		= @F1_R3_G10,
				@F1_R61_USL		= @F1_R61_USL,
				@F1_R62_SROK	= @F1_R62_SROK,
				@F1_R63_D_LIST2 = @F1_R63_D_LIST2,
				@F2_R3_G8		= @F2_R3_G8,
				@F2_R3_G9		= @F2_R3_G9, 
				@F2_R3_G10		= @F2_R3_G10, 
				@N_PS_OLD		= @N_PS_OLD, 
				@N_PS_DR		= @N_PS_DR, 
				@D_PS_MOD		= @D_PS_MOD,  
				@N_PS_MOD		= @N_PS_MOD,  
				@D_CLOSE		= @D_CLOSE,  
				@O_CLOSE		= @O_CLOSE, 
				@F2_R61_G1		= @F2_R61_G1, 
				@F2_R61_G2		= @F2_R61_G2, 
				@F2_R61_G3		= @F2_R61_G3, 
				@F2_R61_G4		= @F2_R61_G4, 
				@F2_R62_G1		= @F2_R62_G1, 
				@F2_R62_G2		= @F2_R62_G2, 
				@F2_R63_USL		= @F2_R63_USL, 
				@F2_R64_USL		= @F2_R64_USL, 
				@F2_R65_MFK		= @F2_R65_MFK, 
				@F2_R65_EBRR	= @F2_R65_EBRR, 
				@F2_R65_MB		= @F2_R65_MB, 
				@F2_R65_DMFO	= @F2_R65_DMFO, 
				@F2_R65_KRED	= @F2_R65_KRED, 
				@F2_R66_INVEST	= @F2_R66_INVEST, 
				@F2_R67_SUM		= @F2_R67_SUM, 
				@FIO_UPOLNOMR1	= @FIO_UPOLNOMR1,
				@DOL_UPOLNOMR1	= @DOL_UPOLNOMR1,
				@D_UPOLNOMR1	= @D_UPOLNOMR1, 
				@FIO_UPOLNOMR2	= @FIO_UPOLNOMR2,
				@DOL_UPOLNOMR2	= @DOL_UPOLNOMR2,
				@D_UPOLNOMR2	= @D_UPOLNOMR2, 
				@FIO_UPOLNOMB	= @FIO_UPOLNOMB,
				@DOL_UPOLNOMB	= @DOL_UPOLNOMB,
				@D_UPOLNOMB		= @D_UPOLNOMB, 
				@USER_ID		= 'SYSTEM',
				@PRIM			= @PRIM,
				@NAMER 			= @NAMER,
				@INN 			= @INN,
				@KPP 			= @KPP,
				@OGRN  			= @OGRN,
				@DGR  			= @DGR,
				@SUB  			= @SUB,
				@REGION  		= @REGION,
				@CITY  			= @CITY,
				@PUNKT  		= @PUNKT,
				@STREET  		= @STREET,
				@HOUSE  		= @HOUSE,
				@KORPUS  		= @KORPUS,
				@OFFICE  		= @OFFICE,
				@VID_USLUG		= @VID_USLUG,
				@PRIZ_PROJECT	= NULL, 
				@UNI_ID			= @UNI_ID,
				@D_LOAD			= @D_TODAY,
				@SRC_LOAD		= 'АСВКБ',
				@D_PRED			= @D_PRED,
				@D_PRED_PEREOF	= @D_PRED_PEREOF,
				@RC				= @RC1 OUTPUT 
		IF	@RC1 > 0					
			BEGIN
				SELECT	@RC = @RC1
				GOTO	EXIT_PS_LOAD
			END	
	END

	IF	@FLAG_LOAD = 1 
	-- приём-добавление
	BEGIN
		--
		--	Добавление ПС 
		--
		SELECT	@N_KONTR	= ISNULL(@N_DOPSOGL, @N_KONTR)

		EXECUTE U_PS_INSERT
				@RESIDENT_ID	= @RESIDENT_ID,
				@BANK_ID		= @BANK_ID,
				@DOG_ID			= @DOG_ID,
				@DOG_NPP		= @DOG_NPP,
				@PARTNER_ID		= @PARTNER_ID_OLD,
				@N_PS			= @N_PS, 
				@D_PS			= @D_PS,
				@N_KONTR		= @N_KONTR, 
				@D_KONTR		= @D_KONTR,  
				@KVALK			= @KVALK, 
				@SUMK			= @SUMK, 
				@D_END			= @D_END,  
				@R3_G7			= @R3_G7, 
				@F1_R3_G8		= @F1_R3_G8, 
				@F1_R3_G9		= @F1_R3_G9,
				@F1_R3_G10		= @F1_R3_G10,
				@F1_R61_USL		= @F1_R61_USL,
				@F1_R62_SROK	= @F1_R62_SROK,
				@F1_R63_D_LIST2 = @F1_R63_D_LIST2,
				@F2_R3_G8		= @F2_R3_G8,
				@F2_R3_G9		= @F2_R3_G9, 
				@F2_R3_G10		= @F2_R3_G10, 
				@N_PS_OLD		= @N_PS_OLD, 
				@N_PS_DR		= @N_PS_DR, 
				@D_PS_MOD		= @D_PS_MOD,  
				@N_PS_MOD		= @N_PS_MOD,  
				@D_CLOSE		= @D_CLOSE,  
				@O_CLOSE		= @O_CLOSE, 
				@F2_R61_G1		= @F2_R61_G1, 
				@F2_R61_G2		= @F2_R61_G2, 
				@F2_R61_G3		= @F2_R61_G3, 
				@F2_R61_G4		= @F2_R61_G4, 
				@F2_R62_G1		= @F2_R62_G1, 
				@F2_R62_G2		= @F2_R62_G2, 
				@F2_R63_USL		= @F2_R63_USL, 
				@F2_R64_USL		= @F2_R64_USL, 
				@F2_R65_MFK		= @F2_R65_MFK, 
				@F2_R65_EBRR	= @F2_R65_EBRR, 
				@F2_R65_MB		= @F2_R65_MB, 
				@F2_R65_DMFO	= @F2_R65_DMFO, 
				@F2_R65_KRED	= @F2_R65_KRED, 
				@F2_R66_INVEST	= @F2_R66_INVEST, 
				@F2_R67_SUM		= @F2_R67_SUM, 
				@FIO_UPOLNOMR1	= @FIO_UPOLNOMR1,
				@DOL_UPOLNOMR1	= @DOL_UPOLNOMR1,
				@D_UPOLNOMR1	= @D_UPOLNOMR1,  
				@FIO_UPOLNOMR2	= @FIO_UPOLNOMR2,
				@DOL_UPOLNOMR2	= @DOL_UPOLNOMR2,
				@D_UPOLNOMR2	= @D_UPOLNOMR2,  
				@FIO_UPOLNOMB	= @FIO_UPOLNOMB,
				@DOL_UPOLNOMB	= @DOL_UPOLNOMB,
				@D_UPOLNOMB		= @D_UPOLNOMB,  
				@USER_ID		= 'SYSTEM',
				@PRIM			= @PRIM,
				@NAMER 			= @NAMER,
	  			@INN 			= @INN,
				@KPP 			= @KPP,
				@OGRN  			= @OGRN,
	  			@DGR  			= @DGR,
	  			@SUB  			= @SUB,
	  			@REGION  		= @REGION,
	  			@CITY  			= @CITY,
	  			@PUNKT  		= @PUNKT,
				@STREET  		= @STREET,
	  			@HOUSE  		= @HOUSE,
	  			@KORPUS  		= @KORPUS,
	  			@OFFICE  		= @OFFICE,
	  			@VID_USLUG  	= @VID_USLUG,
				@PRIZ_PROJECT	= NULL,
				@UNI_ID			= @UNI_ID,
				@D_LOAD			= @D_TODAY,  
				@SRC_LOAD		= 'АСВКБ',
				@D_PRED			= @D_PRED,
				@D_PRED_PEREOF	= @D_PRED_PEREOF,
				@PS_ID			= @RC1 OUTPUT,
				@RC				= @RC2 OUTPUT 
		IF	NOT ( @RC2 = 0 AND @RC1 > 0 )	
			BEGIN
				SELECT	@RC = @RC2
				GOTO	EXIT_PS_LOAD
			END
	END		

--
--	Возврат кода завершения и признака приёма ПС
--
EXIT_PS_LOAD:
	SELECT	RC = @RC, FLAG_LOAD = @FLAG_LOAD
GO

GRANT  EXECUTE  ON [dbo].[U_PS_LOAD]  TO [OPERS]
GO

--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[U_PS_LOAD_800]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[U_PS_LOAD_800]
GO

CREATE PROCEDURE [dbo].[U_PS_LOAD_800]
--	------------------------------------------------------------------------------------------------------------------------
--	Приём Паспорта сделки
--	(для версии АСВКБ 8.0.0 и более поздних)
--	------------------------------------------------------------------------------------------------------------------------
--
--	Возвращает: 
--	1. RC 				
--	   RC =	0	- ПС был принят
--		8	- Договор, на который ссылается ПС, не найден в БД 
--		9	- Договор не найден в БД	
--		10	- Ошибка при приёме ПС 
--		11	- ПС не найден в БД (приём-обновление)
--		12	- Невозможно изменить уполномоченный Банк ПС, так как есть платежи со ссылкой на данный ПС (приём-обновление)
--		13	- Невозможно изменить уполномоченный Банк ПС, так как есть валютные операции со ссылкой на данный ПС (приём-обновление)
--		14	- Невозможно изменить уполномоченный Банк ПС, так как есть подтверждающие документы со ссылкой на данный ПС (приём-обновление)
--		15	- Невозможно изменить уполномоченный Банк ПС, так как есть поступления валюты РФ со ссылкой на данный ПС (приём-обновление)
--		16	- Невозможно изменить Договор (контракт) - есть ПД по ПС с распределением на Платежи в рамках Договора (контракта) (приём-обновление)
--		17	- Невозможно изменить Договор (контракт) - есть Платежи по ПС с распределением на ПД в рамках Договора (контракта) (приём-обновление)
--		18	- Невозможно изменить Договор (контракт) - есть Платежи по ПС с распределением на Возвраты в рамках Договора (контракта) (приём-обновление)
--		19	- Невозможно изменить Договор (контракт) - есть Возвраты по ПС с распределением на Платежи в рамках Договора (контракта) (приём-обновление)
--		20  - Ошибка при вычислении идентификатора ПС (приём-добавление)
--		30	- Дублирование номера ПС
--		50	- Ошибка добавления уполномоченного лица Участника ВЭД
--		60	- Ошибка добавления уполномоченного лица Банка 
--		70	- Буквенный код валюты, входящий в код ставки "ЛИБОР", отсутствует в справочнике 
--		75	- Буквенный код валюты, входящий в код ставки "ЛИБОР", не соответствует коду валюты цены договора 
--		80	- Код ставки "ЛИБОР" отсутствует в справочнике 
--		85	- Договор с указанными номером и датой уже используется в другом действующем ПС для данного Участника ВЭД и Иностранного контрагента
--		100	- Ошибка при регистрации события
-- 		340	- Код валюты цены кредитного договора (пункт 6.2 графа 1) отсутствует в справочнике
-- 		440	- Неверный символ в пункте 6.5 (форма 2)
-- 		450	- Неверный символ в пункте 6.6 (форма 2)
-- 		460	- Для типа кредитного договора "5" - не проставляется отметка о принадлежности
--			  иностранного кредитора к международной финансовой организации
-- 		470	- Для типа кредитного договора "6" - допускается только одна отметка 
--			  о принадлежности иностранного кредитора к международной финансовой организации
-- 		480	- Для типа кредитного договора "6" - должна быть отметка 
--			  о принадлежности иностранного кредитора к международной финансовой организации
-- 		500	- Дата подписи ПС 1-ым лицом от Участника ВЭД больше текущей даты
-- 		510	- Дата подписи ПС 2-ым лицом от Участника ВЭД больше текущей даты
-- 		520	- Дата подписи ПС лицом от Банка больше текущей даты
--		560	- Дата, на которую указывается начальная задолженность по основному долгу, больше текущей даты
--
--	2.FLAG_LOAD = 	1 - приём-добавление,
--					2 - приём-обновление
--	------------------------------------------------------------------------------------------------------------------------
--	(Модификация	в версии 2.1.0)
--	------------------------------------------------------------------------------------------------------------------------
(
	@RESIDENT_ID		AS INTEGER,
	@BANK_ID			AS INTEGER,
	@UNI_ID				AS UNIQUEIDENTIFIER,
	@DOG_ID_BANK		AS INTEGER,
	@DOG_NPP_BANK		AS INTEGER,
	@N_PS				AS CHAR (22), 
	@D_PS				AS SMALLDATETIME,
	@F1_R61_USL			AS VARCHAR (3000),
	@F1_R62_SROK		AS CHAR (4),
	@F1_R63_D_LIST2 	AS SMALLDATETIME,
	@N_PS_OLD			AS VARCHAR (100), 
	@N_PS_DR			AS CHAR (22), 
	@D_PS_MOD			AS SMALLDATETIME,  
	@N_PS_MOD			AS INTEGER	,  
	@D_CLOSE			AS SMALLDATETIME,  
	@O_CLOSE			AS VARCHAR (50), 
	@F2_R61_G1			AS VARCHAR (250), 
	@F2_R61_G2			AS CHAR  (6), 
	@F2_R61_G3			AS VARCHAR (250), 
	@F2_R61_G4			AS VARCHAR (250), 
	@F2_R62_G1			AS CHAR (3), 
	@F2_R62_G2			AS DECIMAL (16, 2), 
	@F2_R62_G3_DATE		AS SMALLDATETIME, 
	@F2_R63_USL			AS VARCHAR (500), 
	@F2_R64_USL			AS VARCHAR (500), 
	@F2_R65_MFK			AS CHAR (1), 
	@F2_R65_EBRR		AS CHAR (1), 
	@F2_R65_MB			AS CHAR (1), 
	@F2_R65_DMFO		AS CHAR (1), 
	@F2_R65_KRED		AS CHAR (1), 
	@F2_R66_INVEST		AS CHAR (1), 
	@F2_R67_SUM			AS DECIMAL (16, 2), 
	@FIO_UPOLNOMR1		AS VARCHAR (100),
	@DOL_UPOLNOMR1		AS VARCHAR (100),
	@D_UPOLNOMR1		AS SMALLDATETIME,  
	@FIO_UPOLNOMR2		AS VARCHAR (100),
	@DOL_UPOLNOMR2		AS VARCHAR (100),
	@D_UPOLNOMR2		AS SMALLDATETIME,  
	@FIO_UPOLNOMB		AS VARCHAR (100),
	@DOL_UPOLNOMB		AS VARCHAR (100),
	@D_UPOLNOMB			AS SMALLDATETIME,  
	@USER_ID			AS VARCHAR (30),
	@PRIM				AS VARCHAR (500),
	@NAMER 				AS VARCHAR (300),
  	@INN 				AS VARCHAR(12),
  	@KPP 				AS CHAR (9),
  	@OGRN  				AS VARCHAR(15),
  	@DGR  				AS SMALLDATETIME,
  	@SUB  				AS VARCHAR (50),
  	@REGION  			AS VARCHAR (50),
  	@CITY  				AS VARCHAR (50),
  	@PUNKT  			AS VARCHAR (50),
	@STREET  			AS VARCHAR (250),
  	@HOUSE  			AS VARCHAR (50),
  	@KORPUS  			AS VARCHAR (50),
  	@OFFICE  			AS VARCHAR (50),
  	@D_PRED				AS SMALLDATETIME,  
	@D_PRED_PEREOF		AS SMALLDATETIME,  
	@FLAG_LOAD			AS INTEGER OUTPUT,
  	@RC					AS INTEGER OUTPUT
)
 AS

	SET NOCOUNT ON
	--
	--	Рабочие переменные
	--
	DECLARE	@FLAG_FIND_DOG	AS INTEGER,
			@RC1			AS INTEGER,
			@RC2			AS INTEGER,
			@PS_ID_OLD		AS INTEGER,
			@DOG_ID_OLD		AS INTEGER,
			@DOG_NPP_OLD	AS INTEGER,
			@D_TODAY		AS SMALLDATETIME
					
	--
	--	Начальные значения
	--
	SELECT	@FLAG_LOAD		= 1
	SELECT	@D_TODAY		= CONVERT(SMALLDATETIME,GETDATE())
	SELECT	@FLAG_FIND_DOG	= 0
	SELECT	@RC1			= 0
	SELECT	@RC2			= 0
	SELECT	@PS_ID_OLD		= NULL
	SELECT	@DOG_ID_OLD		= NULL
	SELECT	@DOG_NPP_OLD	= NULL
	
	
	--
	--	0. Поиск Договора по банковским идентификаторам (при приёме Договора всегда сохраняем банковский ключ Договора = @BANK_ID+@DOG_ID_BANK+@DOG_NPP_BANK)
	--	
	SELECT	@DOG_ID_OLD		= DOG_ID,
			@DOG_NPP_OLD	= DOG_NPP
	FROM	U_DOGOVOR (NOLOCK)
	WHERE	RESIDENT_ID		= @RESIDENT_ID	AND
			BANK_ID			= @BANK_ID		AND
			DOG_ID_BANK		= @DOG_ID_BANK	AND
			DOG_NPP_BANK	= @DOG_NPP_BANK	AND
			DEL_FLAG		IS NULL
	IF	@DOG_ID_OLD	IS NULL
			BEGIN
				SELECT	@RC		= 8
				GOTO	EXIT_PS_LOAD
			END

	--
	--	1. Поиск ПС по UNI_ID
	--
	SELECT	@PS_ID_OLD	= PS_ID
	FROM	U_PS (NOLOCK)
	WHERE	RESIDENT_ID	= @RESIDENT_ID	AND
			UNI_ID		= @UNI_ID		AND
			DEL_FLAG	IS NULL 
			
	IF @PS_ID_OLD IS NOT NULL
	-- ПС найден по UNI_ID -> приём-обновление
		SELECT	@FLAG_LOAD = 2
	ELSE
	BEGIN
		--
		--	2. Поиск ПС по Номеру ПС
		--
		SELECT	@PS_ID_OLD	= PS_ID
		FROM	U_PS (NOLOCK)
		WHERE	RESIDENT_ID	= @RESIDENT_ID	AND
				BANK_ID		= @BANK_ID		AND
				N_PS		= @N_PS			AND
				DEL_FLAG	IS NULL 
	
		IF @PS_ID_OLD IS NOT NULL
		-- ПС найден по Номеру ПС -> приём-обновление
			SELECT	@FLAG_LOAD = 2
	END	


	IF	@FLAG_LOAD = 2 
	-- приём-обновление
	BEGIN
		--
		--	Обновление ПС 
		--
		EXECUTE U_PS_UPDATE
				@RESIDENT_ID	= @RESIDENT_ID,
				@PS_ID			= @PS_ID_OLD,
				@BANK_ID		= @BANK_ID,
				@DOG_ID			= @DOG_ID_OLD,
				@DOG_NPP		= @DOG_NPP_OLD,
				@N_PS			= @N_PS, 
				@D_PS			= @D_PS,
				@F1_R61_USL		= @F1_R61_USL,
				@F1_R62_SROK	= @F1_R62_SROK,
				@F1_R63_D_LIST2 = @F1_R63_D_LIST2,
				@N_PS_OLD		= @N_PS_OLD, 
				@N_PS_DR		= @N_PS_DR, 
				@D_PS_MOD		= @D_PS_MOD,  
				@N_PS_MOD		= @N_PS_MOD,  
				@D_CLOSE		= @D_CLOSE,  
				@O_CLOSE		= @O_CLOSE, 
				@F2_R61_G1		= @F2_R61_G1, 
				@F2_R61_G2		= @F2_R61_G2, 
				@F2_R61_G3		= @F2_R61_G3, 
				@F2_R61_G4		= @F2_R61_G4, 
				@F2_R62_G1		= @F2_R62_G1, 
				@F2_R62_G2		= @F2_R62_G2, 
				@F2_R62_G3_DATE	= @F2_R62_G3_DATE, 
				@F2_R63_USL		= @F2_R63_USL, 
				@F2_R64_USL		= @F2_R64_USL, 
				@F2_R65_MFK		= @F2_R65_MFK, 
				@F2_R65_EBRR	= @F2_R65_EBRR, 
				@F2_R65_MB		= @F2_R65_MB, 
				@F2_R65_DMFO	= @F2_R65_DMFO, 
				@F2_R65_KRED	= @F2_R65_KRED, 
				@F2_R66_INVEST	= @F2_R66_INVEST, 
				@F2_R67_SUM		= @F2_R67_SUM, 
				@FIO_UPOLNOMR1	= @FIO_UPOLNOMR1,
				@DOL_UPOLNOMR1	= @DOL_UPOLNOMR1,
				@D_UPOLNOMR1	= @D_UPOLNOMR1, 
				@FIO_UPOLNOMR2	= @FIO_UPOLNOMR2,
				@DOL_UPOLNOMR2	= @DOL_UPOLNOMR2,
				@D_UPOLNOMR2	= @D_UPOLNOMR2, 
				@FIO_UPOLNOMB	= @FIO_UPOLNOMB,
				@DOL_UPOLNOMB	= @DOL_UPOLNOMB,
				@D_UPOLNOMB		= @D_UPOLNOMB, 
				@USER_ID		= 'SYSTEM',
				@PRIM			= @PRIM,
				@NAMER 			= @NAMER,
				@INN 			= @INN,
				@KPP 			= @KPP,
				@OGRN  			= @OGRN,
				@DGR  			= @DGR,
				@SUB  			= @SUB,
				@REGION  		= @REGION,
				@CITY  			= @CITY,
				@PUNKT  		= @PUNKT,
				@STREET  		= @STREET,
				@HOUSE  		= @HOUSE,
				@KORPUS  		= @KORPUS,
				@OFFICE  		= @OFFICE,
				@PRIZ_PROJECT	= NULL, 
				@UNI_ID			= @UNI_ID,
				@D_LOAD			= @D_TODAY,
				@SRC_LOAD		= 'АСВКБ',
				@D_PRED			= @D_PRED,
				@D_PRED_PEREOF	= @D_PRED_PEREOF,
				@DOG_ID_BANK	= @DOG_ID_BANK,
				@DOG_NPP_BANK	= @DOG_NPP_BANK,
				@RC				= @RC1 OUTPUT 
		IF	@RC1 > 0					
			BEGIN
				SELECT	@RC = @RC1
				GOTO	EXIT_PS_LOAD
			END	
	END

	IF	@FLAG_LOAD = 1 
	-- приём-добавление
	BEGIN
		--
		--	Добавление ПС 
		--
		EXECUTE U_PS_INSERT
				@RESIDENT_ID	= @RESIDENT_ID,
				@BANK_ID		= @BANK_ID,
				@DOG_ID			= @DOG_ID_OLD,
				@DOG_NPP		= @DOG_NPP_OLD,
				@N_PS			= @N_PS, 
				@D_PS			= @D_PS,
				@F1_R61_USL		= @F1_R61_USL,
				@F1_R62_SROK	= @F1_R62_SROK,
				@F1_R63_D_LIST2 = @F1_R63_D_LIST2,
				@N_PS_OLD		= @N_PS_OLD, 
				@N_PS_DR		= @N_PS_DR, 
				@D_PS_MOD		= @D_PS_MOD,  
				@N_PS_MOD		= @N_PS_MOD,  
				@D_CLOSE		= @D_CLOSE,  
				@O_CLOSE		= @O_CLOSE, 
				@F2_R61_G1		= @F2_R61_G1, 
				@F2_R61_G2		= @F2_R61_G2, 
				@F2_R61_G3		= @F2_R61_G3, 
				@F2_R61_G4		= @F2_R61_G4, 
				@F2_R62_G1		= @F2_R62_G1, 
				@F2_R62_G2		= @F2_R62_G2, 
				@F2_R62_G3_DATE	= @F2_R62_G3_DATE, 
				@F2_R63_USL		= @F2_R63_USL, 
				@F2_R64_USL		= @F2_R64_USL, 
				@F2_R65_MFK		= @F2_R65_MFK, 
				@F2_R65_EBRR	= @F2_R65_EBRR, 
				@F2_R65_MB		= @F2_R65_MB, 
				@F2_R65_DMFO	= @F2_R65_DMFO, 
				@F2_R65_KRED	= @F2_R65_KRED, 
				@F2_R66_INVEST	= @F2_R66_INVEST, 
				@F2_R67_SUM		= @F2_R67_SUM, 
				@FIO_UPOLNOMR1	= @FIO_UPOLNOMR1,
				@DOL_UPOLNOMR1	= @DOL_UPOLNOMR1,
				@D_UPOLNOMR1	= @D_UPOLNOMR1,  
				@FIO_UPOLNOMR2	= @FIO_UPOLNOMR2,
				@DOL_UPOLNOMR2	= @DOL_UPOLNOMR2,
				@D_UPOLNOMR2	= @D_UPOLNOMR2,  
				@FIO_UPOLNOMB	= @FIO_UPOLNOMB,
				@DOL_UPOLNOMB	= @DOL_UPOLNOMB,
				@D_UPOLNOMB		= @D_UPOLNOMB,  
				@USER_ID		= 'SYSTEM',
				@PRIM			= @PRIM,
				@NAMER 			= @NAMER,
	  			@INN 			= @INN,
				@KPP 			= @KPP,
				@OGRN  			= @OGRN,
	  			@DGR  			= @DGR,
	  			@SUB  			= @SUB,
	  			@REGION  		= @REGION,
	  			@CITY  			= @CITY,
	  			@PUNKT  		= @PUNKT,
				@STREET  		= @STREET,
	  			@HOUSE  		= @HOUSE,
	  			@KORPUS  		= @KORPUS,
	  			@OFFICE  		= @OFFICE,
	  			@PRIZ_PROJECT	= NULL,
				@UNI_ID			= @UNI_ID,
				@D_LOAD			= @D_TODAY,  
				@SRC_LOAD		= 'АСВКБ',
				@D_PRED			= @D_PRED,
				@D_PRED_PEREOF	= @D_PRED_PEREOF,
				@DOG_ID_BANK	= @DOG_ID_BANK,
				@DOG_NPP_BANK	= @DOG_NPP_BANK,
				@PS_ID			= @RC1 OUTPUT,
				@RC				= @RC2 OUTPUT 
		IF	NOT ( @RC2 = 0 AND @RC1 > 0 )	
			BEGIN
				SELECT	@RC = @RC2
				GOTO	EXIT_PS_LOAD
			END
	END		

--
--	Возврат кода завершения и признака приёма ПС
--
EXIT_PS_LOAD:
	SELECT	RC = @RC, FLAG_LOAD = @FLAG_LOAD
GO

GRANT  EXECUTE  ON [dbo].[U_PS_LOAD_800]  TO [OPERS]
GO

--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[U_PS_LOAD_XML_CB]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[U_PS_LOAD_XML_CB]
GO

CREATE PROCEDURE [dbo].[U_PS_LOAD_XML_CB]
--	------------------------------------------------------------------------------------------------------------------------
--	Загрузка Паспорта сделки из XML-файла формата ЦБ РФ
--	------------------------------------------------------------------------------------------------------------------------
--
--	Возвращает: 
--	1. RC 				
--	   RC =	0	- нормальное завершение
--		8	- Договор, на который ссылается ПС, не найден в БД 
--		9	- Договор не найден в БД	
--		10	- Ошибка при загрузке ПС 
--		11	- ПС не найден в БД (загрузка-обновление)
--		12	- Невозможно изменить уполномоченный Банк ПС, так как есть платежи со ссылкой на данный ПС (загрузка-обновление)
--		13	- Невозможно изменить уполномоченный Банк ПС, так как есть валютные операции со ссылкой на данный ПС (загрузка-обновление)
--		14	- Невозможно изменить уполномоченный Банк ПС, так как есть подтверждающие документы со ссылкой на данный ПС (загрузка-обновление)
--		15	- Невозможно изменить уполномоченный Банк ПС, так как есть поступления валюты РФ со ссылкой на данный ПС (загрузка-обновление)
--		16	- Невозможно изменить Договор (контракт) - есть ПД по ПС с распределением на Платежи в рамках Договора (контракта) (загрузка-обновление)
--		17	- Невозможно изменить Договор (контракт) - есть Платежи по ПС с распределением на ПД в рамках Договора (контракта) (загрузка-обновление)
--		18	- Невозможно изменить Договор (контракт) - есть Платежи по ПС с распределением на Возвраты в рамках Договора (контракта) (загрузка-обновление)
--		19	- Невозможно изменить Договор (контракт) - есть Возвраты по ПС с распределением на Платежи в рамках Договора (контракта) (загрузка-обновление)
--		20  - Ошибка при вычислении идентификатора ПС (загрузка-добавление)
--		30	- Дублирование номера ПС
--		50	- Ошибка добавления уполномоченного лица Участника ВЭД
--		60	- Ошибка добавления уполномоченного лица Банка 
--		70	- Буквенный код валюты, входящий в код ставки "ЛИБОР", отсутствует в справочнике 
--		75	- Буквенный код валюты, входящий в код ставки "ЛИБОР", не соответствует коду валюты цены договора 
--		80	- Код ставки "ЛИБОР" отсутствует в справочнике 
--		85	- Договор с указанными номером и датой уже используется в другом действующем ПС для данного Участника ВЭД и Иностранного контрагента
--		100	- Ошибка при регистрации события
-- 		340	- Код валюты цены кредитного договора (пункт 6.2 графа 1) отсутствует в справочнике
-- 		440	- Неверный символ в пункте 6.5 (форма 2)
-- 		450	- Неверный символ в пункте 6.6 (форма 2)
-- 		460	- Для типа кредитного договора "5" - не проставляется отметка о принадлежности
--			  иностранного кредитора к международной финансовой организации
-- 		470	- Для типа кредитного договора "6" - допускается только одна отметка 
--			  о принадлежности иностранного кредитора к международной финансовой организации
-- 		480	- Для типа кредитного договора "6" - должна быть отметка 
--			  о принадлежности иностранного кредитора к международной финансовой организации
-- 		500	- Дата подписи ПС 1-ым лицом от Участника ВЭД больше текущей даты
-- 		510	- Дата подписи ПС 2-ым лицом от Участника ВЭД больше текущей даты
-- 		520	- Дата подписи ПС лицом от Банка больше текущей даты
--		560	- Дата, на которую указывается начальная задолженность по основному долгу, больше текущей даты
--
--	2.FLAG_LOAD = 	1 - загрузка-добавление,
--					2 - загрузка-обновление
--	------------------------------------------------------------------------------------------------------------------------
--	(Создание	в версии 2.1.0)
--	------------------------------------------------------------------------------------------------------------------------
(
	@RESIDENT_ID		AS INTEGER,
	@BANK_ID			AS INTEGER,
	@DOG_ID				AS INTEGER,
	@DOG_NPP			AS INTEGER,
	@N_PS				AS CHAR (22), 
	@D_PS				AS SMALLDATETIME,
	@F1_R61_USL			AS VARCHAR (3000),
	@F1_R62_SROK		AS CHAR (4),
	@F1_R63_D_LIST2 	AS SMALLDATETIME,
	@N_PS_OLD			AS VARCHAR (100), 
	@N_PS_DR			AS CHAR (22), 
	@D_PS_MOD			AS SMALLDATETIME,  
	@N_PS_MOD			AS INTEGER	,  
	@D_CLOSE			AS SMALLDATETIME,  
	@O_CLOSE			AS VARCHAR (50), 
	@F2_R61_G1			AS VARCHAR (250), 
	@F2_R61_G2			AS CHAR  (6), 
	@F2_R61_G3			AS VARCHAR (250), 
	@F2_R61_G4			AS VARCHAR (250), 
	@F2_R62_G1			AS CHAR (3), 
	@F2_R62_G2			AS DECIMAL (16, 2), 
	@F2_R62_G3_DATE		AS SMALLDATETIME, 
	@F2_R63_USL			AS VARCHAR (500), 
	@F2_R64_USL			AS VARCHAR (500), 
	@F2_R65_MFK			AS CHAR (1), 
	@F2_R65_EBRR		AS CHAR (1), 
	@F2_R65_MB			AS CHAR (1), 
	@F2_R65_DMFO		AS CHAR (1), 
	@F2_R65_KRED		AS CHAR (1), 
	@F2_R66_INVEST		AS CHAR (1), 
	@F2_R67_SUM			AS DECIMAL (16, 2), 
	@USER_ID			AS VARCHAR (30),
	@NAMER 				AS VARCHAR (300),
  	@INN 				AS VARCHAR(12),
  	@KPP 				AS CHAR (9),
  	@OGRN  				AS VARCHAR(15),
  	@DGR  				AS SMALLDATETIME,
  	@SUB  				AS VARCHAR (50),
  	@REGION  			AS VARCHAR (50),
  	@CITY  				AS VARCHAR (50),
  	@PUNKT  			AS VARCHAR (50),
	@STREET  			AS VARCHAR (250),
  	@HOUSE  			AS VARCHAR (50),
  	@KORPUS  			AS VARCHAR (50),
  	@OFFICE  			AS VARCHAR (50),
  	@PRIZ_VBK			AS INTEGER,
	@PS_ID				AS INTEGER OUTPUT,
	@FLAG_LOAD			AS INTEGER OUTPUT,
  	@RC					AS INTEGER OUTPUT
)
 AS

	SET NOCOUNT ON
	--
	--	Рабочие переменные
	--
	DECLARE	@RC1			AS INTEGER,
			@RC2			AS INTEGER,
			@D_TODAY		AS SMALLDATETIME

	--
	--	Переменные для перезаписи полей при загрузке-обновлении
	--
	DECLARE	@PRIM				AS VARCHAR (500),
			@D_PRED				AS SMALLDATETIME,  
			@D_PRED_PEREOF		AS SMALLDATETIME,  
			@FIO_UPOLNOMR1 		AS VARCHAR(100),
			@DOL_UPOLNOMR1 		AS VARCHAR(100),
			@D_UPOLNOMR1		AS SMALLDATETIME,  
			@FIO_UPOLNOMR2 		AS VARCHAR(100),
			@DOL_UPOLNOMR2 		AS VARCHAR(100),
			@D_UPOLNOMR2		AS SMALLDATETIME,
			@FIO_UPOLNOMB 		AS VARCHAR(100),
			@DOL_UPOLNOMB 		AS VARCHAR(100),
			@D_UPOLNOMB			AS SMALLDATETIME
					
	--
	--	Начальные значения
	--
	SELECT	@FLAG_LOAD		= 1
	SELECT	@D_TODAY		= CONVERT(SMALLDATETIME,GETDATE())
	SELECT	@RC				= 0
	SELECT	@RC1			= 0
	SELECT	@RC2			= 0
		
	--
	--	1. Определяем режим загрузки ПС по PS_ID (если передан на вход)
	--
	IF	@PS_ID > 0 
		BEGIN
			--	ключ передан -> загрузка-обновление
			SELECT	@FLAG_LOAD = 2
	
			-- Запоминаем некоторые поля (12) из ПС, отсутствующие в XML-файлах ПС и ВБК формата ЦБ РФ
			SELECT	@PRIM			= U_PS.PRIM,
					@D_PRED			= U_PS.D_PRED,  
					@D_PRED_PEREOF	= U_PS.D_PRED_PEREOF,  
					@FIO_UPOLNOMR1 	= U_UR1.FIO,
					@DOL_UPOLNOMR1 	= U_UR1.DOL,
					@D_UPOLNOMR1	= U_PS.D_UPOLNOMR1,  
					@FIO_UPOLNOMR2 	= U_UR2.FIO,
					@DOL_UPOLNOMR2	= U_UR2.DOL,
					@D_UPOLNOMR2	= U_PS.D_UPOLNOMR2,  
					@FIO_UPOLNOMB 	= U_UPOLNOMB.FIO,
					@DOL_UPOLNOMB 	= U_UPOLNOMB.DOL,
					@D_UPOLNOMB		= U_PS.D_UPOLNOMB
			FROM	U_PS (NOLOCK)
			LEFT	OUTER JOIN U_UPOLNOMR AS U_UR1 (NOLOCK) ON
					U_UR1.RESIDENT_ID	= U_PS.RESIDENT_ID	AND
					U_UR1.UPOLNOMR_ID	= U_PS.UPOLNOMR_ID1	AND
					U_UR1.DEL_FLAG		IS NULL
			LEFT	OUTER JOIN U_UPOLNOMR AS U_UR2 (NOLOCK) ON
					U_UR2.RESIDENT_ID	= U_PS.RESIDENT_ID	AND
					U_UR2.UPOLNOMR_ID	= U_PS.UPOLNOMR_ID2	AND
					U_UR2.DEL_FLAG		IS NULL
			LEFT	OUTER JOIN U_UPOLNOMB (NOLOCK)  ON
					U_UPOLNOMB.BANK_ID		= U_PS.BANK_ID		AND
					U_UPOLNOMB.UPOLNOMB_ID	= U_PS.UPOLNOMB_ID	AND
					U_UPOLNOMB.DEL_FLAG		IS NULL
			WHERE	U_PS.RESIDENT_ID	= @RESIDENT_ID	AND
					U_PS.PS_ID			= @PS_ID		AND
					U_PS.DEL_FLAG		IS NULL

			-- При загрузке-обновлении из XML-файла ВБК спасаем существующие значения по ПС(8+16):
			-- Дата ПС
			-- Дата и номер переоформления ПС
			-- Дата и основание закрытия ПС
			-- 3 поля по Листу 2 ПС (контракты)
			-- грядка полей (16) по ПС (кредиты)
			IF	@PRIZ_VBK = 1
				SELECT	@D_PS			= D_PS,
						@D_PS_MOD		= D_PS_MOD,
						@N_PS_MOD		= N_PS_MOD,
						@D_CLOSE		= D_CLOSE,
						@O_CLOSE		= O_CLOSE,

						@F1_R61_USL		= F1_R61_USL,
						@F1_R62_SROK	= F1_R62_SROK,
						@F1_R63_D_LIST2 = F1_R63_D_LIST2,

						@F2_R61_G1		= F2_R61_G1, 
						@F2_R61_G2		= F2_R61_G2, 
						@F2_R61_G3		= F2_R61_G3, 
						@F2_R61_G4		= F2_R61_G4, 
						@F2_R62_G1		= F2_R62_G1, 
						@F2_R62_G2		= F2_R62_G2, 
						@F2_R62_G3_DATE	= F2_R62_G3_DATE, 
						@F2_R63_USL		= F2_R63_USL, 
						@F2_R64_USL		= F2_R64_USL, 
						@F2_R65_MFK		= F2_R65_MFK, 
						@F2_R65_EBRR	= F2_R65_EBRR, 
						@F2_R65_MB		= F2_R65_MB, 
						@F2_R65_DMFO	= F2_R65_DMFO, 
						@F2_R65_KRED	= F2_R65_KRED, 
						@F2_R66_INVEST	= F2_R66_INVEST, 
						@F2_R67_SUM		= @F2_R67_SUM 
				FROM	U_PS (NOLOCK)
				WHERE	RESIDENT_ID		= @RESIDENT_ID	AND
						PS_ID			= @PS_ID		AND
						DEL_FLAG		IS NULL
 		END


	IF	@FLAG_LOAD = 2 
	-- загрузка-обновление
	BEGIN
		--
		--	Обновление ПС 
		--
		EXECUTE U_PS_UPDATE
				@RESIDENT_ID	= @RESIDENT_ID,
				@PS_ID			= @PS_ID,
				@BANK_ID		= @BANK_ID,
				@DOG_ID			= @DOG_ID,
				@DOG_NPP		= @DOG_NPP,
				@N_PS			= @N_PS, 
				@D_PS			= @D_PS,
				@F1_R61_USL		= @F1_R61_USL,
				@F1_R62_SROK	= @F1_R62_SROK,
				@F1_R63_D_LIST2 = @F1_R63_D_LIST2,
				@N_PS_OLD		= @N_PS_OLD, 
				@N_PS_DR		= @N_PS_DR, 
				@D_PS_MOD		= @D_PS_MOD,  
				@N_PS_MOD		= @N_PS_MOD,  
				@D_CLOSE		= @D_CLOSE,  
				@O_CLOSE		= @O_CLOSE, 
				@F2_R61_G1		= @F2_R61_G1, 
				@F2_R61_G2		= @F2_R61_G2, 
				@F2_R61_G3		= @F2_R61_G3, 
				@F2_R61_G4		= @F2_R61_G4, 
				@F2_R62_G1		= @F2_R62_G1, 
				@F2_R62_G2		= @F2_R62_G2, 
				@F2_R62_G3_DATE	= @F2_R62_G3_DATE, 
				@F2_R63_USL		= @F2_R63_USL, 
				@F2_R64_USL		= @F2_R64_USL, 
				@F2_R65_MFK		= @F2_R65_MFK, 
				@F2_R65_EBRR	= @F2_R65_EBRR, 
				@F2_R65_MB		= @F2_R65_MB, 
				@F2_R65_DMFO	= @F2_R65_DMFO, 
				@F2_R65_KRED	= @F2_R65_KRED, 
				@F2_R66_INVEST	= @F2_R66_INVEST, 
				@F2_R67_SUM		= @F2_R67_SUM, 
				@FIO_UPOLNOMR1	= @FIO_UPOLNOMR1,
				@DOL_UPOLNOMR1	= @DOL_UPOLNOMR1,
				@D_UPOLNOMR1	= @D_UPOLNOMR1, 
				@FIO_UPOLNOMR2	= @FIO_UPOLNOMR2,
				@DOL_UPOLNOMR2	= @DOL_UPOLNOMR2,
				@D_UPOLNOMR2	= @D_UPOLNOMR2, 
				@FIO_UPOLNOMB	= @FIO_UPOLNOMB,
				@DOL_UPOLNOMB	= @DOL_UPOLNOMB,
				@D_UPOLNOMB		= @D_UPOLNOMB, 
				@USER_ID		= 'SYSTEM',
				@PRIM			= @PRIM,
				@NAMER 			= @NAMER,
				@INN 			= @INN,
				@KPP 			= @KPP,
				@OGRN  			= @OGRN,
				@DGR  			= @DGR,
				@SUB  			= @SUB,
				@REGION  		= @REGION,
				@CITY  			= @CITY,
				@PUNKT  		= @PUNKT,
				@STREET  		= @STREET,
				@HOUSE  		= @HOUSE,
				@KORPUS  		= @KORPUS,
				@OFFICE  		= @OFFICE,
				@PRIZ_PROJECT	= NULL, 
				@D_LOAD			= @D_TODAY,
				@SRC_LOAD		= 'Формат ЦБ РФ',
				@D_PRED			= @D_PRED,
				@D_PRED_PEREOF	= @D_PRED_PEREOF,
				@RC				= @RC1 OUTPUT 
		IF	@RC1 > 0					
			BEGIN
				SELECT	@RC = @RC1
				GOTO	EXIT_PS_LOAD_XML_CB
			END	
	END

	IF	@FLAG_LOAD = 1 
	-- загрузка-добавление
	BEGIN
		--
		--	Добавление ПС 
		--
		EXECUTE U_PS_INSERT
				@RESIDENT_ID	= @RESIDENT_ID,
				@BANK_ID		= @BANK_ID,
				@DOG_ID			= @DOG_ID,
				@DOG_NPP		= @DOG_NPP,
				@N_PS			= @N_PS, 
				@D_PS			= @D_PS,
				@F1_R61_USL		= @F1_R61_USL,
				@F1_R62_SROK	= @F1_R62_SROK,
				@F1_R63_D_LIST2 = @F1_R63_D_LIST2,
				@N_PS_OLD		= @N_PS_OLD, 
				@N_PS_DR		= @N_PS_DR, 
				@D_PS_MOD		= @D_PS_MOD,  
				@N_PS_MOD		= @N_PS_MOD,  
				@D_CLOSE		= @D_CLOSE,  
				@O_CLOSE		= @O_CLOSE, 
				@F2_R61_G1		= @F2_R61_G1, 
				@F2_R61_G2		= @F2_R61_G2, 
				@F2_R61_G3		= @F2_R61_G3, 
				@F2_R61_G4		= @F2_R61_G4, 
				@F2_R62_G1		= @F2_R62_G1, 
				@F2_R62_G2		= @F2_R62_G2, 
				@F2_R62_G3_DATE	= @F2_R62_G3_DATE, 
				@F2_R63_USL		= @F2_R63_USL, 
				@F2_R64_USL		= @F2_R64_USL, 
				@F2_R65_MFK		= @F2_R65_MFK, 
				@F2_R65_EBRR	= @F2_R65_EBRR, 
				@F2_R65_MB		= @F2_R65_MB, 
				@F2_R65_DMFO	= @F2_R65_DMFO, 
				@F2_R65_KRED	= @F2_R65_KRED, 
				@F2_R66_INVEST	= @F2_R66_INVEST, 
				@F2_R67_SUM		= @F2_R67_SUM, 
				@FIO_UPOLNOMR1	= @FIO_UPOLNOMR1,
				@DOL_UPOLNOMR1	= @DOL_UPOLNOMR1,
				@D_UPOLNOMR1	= @D_UPOLNOMR1,  
				@FIO_UPOLNOMR2	= @FIO_UPOLNOMR2,
				@DOL_UPOLNOMR2	= @DOL_UPOLNOMR2,
				@D_UPOLNOMR2	= @D_UPOLNOMR2,  
				@FIO_UPOLNOMB	= @FIO_UPOLNOMB,
				@DOL_UPOLNOMB	= @DOL_UPOLNOMB,
				@D_UPOLNOMB		= @D_UPOLNOMB,  
				@USER_ID		= 'SYSTEM',
				@PRIM			= @PRIM,
				@NAMER 			= @NAMER,
	  			@INN 			= @INN,
				@KPP 			= @KPP,
				@OGRN  			= @OGRN,
	  			@DGR  			= @DGR,
	  			@SUB  			= @SUB,
	  			@REGION  		= @REGION,
	  			@CITY  			= @CITY,
	  			@PUNKT  		= @PUNKT,
				@STREET  		= @STREET,
	  			@HOUSE  		= @HOUSE,
	  			@KORPUS  		= @KORPUS,
	  			@OFFICE  		= @OFFICE,
	  			@PRIZ_PROJECT	= NULL,
				@D_LOAD			= @D_TODAY,  
				@SRC_LOAD		= 'Формат ЦБ РФ',
				@D_PRED			= @D_PRED,
				@D_PRED_PEREOF	= @D_PRED_PEREOF,
				@PS_ID			= @RC1 OUTPUT,
				@RC				= @RC2 OUTPUT 
		IF	NOT ( @RC2 = 0 AND @RC1 > 0 )	
			BEGIN
				SELECT	@RC = @RC2
				GOTO	EXIT_PS_LOAD_XML_CB
			END
		ELSE
			SELECT	@PS_ID	= @RC1
	END		

--
--	Возврат кода завершения, признака загрузки и идентификатора ПС
--
EXIT_PS_LOAD_XML_CB:
	RETURN
GO

GRANT  EXECUTE  ON [dbo].[U_PS_LOAD_XML_CB]  TO [OPERS]
GO

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

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

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

--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[U_ZAIM_LOAD]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[U_ZAIM_LOAD]
GO

CREATE PROCEDURE [dbo].[U_ZAIM_LOAD]
--	-------------------------------------------------------------------------------
--	Приём займа для ПС (кредитных)
--	-------------------------------------------------------------------------------
-- 	Возращаемые значения 
--	1.	RC=	0	- нормальное завершение			
--			2	- ПС не найден		
--			10 	- ошибка при приёме займа
--			20 	- ошибка при вычислении интендификатора займа
--			40	- Код валюты цены отсутствует в справочнике
--			91	- Код страны Иностранного контрагента отсутствует в справочнике
--			92	- Ошибка при вычислении идентификатора Иностранного контрагента
--			93	- Ошибка при добавлении Иностранного контрагента
--			100 - ошибка при регистрации события
--			200 - ошибка записи даты коррекции ПС
--
--	2.FLAG_LOAD = 	1 - приём-добавление,
--					2 - приём-обновление
--	-------------------------------------------------------------------------------
--	(Модификация	в версии 2.1.0)
--	-------------------------------------------------------------------------------
(
	@RESIDENT_ID 		AS INTEGER,
	@BANK_ID			AS INTEGER,
	@PS__N_PS			AS CHAR(22),
	@PS__UNI_ID			AS UNIQUEIDENTIFIER,
	@IN_PART__NAMEP		AS VARCHAR (300),
	@IN_PART__KODS		AS CHAR (3),
	@IN_PART__INN		AS VARCHAR (12)		= NULL,
	@IN_PART__ADRES		AS VARCHAR (300)	= NULL,
	@IN_PART__TYPE		AS CHAR (1)			= NULL,
	@UNI_ID				AS UNIQUEIDENTIFIER,
	@VALK				AS CHAR(3),
	@SUMP 				AS DECIMAL(16,2),
	@SUM_PROC  			AS DECIMAL(16,2),
	@USER_ID			AS VARCHAR(30),
	@FLAG_LOAD			AS INTEGER OUTPUT,
	@RC 				AS INTEGER OUTPUT
)
AS
	SET NOCOUNT ON
	--
	--	Рабочие переменные
	--
	DECLARE	@RC1			AS INTEGER,
			@RC2			AS INTEGER,
			@PS_ID_OLD		AS INTEGER,
			@ZAIM_ID_OLD	AS INTEGER,
			@PARTNER_ID_OLD	AS INTEGER,
			@D_TODAY		AS SMALLDATETIME

	--
	--	Начальные значения
	--
	SELECT	@FLAG_LOAD		= 1
	SELECT	@D_TODAY		= CONVERT(SMALLDATETIME,GETDATE())
	SELECT	@RC1 			= 0
	SELECT	@RC2 			= 0
	SELECT	@PS_ID_OLD		= NULL
	SELECT	@ZAIM_ID_OLD	= NULL
	SELECT	@PARTNER_ID_OLD	= NULL
	
	--
	--	1. Поиск ПС по UNI_ID
	--
	SELECT	@PS_ID_OLD		= PS_ID
	FROM	U_PS (NOLOCK)
	WHERE	UNI_ID		=	@PS__UNI_ID	AND
			DEL_FLAG	IS NULL 
			
	IF @PS_ID_OLD IS NULL 
	-- ПС НЕ найден по UNI_ID 
	BEGIN
		--
		--	2. Поиск ПС по Номеру ПС
		--
		SELECT	@PS_ID_OLD		= PS_ID
		FROM	U_PS (NOLOCK)
		WHERE	RESIDENT_ID	= @RESIDENT_ID	AND
				BANK_ID		= @BANK_ID		AND
				N_PS		= @PS__N_PS		AND
				DEL_FLAG	IS NULL 
	
		IF @PS_ID_OLD IS NULL 
		-- ПС НЕ найден по Номеру ПС -> завершаем приём 
		BEGIN
			SELECT	@RC = 2
			GOTO	EXIT_ZAIM_LOAD
		END
	END	

	--
	--	3. Поиск Займа по UNI_ID
	--
	SELECT	@ZAIM_ID_OLD	= ZAIM_ID
	FROM	U_ZAIM (NOLOCK)
	WHERE	UNI_ID		= @UNI_ID		AND
			DEL_FLAG	IS NULL 
	IF	@ZAIM_ID_OLD IS NOT NULL
	-- Займ найден по UNI_ID -> приём-обновление
		SELECT	@FLAG_LOAD = 2
	ELSE
	BEGIN
		--
		--	4. Поиск Займа по ключевым реквизитам
		--
		SELECT	@ZAIM_ID_OLD	= U_ZAIM.ZAIM_ID,
				@PARTNER_ID_OLD = U_ZAIM.PARTNER_ID
		FROM	U_ZAIM	(NOLOCK)
		INNER JOIN U_IN_PART (NOLOCK) ON
				U_ZAIM.PARTNER_ID	=	U_IN_PART.PARTNER_ID	AND
				U_IN_PART.DEL_FLAG	IS NULL
		WHERE	U_ZAIM.RESIDENT_ID			= @RESIDENT_ID							AND
				U_ZAIM.PS_ID				= @PS_ID_OLD							AND
				U_ZAIM.VALK					= @VALK									AND
				ISNULL(SUMP, 0)				= ISNULL(@SUMP, 0)						AND
				ISNULL(SUM_PROC, 0)			= ISNULL(@SUM_PROC, 0)					AND
				U_IN_PART.KODS				= @IN_PART__KODS						AND
				UPPER(LTRIM(RTRIM(U_IN_PART.NAMEP)))	= UPPER(LTRIM(RTRIM(@IN_PART__NAMEP)))		AND
				ISNULL(U_IN_PART.INN, '')				= ISNULL(@IN_PART__INN, '')					AND
				UPPER(LTRIM(RTRIM(ISNULL(U_IN_PART.ADRES, ''))))	= UPPER(LTRIM(RTRIM(ISNULL(@IN_PART__ADRES, ''))))	AND
				ISNULL(U_IN_PART.TYPE, '')	= ISNULL(@IN_PART__TYPE, '')			AND
				U_ZAIM.DEL_FLAG				IS NULL 								AND
				U_ZAIM.UNI_ID				IS NULL 
		IF	@ZAIM_ID_OLD IS NOT NULL
		-- Займ найден по ключевым реквизитам -> приём-обновление
			SELECT	@FLAG_LOAD = 2
	END

	--
	--	Поиск Иностранного контрагента по переданным реквизитам
	--
	SELECT	@PARTNER_ID_OLD	= PARTNER_ID 	
	FROM	U_IN_PART (NOLOCK)
	WHERE	KODS						= @IN_PART__KODS							AND
			UPPER(LTRIM(RTRIM(NAMEP)))	= UPPER(LTRIM(RTRIM(@IN_PART__NAMEP)))		AND
			ISNULL(INN, '')				= ISNULL(@IN_PART__INN, '')					AND
			UPPER(LTRIM(RTRIM(ISNULL(ADRES, ''))))	= UPPER(LTRIM(RTRIM(ISNULL(@IN_PART__ADRES, ''))))	AND
			ISNULL(TYPE, '')			= ISNULL(@IN_PART__TYPE, '')				AND
			DEL_FLAG					IS NULL

	IF ISNULL(@PARTNER_ID_OLD, 0) = 0 
	-- Иностранный контрагент не найден - будем добалять
	BEGIN
		--
		--	Проверка кода страны
		--
		IF NOT EXISTS	(	SELECT	*
							FROM	OKSMT (NOLOCK)
							WHERE	KOD	=  @IN_PART__KODS	
						)
			BEGIN
				SELECT	@RC		= 91
				GOTO	EXIT_ZAIM_LOAD
			END
		--
		--	Определяем ID Иностранного контрагента
		--
		SELECT	@PARTNER_ID_OLD = MAX( PARTNER_ID ) + 1
		FROM	U_IN_PART (NOLOCK)
			
		IF	@@ERROR <> 0
			BEGIN	
				SELECT	@RC		= 92
				GOTO	EXIT_ZAIM_LOAD
			END

		SELECT	@PARTNER_ID_OLD	= ISNULL( @PARTNER_ID_OLD,  1 )

		--	
		--	Добавляем новую запись об Иностранном контрагенте
		--
		INSERT	INTO	U_IN_PART  	
				( PARTNER_ID, NAMEP,  KODS, INN, ADRES, TYPE, DEL_FLAG )
		VALUES
				( @PARTNER_ID_OLD, @IN_PART__NAMEP, @IN_PART__KODS, @IN_PART__INN, @IN_PART__ADRES, @IN_PART__TYPE, NULL )

		IF	@@ERROR <> 0
			BEGIN	
				SELECT	@RC		= 93
				GOTO	EXIT_ZAIM_LOAD
			END
	END	-- добавления Иностранного контрагента
	
	IF	@FLAG_LOAD = 2 
	-- приём-обновление
	BEGIN
		EXECUTE U_ZAIM_UPDATE
				@RESIDENT_ID	= @RESIDENT_ID,
				@PS_ID			= @PS_ID_OLD,
				@ZAIM_ID		= @ZAIM_ID_OLD,
				@PARTNER_ID		= @PARTNER_ID_OLD,
				@VALK			= @VALK, 
				@SUMP			= @SUMP,
				@SUM_PROC		= @SUM_PROC, 
				@USER_ID		= 'SYSTEM',
				@UNI_ID			= @UNI_ID,
				@D_LOAD			= @D_TODAY,
				@SRC_LOAD		= 'АСВКБ',
				@RC				= @RC1 OUTPUT 

			IF	@RC1 > 0					
				BEGIN
					SELECT	@RC = @RC1
					GOTO	EXIT_ZAIM_LOAD
				END	
	END

	IF	@FLAG_LOAD = 1 
	-- приём-добавление
	BEGIN
	
		EXECUTE U_ZAIM_INSERT
				@RESIDENT_ID	= @RESIDENT_ID,
				@PS_ID			= @PS_ID_OLD,
				@PARTNER_ID		= @PARTNER_ID_OLD,
				@VALK			= @VALK, 
				@SUMP			= @SUMP,
				@SUM_PROC		= @SUM_PROC, 
				@USER_ID		= 'SYSTEM',
				@UNI_ID			= @UNI_ID,
				@D_LOAD			= @D_TODAY,
				@SRC_LOAD		= 'АСВКБ',
				@ZAIM_ID		= @RC1 OUTPUT,
				@RC				= @RC2 OUTPUT 

			IF	NOT ( @RC2 = 0 AND @RC1 > 0 )	
				BEGIN
					SELECT	@RC = @RC2
					GOTO	EXIT_ZAIM_LOAD
				END
	END		

--
--	Возврат кода завершения и признака приёма
--
EXIT_ZAIM_LOAD:
	SELECT	RC = @RC, FLAG_LOAD = @FLAG_LOAD
GO

GRANT  EXECUTE  ON [dbo].[U_ZAIM_LOAD]  TO [OPERS]
GO

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

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

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

--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[U_OPLATA_SELECT]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[U_OPLATA_SELECT]
GO

CREATE PROCEDURE [dbo].[U_OPLATA_SELECT]
-----------------------------------------------------------
--	Отбор списка Платежей Участника ВЭД
-----------------------------------------------------------
--	(Модификация	в версии 2.1.0)
-----------------------------------------------------------
(
	@RESIDENT_ID	AS INTEGER
) 
AS
	SET NOCOUNT ON
	
	SELECT	U_OPLATA.*, 
			U_SCHET.N_SCHET, 
			U_SCHET.KODV, 
			U_PS.N_PS, 
			U_BANKS.NAMEB,
			U_BANKS.NAMEB_S,
			U_IN_PART.NAMEP,
			ISNULL(U_DOGOVOR.VID_KONTR, DOG_PS.VID_KONTR)														AS VID_KONTR_DOG,
			ISNULL(U_DOGOVOR.N_DOPSOGL, ISNULL(U_DOGOVOR.N_KONTR, ISNULL(DOG_PS.N_DOPSOGL, DOG_PS.N_KONTR)))	AS N_KONTR_DOG,
			ISNULL(U_DOGOVOR.D_KONTR, DOG_PS.D_KONTR)															AS D_KONTR_DOG,
			ISNULL(IN_PART_DOG_OPLATA.NAMEP, IN_PART_DOG_PS.NAMEP)												AS NAMEP_DOG,
			(	SELECT	SUM(SUMK)	
				FROM	U_RASPRED_OPLATA_OPLATA (NOLOCK) 
				WHERE	U_RASPRED_OPLATA_OPLATA.RESIDENT_ID 		= U_OPLATA.RESIDENT_ID	AND
						(U_RASPRED_OPLATA_OPLATA.OPL_ID 			= U_OPLATA.OPL_ID 	OR
						U_RASPRED_OPLATA_OPLATA.OPL_ID2 			= U_OPLATA.OPL_ID) 	
			)	AS SUMK_RASP_VOZV,
			(	SELECT	SUM(SUMK)	
				FROM	U_RASPRED_OPLATA_SPR_CONFIRM (NOLOCK) 
				WHERE	U_RASPRED_OPLATA_SPR_CONFIRM.RESIDENT_ID 	= U_OPLATA.RESIDENT_ID	AND
						U_RASPRED_OPLATA_SPR_CONFIRM.OPL_ID 		= U_OPLATA.OPL_ID 	
			)	AS SUMK_RASP_PD
	FROM	U_OPLATA (NOLOCK)
	INNER	JOIN	U_BANKS	(NOLOCK) ON 
			U_BANKS.BANK_ID			= U_OPLATA.BANK_ID		AND
			U_BANKS.DEL_FLAG		IS NULL
	LEFT	OUTER JOIN	U_PS	(NOLOCK) ON
			U_PS.RESIDENT_ID		= U_OPLATA.RESIDENT_ID	AND
			U_PS.PS_ID				= U_OPLATA.PS_ID		AND
			U_PS.DEL_FLAG			IS NULL
	LEFT	OUTER JOIN	U_DOGOVOR	(NOLOCK) ON
			U_DOGOVOR.RESIDENT_ID	= U_OPLATA.RESIDENT_ID	AND
			U_DOGOVOR.DOG_ID		= U_OPLATA.DOG_ID		AND
			U_DOGOVOR.DOG_NPP		= U_OPLATA.DOG_NPP		AND
			U_DOGOVOR.DEL_FLAG		IS NULL
	LEFT	OUTER JOIN	U_DOGOVOR AS DOG_PS (NOLOCK) ON
			DOG_PS.RESIDENT_ID		= U_PS.RESIDENT_ID		AND
			DOG_PS.DOG_ID			= U_PS.DOG_ID			AND
			DOG_PS.DOG_NPP			= U_PS.DOG_NPP			AND
			DOG_PS.DEL_FLAG			IS NULL
	LEFT	OUTER JOIN	U_IN_PART (NOLOCK) ON
			U_IN_PART.PARTNER_ID	= U_OPLATA.PARTNER_ID	AND
			U_IN_PART.DEL_FLAG		IS NULL
	LEFT	OUTER JOIN	U_IN_PART AS IN_PART_DOG_OPLATA(NOLOCK) ON
			IN_PART_DOG_OPLATA.PARTNER_ID	= U_DOGOVOR.PARTNER_ID	AND
			IN_PART_DOG_OPLATA.DEL_FLAG		IS NULL
	LEFT	OUTER JOIN	U_IN_PART AS IN_PART_DOG_PS(NOLOCK) ON
			IN_PART_DOG_PS.PARTNER_ID	= DOG_PS.PARTNER_ID	AND
			IN_PART_DOG_PS.DEL_FLAG		IS NULL
	LEFT	OUTER JOIN	U_SCHET	(NOLOCK) ON	
			U_SCHET.RESIDENT_ID		= U_OPLATA.RESIDENT_ID	AND
			U_SCHET.SCHET_ID		= U_OPLATA.SCHET_ID		AND
			U_SCHET.DEL_FLAG		IS NULL
	WHERE	U_OPLATA.RESIDENT_ID	= @RESIDENT_ID			AND
			U_OPLATA.DEL_FLAG		IS NULL		
	ORDER	BY U_OPLATA.NPP DESC
GO

GRANT  EXECUTE  ON [dbo].[U_OPLATA_SELECT]  TO [OPERS], [AUDITS]
GO

--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[U_OPLATA_SELECT_BY_ID]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[U_OPLATA_SELECT_BY_ID]
GO

CREATE PROCEDURE [dbo].[U_OPLATA_SELECT_BY_ID]
--	--------------------------------------------------------------------------------------------------	
--	Чтение информации платежа по его идентификатору
--	--------------------------------------------------------------------------------------------------
--	(Модификация	в версии 2.1.0)
------------------------------------------------------------------------------------------------------
(
	@RESIDENT_ID 	AS INTEGER,
	@OPL_ID			AS INTEGER
)

AS
	--
	--	Рабочие переменные
	--
	DECLARE	@SUMK_RASP_VOZV 	AS DECIMAL(16,2),
			@SUMK_RASP_PD		AS DECIMAL(16,2)
	--
	--	Начальные значения
	--
	SELECT	@SUMK_RASP_VOZV	= 0
	SELECT	@SUMK_RASP_PD	= 0
	
	--
	--	Распределение на ПД
	--
	SELECT	@SUMK_RASP_PD 	= ISNULL(SUM(SUMK), 0)
	FROM	U_RASPRED_OPLATA_SPR_CONFIRM (NOLOCK) 
	WHERE	RESIDENT_ID 	= @RESIDENT_ID	AND
			OPL_ID			= @OPL_ID 	

	--
	--	Распределение на Возвраты
	--
	SELECT	@SUMK_RASP_VOZV = ISNULL(SUM(SUMK), 0)
	FROM	U_RASPRED_OPLATA_OPLATA (NOLOCK) 
	WHERE	RESIDENT_ID 	= @RESIDENT_ID	AND
			(OPL_ID 		= @OPL_ID 	OR
			 OPL_ID2 		= @OPL_ID 	)


	SELECT	U_OPLATA.* ,
			U_PS.PS_ID,
			U_PS.N_PS,
			U_PS.DOG_ID											AS PS_DOG_ID,
			U_PS.DOG_NPP										AS PS_DOG_NPP,
			U_SCHET.N_SCHET, 
			U_SCHET.KODV,
			(@SUMK_RASP_VOZV + @SUMK_RASP_PD)					AS SUMK_RASP_ALL,
			@SUMK_RASP_VOZV										AS SUMK_RASP_VOZV,
			@SUMK_RASP_PD										AS SUMK_RASP_PD,
			(U_OPLATA.SUMK - (@SUMK_RASP_VOZV + @SUMK_RASP_PD)) AS SUMK_OSTATOK
	FROM	U_OPLATA (NOLOCK) 
	LEFT	OUTER JOIN	U_PS (NOLOCK)ON 
			U_PS.PS_ID				= U_OPLATA.PS_ID		AND
			U_PS.RESIDENT_ID		= U_OPLATA.RESIDENT_ID	AND
			U_PS.DEL_FLAG			IS NULL	
	LEFT	OUTER JOIN	U_DOGOVOR AS DOG_PS (NOLOCK) ON
			DOG_PS.RESIDENT_ID		= U_PS.RESIDENT_ID		AND
			DOG_PS.DOG_ID			= U_PS.DOG_ID			AND
			DOG_PS.DOG_NPP			= U_PS.DOG_NPP			AND
			DOG_PS.DEL_FLAG			IS NULL
	LEFT	OUTER JOIN	U_SCHET	(NOLOCK)	ON
			U_OPLATA.SCHET_ID		= U_SCHET.SCHET_ID		AND
			U_OPLATA.RESIDENT_ID	= U_SCHET.RESIDENT_ID	AND
			U_SCHET.DEL_FLAG		IS NULL
	WHERE	U_OPLATA.RESIDENT_ID 	= @RESIDENT_ID			AND
			U_OPLATA.OPL_ID 		= @OPL_ID 				AND
			U_OPLATA.DEL_FLAG 		IS NULL			
GO

GRANT  EXECUTE  ON [dbo].[U_OPLATA_SELECT_BY_ID]  TO [OPERS], [AUDITS]
GO

--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[U_OPLATA_INSERT]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[U_OPLATA_INSERT]
GO

CREATE PROCEDURE [dbo].[U_OPLATA_INSERT]
--	------------------------------------------------------------------------------------------------------------------------
--	Добавление Платежа
--	------------------------------------------------------------------------------------------------------------------------
--
--	Возвращает:
--	1. RC 				
--	   RC =	0	- нормальное завершение							
--			10	- ошибка при добавлении
--			20	- ошибка при вычислении идентификатора
--			40	- кода валюты платежа нет в справочнике
--			45	- кода валюты цены контракта (договора) нет в справочнике
--			46	- кода валюты корреспондентского счета нет в справочнике
--			47	- Код валюты цены контракта (договора) не соответствует коду валюты, указанному в Паспорте сделки, и не найден среди кодов валют в предыдущих условиях контракта (договора)
--			50	- код операции отсутствует в справочнике
--			55	- договор отсутствует в БД
--			56	- ПС отсутствует в БД
--			57	- ссылка платежа одновременно и на Договор и на ПС недопустима
--			90	- код страны банка - отправителя (получателя) платежа отсутствует в справочнике
--			95	- код страны банка - нерезидента отсутствует в справочнике
--			100 - ошибка регистрации события
--			130	- дублирование порядковых номеров платежа
--	------------------------------------------------------------------------------------------------------------------------
--	(Модификация	в версии 2.1.0)
--	------------------------------------------------------------------------------------------------------------------------
(
	@RESIDENT_ID		AS INTEGER,
	@NPP				AS INTEGER,
	@DIRECTION 			AS CHAR (1),
	@BANK_ID			AS INTEGER,
	@SCHET_ID			AS INTEGER			= NULL,
	@KODOP				AS CHAR (5),
	@VALP				AS CHAR (3),
	@SUMP				AS DECIMAL (16, 2),
	@VALK				AS CHAR (3),
	@SUMK				AS DECIMAL (16, 2) ,
	@KKURS				AS DECIMAL (16,8)	= NULL,
	@KODS				AS CHAR (3),
	@PS_ID				AS INTEGER			= NULL,
    @N_PS_OLD			AS CHAR (25)		= NULL,
	@D_PLAT				AS SMALLDATETIME	= NULL,
	@N_PLAT				AS VARCHAR (100)	= NULL,
	@D_REFER			AS SMALLDATETIME	= NULL,
	@N_REFER			AS VARCHAR (100)	= NULL,
	@PRIZ_OUT			AS CHAR (1)			= NULL,
	@PRIM				AS VARCHAR (500)	= NULL,
	@USER_ID			AS VARCHAR (30),
	@TYPE				AS CHAR (1)			= NULL,
	@TYPE_99010			AS CHAR (1)			= NULL, 	 	
	@KODS_IN_BANK		AS CHAR (3)			= NULL,
	@PARTNER_ID			AS INTEGER			= NULL,
	@IN_PART_BANK_ID	AS INTEGER			= NULL,
	@D_VAL				AS SMALLDATETIME	= NULL,
	@KOD_VAL			AS CHAR (3)			= NULL,
	@SUM_VAL			AS DECIMAL (16, 2)	= NULL,
	@VID_USLUG			AS VARCHAR (7)		= NULL,
	@VID_DIRECTION		AS CHAR (1)			= NULL,
	@PRIM_USLUG			AS VARCHAR (500)	= NULL,
	@PRIM_BANK			AS VARCHAR (500)	= NULL,
	@NPP_BANK			AS INTEGER			= NULL,
	@UNI_ID				AS UNIQUEIDENTIFIER	= NULL,
	@GID				AS VARCHAR (50)		= NULL,
	@D_LOAD				AS SMALLDATETIME	= NULL,  
	@SRC_LOAD			AS VARCHAR (15)		= NULL,  
	@DOG_ID				AS INTEGER			= NULL,
	@DOG_NPP			AS INTEGER			= NULL,
	@N_KONTR			AS VARCHAR (100)	= NULL,
	@KONTR_SROK			AS CHAR(4)			= NULL,
	@DOG_ID_BANK		AS INTEGER			= NULL,
	@DOG_NPP_BANK		AS INTEGER			= NULL,
	@OPL_ID				AS INTEGER OUTPUT,
	@RC					AS INTEGER OUTPUT
)
AS
	SET NOCOUNT ON
	--
	--	Рабочие переменные
	DECLARE @KOL			AS INTEGER,
			@RETURN_STATUS	AS INTEGER,
			@NEW_ID			AS INTEGER
	--
	--	Начальные значения
	--
	SELECT	@KOL			= 0
	SELECT	@RETURN_STATUS	= 0
	SELECT	@NEW_ID			= NULL

	--
	--	 Проверка дублирования порядкового номера платежа
	--
	IF	EXISTS (	
				SELECT	*
				FROM	U_OPLATA (NOLOCK)
				WHERE	RESIDENT_ID = @RESIDENT_ID 	AND
						NPP	 		= @NPP			AND
						DEL_FLAG 	IS NULL		
				)
		BEGIN
			SELECT	@RC	= 130
			SELECT	@OPL_ID	= 0
			GOTO	EXIT_OPLATA_INSERT
		END

	--	
	--	Проверка кода страны
	--
	IF	NOT EXISTS ( 	
					SELECT	*
					FROM	OKSMT (NOLOCK)
					WHERE	KOD	=  @KODS	
					)
		BEGIN
			SELECT	@RC	= 90
			SELECT	@OPL_ID	= 0
			GOTO	EXIT_OPLATA_INSERT
		END

	--
	--	Проверка кода страны
	--
	IF	@KODS_IN_BANK IS NOT NULL
		BEGIN
			IF NOT EXISTS	( 
								SELECT	*
								FROM	OKSMT (NOLOCK)
								WHERE	KOD	=  @KODS_IN_BANK	
							)
				BEGIN
					SELECT	@RC	= 95
					SELECT	@OPL_ID	= 0
					GOTO	EXIT_OPLATA_INSERT
				END
		END

	--	
	--  	Контроль информации по справочнику VIDOP
	--
	IF	NOT EXISTS ( 
					SELECT	*
					FROM	VIDOP (NOLOCK)
					WHERE	KOD = @KODOP
					)
		BEGIN
			SELECT	@RC 	= 50
			SELECT	@OPL_ID	= 0
			GOTO   	EXIT_OPLATA_INSERT
		END

	--
	--  	Контроль информации по справочнику VALW
	--		
	IF	NOT EXISTS ( 	
					SELECT	*
					FROM	VALW (NOLOCK)
					WHERE	KOD = @VALP
					)
		BEGIN
			SELECT	@RC	= 40
			SELECT	@OPL_ID	= 0
			GOTO  	EXIT_OPLATA_INSERT
		END

	--
	--  	Контроль информации по справочнику VALW
	--		
	IF	NOT EXISTS ( 	
					SELECT	*
					FROM	VALW (NOLOCK)
					WHERE	KOD = @VALK
					)
		BEGIN
			SELECT	@RC	= 45
			SELECT	@OPL_ID	= 0
			GOTO  	EXIT_OPLATA_INSERT
		END

	--
	--  	Контроль информации по справочнику VALW
	--		
	IF	@KOD_VAL IS NOT NULL
		BEGIN
			IF	NOT EXISTS ( 	
							SELECT	*
							FROM	VALW (NOLOCK)
							WHERE	KOD = @KOD_VAL
							)
				BEGIN
					SELECT	@RC	= 46
					SELECT	@OPL_ID	= 0
					GOTO  	EXIT_OPLATA_INSERT
				END
		END

	--
	--  	Контроль кода валюты цены контракта (кредитного договора) на допустимое значение
	--		
	IF	@PS_ID	IS NOT NULL	AND
		@VALK	NOT IN	( 
							SELECT	U_DOGOVOR.KVALK 
							FROM	U_PS (NOLOCK) 
							INNER	JOIN	U_DOGOVOR (NOLOCK) ON
									U_DOGOVOR.RESIDENT_ID	= U_PS.RESIDENT_ID	AND
									U_DOGOVOR.DOG_ID		= U_PS.DOG_ID		AND
									U_DOGOVOR.DEL_FLAG		IS NULL
							WHERE	U_PS.RESIDENT_ID	= @RESIDENT_ID	AND
									U_PS.PS_ID			= @PS_ID		AND
									U_PS.DEL_FLAG		IS NULL 
							
						)
		BEGIN
			SELECT	@RC	= 47
			SELECT	@OPL_ID	= 0
			GOTO  	EXIT_OPLATA_INSERT
		END

	--	
	--	Проверка ссылки платежа одновременно и на Договор и на ПС
	--	
	IF @DOG_ID IS NOT NULL	AND	 @DOG_NPP IS NOT NULL	AND @PS_ID IS NOT NULL
		BEGIN
			SELECT	@RC	= 57
			SELECT	@OPL_ID	= 0
			GOTO	EXIT_OPLATA_INSERT
		END	

	--	
	--	Проверка наличия Договора в БД
	--	
	IF @DOG_ID IS NOT NULL	AND	 @DOG_NPP IS NOT NULL
		BEGIN
				IF	NOT EXISTS ( 
								SELECT	*	
								FROM	U_DOGOVOR (NOLOCK)
								WHERE	RESIDENT_ID	=	@RESIDENT_ID	AND
										DOG_ID		=	@DOG_ID			AND
										DOG_NPP		=	@DOG_NPP		AND
										DEL_FLAG	IS	NULL																		
								)		
										BEGIN	
											SELECT	@RC		= 55
											SELECT	@OPL_ID	= 0
											GOTO	EXIT_OPLATA_INSERT
										END
		END	

	--	
	--	Проверка наличия ПС в БД
	--	
	IF @PS_ID IS NOT NULL
		BEGIN
				IF	NOT EXISTS ( 
								SELECT	*	
								FROM	U_PS (NOLOCK)
								WHERE	RESIDENT_ID	=	@RESIDENT_ID	AND
										PS_ID		=	@PS_ID			AND
										DEL_FLAG	IS	NULL																		
								)		
										BEGIN	
											SELECT	@RC		= 56
											SELECT	@OPL_ID	= 0
											GOTO	EXIT_OPLATA_INSERT
										END
		END	


	--
	--	Определяем новый ID
	--
	SELECT	@NEW_ID = MAX( OPL_ID ) + 1
	FROM	U_OPLATA (NOLOCK)
	WHERE	RESIDENT_ID	= @RESIDENT_ID	
	
	IF	@@ERROR <> 0
		BEGIN	
			SELECT	@RC	= 20
			SELECT	@OPL_ID	= 0
			GOTO	EXIT_OPLATA_INSERT
		END
	
	SELECT	@NEW_ID	= ISNULL( @NEW_ID,  1 )
	--
	--	Вставка записи в таблицу
	--
	BEGIN TRANSACTION
	INSERT INTO U_OPLATA (
		RESIDENT_ID,
		OPL_ID,
		NPP,
		DIRECTION,
		BANK_ID,
		SCHET_ID,
		KODOP,
		VALP,
		SUMP,
		VALK,
		SUMK,
		KKURS,
		KODS,
		PS_ID,
		N_PS_OLD,
		D_PLAT,
		N_PLAT,
		D_REFER,
		N_REFER,
		PRIZ_OUT,
		PRIM,
		TYPE,
		TYPE_99010,
		KODS_IN_BANK,
		PARTNER_ID,
		IN_PART_BANK_ID,
		D_VAL,
		KOD_VAL,
		SUM_VAL,
		VID_USLUG,
		VID_DIRECTION,
		PRIM_USLUG,
		PRIM_BANK,
		NPP_BANK,
		DKOR,
		DEL_FLAG,
		UNI_ID,
		GID,
		D_LOAD,
		SRC_LOAD,
		DOG_ID,
		DOG_NPP,
		N_KONTR,
		KONTR_SROK,
		DOG_ID_BANK,
		DOG_NPP_BANK
		)
	VALUES
		(
		@RESIDENT_ID,
		@NEW_ID,
		@NPP,
		@DIRECTION,
		@BANK_ID,
		@SCHET_ID,
		@KODOP,
		@VALP,
		@SUMP,
		@VALK,
		@SUMK,
		@KKURS,
		@KODS,
		@PS_ID,
		@N_PS_OLD,
		@D_PLAT,
		@N_PLAT,
		@D_REFER,
		@N_REFER,
		@PRIZ_OUT,
		@PRIM,
		@TYPE,
		@TYPE_99010,
		@KODS_IN_BANK,
		@PARTNER_ID,
		@IN_PART_BANK_ID,
		@D_VAL,
		@KOD_VAL,
		@SUM_VAL,
		@VID_USLUG,
		@VID_DIRECTION,
		@PRIM_USLUG,
		@PRIM_BANK,
		@NPP_BANK,
		CONVERT(SMALLDATETIME,GETDATE()),
		NULL,
		@UNI_ID,
		@GID,
		@D_LOAD,
		@SRC_LOAD,
		@DOG_ID,
		@DOG_NPP,
		@N_KONTR,
		@KONTR_SROK,
		@DOG_ID_BANK,
		@DOG_NPP_BANK
		)

		IF	@@ERROR <> 0
			BEGIN	
				ROLLBACK TRANSACTION
				SELECT	@RC		= 10
				SELECT	@OPL_ID	= 0
				GOTO	EXIT_OPLATA_INSERT
			END
		ELSE
			BEGIN
				SELECT	@RC	= 0
				SELECT	@OPL_ID	= @NEW_ID
			END

	--
	--	Добавление события в журнал событий
	--
	EXECUTE	@RETURN_STATUS	= U_EVENT_INSERT
			@EVENT_NAME		= 'INS_OPLATA',
			@USER_ID		= @USER_ID,
			@RESIDENT_ID	= @RESIDENT_ID,
			@BANK_ID		= @BANK_ID,
			@PS_ID			= @PS_ID,
			@PLAT_ID 		= @NEW_ID,
			@NPP			= @NPP
			
	IF	@RETURN_STATUS <> 0
		ROLLBACK TRANSACTION
	ELSE
		COMMIT TRANSACTION

--
--	Возврат кода завершения
--
EXIT_OPLATA_INSERT:
	SELECT	RC = @RC + @RETURN_STATUS, OPL_ID = @OPL_ID
GO

GRANT  EXECUTE  ON [dbo].[U_OPLATA_INSERT]  TO [OPERS]
GO

--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[U_OPLATA_UPDATE]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[U_OPLATA_UPDATE]
GO

CREATE PROCEDURE [dbo].[U_OPLATA_UPDATE]
--	------------------------------------------------------------------------------------------------------------------------
--	Коррекция Платежа
--	------------------------------------------------------------------------------------------------------------------------
--
--	Возвращает:
--	1. RC 				
--	   RC =	0	- нормальное завершение							
--			10	- ошибка при добавлении
--			15	- платеж не найден 
--			40	- кода валюты платежа нет в справочнике
--			45	- кода валюты цены контракта (договора) нет в справочнике
--			46	- кода валюты корреспондентского счета нет в справочнике
--			47	- Код валюты цены контракта (договора) не соответствует коду валюты, указанному в Паспорте сделки, и не найден среди кодов валют в предыдущих условиях контракта (договора)
--			50	- код операции отсутствует в справочнике
--			55	- Договор отсутствует в БД
--			56	- ПС отсутствует в БД
--			57	- ссылка Платежа одновременно и на Договор и на ПС недопустима
--			90	- код страны банка - отправителя (получателя) платежа отсутствует в справочнике
--			95	- код страны банка - нерезидента отсутствует в справочнике
--			99	- Сумма в валюте цены контракта не может быть меньше распределённой суммы
--			100	- ошибка регистрации события
--			130	- Дублирование порядкового номера
--			201	- Платёж распределён: менять Паспорт сделки нельзя (не используется с версии 2.1.0)
--			202	- Платёж распределён: менять Код валюты цены контракта нельзя
--			203	- Платёж распределён: менять направление Платежа нельзя
--			204	- Платёж распределён: менять Код вида валютной операции нельзя
--			205	- Платёж распределён: менять Детализацию кода вида валютной операции нельзя
--			206	- Платёж распределён: менять Договор (контракт) нельзя
--	------------------------------------------------------------------------------------------------------------------------
--	(Модификация	в версии 2.1.0)
--	------------------------------------------------------------------------------------------------------------------------
(
	@RESIDENT_ID		AS INTEGER,
	@OPL_ID				AS INTEGER,
	@NPP				AS INTEGER,
	@DIRECTION 			AS CHAR (1),
	@BANK_ID			AS INTEGER,
	@KODOP				AS CHAR (5),
	@VALP				AS CHAR (3),
	@SUMP				AS DECIMAL (16, 2),
	@VALK				AS CHAR (3),
	@SUMK				AS DECIMAL (16, 2) ,
	@KODS				AS CHAR (3),
	@USER_ID			AS VARCHAR (30),
	@KODS_IN_BANK		AS CHAR (3)			= NULL,
	@SCHET_ID			AS INTEGER			= NULL,
	@KKURS				AS DECIMAL (16,8)	= NULL,
	@PS_ID				AS INTEGER			= NULL,
	@N_PS_OLD			AS CHAR (25)		= NULL,
	@D_PLAT				AS SMALLDATETIME	= NULL,
	@N_PLAT				AS VARCHAR (100)	= NULL,
	@D_REFER			AS SMALLDATETIME	= NULL,
	@N_REFER			AS VARCHAR (100)	= NULL,
	@PRIZ_OUT			AS CHAR (1)			= NULL,
	@PRIM				AS VARCHAR (500)	= NULL,
	@TYPE				AS CHAR (1)			= NULL,
	@TYPE_99010			AS CHAR (1)			= NULL, 	 	
	@PARTNER_ID			AS INTEGER			= NULL,
	@IN_PART_BANK_ID	AS INTEGER			= NULL,
	@D_VAL				AS SMALLDATETIME	= NULL,
	@KOD_VAL			AS CHAR (3)			= NULL,
	@SUM_VAL			AS DECIMAL (16, 2)	= NULL,
	@VID_USLUG			AS VARCHAR (7)		= NULL,
	@VID_DIRECTION		AS CHAR (1)			= NULL,
	@PRIM_USLUG			AS VARCHAR (500)	= NULL,
	@PRIM_BANK			AS VARCHAR (500)	= NULL,
	@NPP_BANK			AS INTEGER			= NULL,
	@UNI_ID				AS UNIQUEIDENTIFIER	= NULL,
	@GID				AS VARCHAR (50)		= NULL,
	@D_LOAD				AS SMALLDATETIME	= NULL,  
	@SRC_LOAD			AS VARCHAR (15)		= NULL,  
	@DOG_ID				AS INTEGER			= NULL,
	@DOG_NPP			AS INTEGER			= NULL,
	@N_KONTR			AS VARCHAR (100)	= NULL,
	@KONTR_SROK			AS CHAR(4)			= NULL,
	@DOG_ID_BANK		AS INTEGER			= NULL,
	@DOG_NPP_BANK		AS INTEGER			= NULL,
	@RC					AS INTEGER OUTPUT
)
AS
	SET NOCOUNT ON
	--
	--	Рабочие переменные
	--
	DECLARE	@OST_OPLATA		AS DECIMAL (16,2),
			@KOL			AS INTEGER,
			@KOL2			AS INTEGER,
			@DOG_ID_OLD		AS INTEGER,
			@DOG_ID_NEW		AS INTEGER,
			@VALK_OLD		AS CHAR (3),
			@DIRECTION_OLD	AS CHAR (1),
			@KODOP_OLD		AS CHAR (5),
			@TYPE_OLD		AS CHAR (1),
			@RETURN_STATUS	AS INTEGER,
			@MY_ERROR		AS INTEGER,
			@MY_ROWCOUNT	AS INTEGER

	--
	--	Начальные значения
	--
	SELECT	@OST_OPLATA		= 0
	SELECT	@KOL			= 0
	SELECT	@KOL2			= 0
	SELECT	@DOG_ID_OLD		= 0
	SELECT	@DOG_ID_NEW		= 0
	SELECT	@VALK_OLD		= ''
	SELECT	@DIRECTION_OLD	= ''
	SELECT	@KODOP_OLD		= ''
	SELECT	@TYPE_OLD		= ''
	SELECT	@RETURN_STATUS	= 0
	SELECT	@MY_ERROR		= 0
	SELECT	@MY_ROWCOUNT	= 0

	--
	--	 Проверка дублирования номера платежа
	--
	SELECT	@KOL = COUNT(*)
	FROM	U_OPLATA (NOLOCK)
	WHERE	RESIDENT_ID	= @RESIDENT_ID	AND
			NPP			= @NPP			AND
			OPL_ID		<> @OPL_ID		AND
			DEL_FLAG 	IS NULL		
	IF	@KOL > 0
		BEGIN
			SELECT	@RC = 130
			GOTO   	EXIT_OPLATA_UPDATE
		END

	--
	--	Проверка кода страны
	--
	SELECT	@KOL = COUNT(*)
	FROM	OKSMT (NOLOCK)
	WHERE	KOD	=  @KODS	
	IF	@KOL = 0
		BEGIN
			SELECT	@RC	= 90
			GOTO	EXIT_OPLATA_UPDATE
		END

	--
	--	Проверка кода страны
	--
	IF	@KODS_IN_BANK IS NOT NULL
		BEGIN
			SELECT	@KOL = COUNT(*)
			FROM	OKSMT (NOLOCK)
			WHERE	KOD	=  @KODS_IN_BANK	
			IF	@KOL = 0
				BEGIN
					SELECT	@RC	= 95
					SELECT	@OPL_ID	= 0
					GOTO	EXIT_OPLATA_UPDATE
				END
		END

	--
	--  	Контроль информации по справочникам KODOP, VALP
	--
	SELECT	@KOL = COUNT(*)
	FROM	VIDOP (NOLOCK)
	WHERE	KOD = @KODOP
	IF	@KOL = 0
		BEGIN
			SELECT	@RC 	= 50
			GOTO	EXIT_OPLATA_UPDATE
		END

	--
	--  	Контроль информации по справочникам VALP
	--		
	SELECT	@KOL = COUNT(*)
	FROM	VALW (NOLOCK)
	WHERE	KOD = @VALP
	IF	@KOL = 0
		BEGIN
			SELECT	@RC	= 40
			GOTO   	EXIT_OPLATA_UPDATE
		END

	--
	--  	Контроль информации по справочникам VALK
	--		
	SELECT	@KOL = COUNT(*)
	FROM	VALW (NOLOCK)
	WHERE	KOD = @VALK
	IF	@KOL = 0
		BEGIN
			SELECT	@RC	= 45
			GOTO  	EXIT_OPLATA_UPDATE
		END

	--
	--  	Контроль информации по справочникам KOD_VAL
	--		
	IF	@KOD_VAL IS NOT NULL
		BEGIN	
			SELECT	@KOL = COUNT(*)
			FROM	VALW (NOLOCK)
			WHERE	KOD = @KOD_VAL
			IF	@KOL = 0
				BEGIN
					SELECT	@RC	= 46
					GOTO  	EXIT_OPLATA_UPDATE
				END
		END

	--
	--  	Контроль кода валюты цены контракта (кредитного договора) на допустимое значение
	--		
	IF	@PS_ID	IS NOT NULL	AND
		@VALK	NOT IN	( 
							SELECT	U_DOGOVOR.KVALK 
							FROM	U_PS (NOLOCK) 
							INNER	JOIN	U_DOGOVOR (NOLOCK) ON
									U_DOGOVOR.RESIDENT_ID	= U_PS.RESIDENT_ID	AND
									U_DOGOVOR.DOG_ID		= U_PS.DOG_ID		AND
									U_DOGOVOR.DEL_FLAG		IS NULL
							WHERE	U_PS.RESIDENT_ID	= @RESIDENT_ID	AND
									U_PS.PS_ID			= @PS_ID		AND
									U_PS.DEL_FLAG		IS NULL 
							
						)
		BEGIN
			SELECT	@RC	= 47
			GOTO  	EXIT_OPLATA_UPDATE
		END

	--	
	--	Проверка ссылки платежа одновременно и на Договор и на ПС
	--	
	IF @DOG_ID IS NOT NULL	AND	 @DOG_NPP IS NOT NULL	AND @PS_ID IS NOT NULL
		BEGIN
			SELECT	@RC	= 57
			GOTO	EXIT_OPLATA_UPDATE
		END	

	--	
	--	Проверка наличия Договора в БД
	--	
	IF @DOG_ID IS NOT NULL	AND	 @DOG_NPP IS NOT NULL
		BEGIN
				IF	NOT EXISTS ( 
								SELECT	*	
								FROM	U_DOGOVOR (NOLOCK)
								WHERE	RESIDENT_ID	=	@RESIDENT_ID	AND
										DOG_ID		=	@DOG_ID			AND
										DOG_NPP		=	@DOG_NPP		AND
										DEL_FLAG	IS	NULL																		
								)		
										BEGIN	
											SELECT	@RC	= 55
											GOTO	EXIT_OPLATA_UPDATE
										END
		END	

	--	
	--	Проверка наличия ПС в БД
	--	
	IF @PS_ID IS NOT NULL	
		BEGIN
				IF	NOT EXISTS ( 
								SELECT	*	
								FROM	U_PS (NOLOCK)
								WHERE	RESIDENT_ID	=	@RESIDENT_ID	AND
										PS_ID		=	@PS_ID			AND
										DEL_FLAG	IS	NULL																		
								)		
										BEGIN	
											SELECT	@RC	= 56
											GOTO	EXIT_OPLATA_UPDATE
										END
		END	

	--
	--  	Проверка наличия распределения у данного платежа
	--		
	SELECT	@KOL		= 0
	SELECT	@KOL2		= 0

	SELECT	@KOL = COUNT(*)
	FROM	U_RASPRED_OPLATA_SPR_CONFIRM (NOLOCK)
	WHERE	RESIDENT_ID	= @RESIDENT_ID	AND
			OPL_ID		= @OPL_ID	

	SELECT	@KOL2 = COUNT(*)
	FROM	U_RASPRED_OPLATA_OPLATA (NOLOCK)
	WHERE	RESIDENT_ID	= @RESIDENT_ID	AND
			(OPL_ID		= @OPL_ID	OR
			 OPL_ID2	= @OPL_ID)


	IF	@KOL + @KOL2 > 0
		--
		--	Распределение есть, нельзя менять Договор (контракт), КВЦ, направление, код валютной операции и детализацию
		--
		BEGIN	
			SELECT	@DOG_ID_OLD			= ISNULL(U_OPLATA.DOG_ID, U_PS.DOG_ID),
					@VALK_OLD			= U_OPLATA.VALK,	
					@DIRECTION_OLD		= U_OPLATA.DIRECTION,
					@KODOP_OLD			= U_OPLATA.KODOP,
					@TYPE_OLD			= U_OPLATA.TYPE
			FROM	U_OPLATA (NOLOCK)
			LEFT	OUTER JOIN	U_PS (NOLOCK) ON
					U_PS.RESIDENT_ID	= U_OPLATA.RESIDENT_ID	AND
					U_PS.PS_ID			= U_OPLATA.PS_ID		AND
					U_PS.DEL_FLAG		IS NULL			
			WHERE	U_OPLATA.RESIDENT_ID	= @RESIDENT_ID		AND
					U_OPLATA.OPL_ID			= @OPL_ID			AND
					U_OPLATA.DEL_FLAG 		IS NULL		

			IF	@PS_ID	IS NOT NULL
				-- запоминаем новый идентификатор Договора (контракта) по новому ПС
				SELECT	@DOG_ID_NEW	= DOG_ID
				FROM	U_PS (NOLOCK)
				WHERE	RESIDENT_ID	= @RESIDENT_ID	AND
						PS_ID		= @PS_ID		AND
						DEL_FLAG	IS NULL
			
			IF	@DOG_ID	IS NOT NULL
				-- запоминаем новый идентификатор Договора (контракта)
				SELECT	@DOG_ID_NEW	= @DOG_ID

			--	Нельзя менять Договор (контракт)
			IF	ISNULL(@DOG_ID_OLD, 0) <> ISNULL(@DOG_ID_NEW, 0) 
				BEGIN
					SELECT	@RC	= 206
					GOTO  	EXIT_OPLATA_UPDATE
				END

			--	Нельзя менять ПС (не используется с версии 2.1.0)
			--IF	ISNULL(@PS_ID_OLD, 0) <> ISNULL(@PS_ID, 0)
			--	BEGIN
			--		SELECT	@RC	= 201
			--		GOTO  	EXIT_OPLATA_UPDATE
			--	END

			--	Нельзя менять КВЦ
			IF	ISNULL(@VALK_OLD, '') <> ISNULL(@VALK, '')
				BEGIN
					SELECT	@RC	= 202
					GOTO  	EXIT_OPLATA_UPDATE
				END
			
			--	Нельзя менять направление
			IF	ISNULL(@DIRECTION_OLD, '') <> ISNULL(@DIRECTION, '')
				BEGIN
					SELECT	@RC	= 203
					GOTO  	EXIT_OPLATA_UPDATE
				END

			--	Нельзя менять код валютной операции 
			IF	ISNULL(@KODOP_OLD, '') <> ISNULL(@KODOP, '')
				BEGIN
					SELECT	@RC	= 204
					GOTO  	EXIT_OPLATA_UPDATE
				END

			--	Нельзя менять детализацию
			IF	ISNULL(@TYPE_OLD, '') <> ISNULL(@TYPE, '')
				BEGIN
					SELECT	@RC	= 205
					GOTO  	EXIT_OPLATA_UPDATE
				END

		END

	--
	--	@GID, @UNI_ID, @DOG_ID_BANK, @DOG_NPP_BANK, дата загрузки @D_LOAD, источник @SRC_LOAD и @NPP_BANK (если не переданы на вход, то берём значения из записи)
	--
	IF	@GID	IS	NULL 
		SELECT	@GID		= GID
		FROM	U_OPLATA (NOLOCK)
		WHERE	RESIDENT_ID	= @RESIDENT_ID	AND
				OPL_ID 		= @OPL_ID		AND
				DEL_FLAG	IS NULL		
	IF	@UNI_ID	IS	NULL 
		SELECT	@UNI_ID		= UNI_ID
		FROM	U_OPLATA (NOLOCK)
		WHERE	RESIDENT_ID	= @RESIDENT_ID	AND
				OPL_ID 		= @OPL_ID		AND
				DEL_FLAG	IS NULL		
	IF	@DOG_ID_BANK	IS	NULL 
		SELECT	@DOG_ID_BANK	= DOG_ID_BANK
		FROM	U_OPLATA (NOLOCK)
		WHERE	RESIDENT_ID		= @RESIDENT_ID	AND
				OPL_ID 			= @OPL_ID		AND
				DEL_FLAG		IS NULL		
	IF	@DOG_NPP_BANK	IS	NULL 
		SELECT	@DOG_NPP_BANK	= DOG_NPP_BANK
		FROM	U_OPLATA (NOLOCK)
		WHERE	RESIDENT_ID		= @RESIDENT_ID	AND
				OPL_ID 			= @OPL_ID		AND
				DEL_FLAG		IS NULL		
	IF	@D_LOAD	IS	NULL 
		SELECT	@D_LOAD		= D_LOAD
		FROM	U_OPLATA (NOLOCK)
		WHERE	RESIDENT_ID	= @RESIDENT_ID	AND
				OPL_ID 		= @OPL_ID		AND
				DEL_FLAG	IS NULL		
	IF	@SRC_LOAD	IS	NULL 
		SELECT	@SRC_LOAD	= SRC_LOAD
		FROM	U_OPLATA (NOLOCK)
		WHERE	RESIDENT_ID	= @RESIDENT_ID	AND
				OPL_ID 		= @OPL_ID		AND
				DEL_FLAG	IS NULL		
	IF	@NPP_BANK	IS	NULL 
		SELECT	@NPP_BANK	= NPP_BANK
		FROM	U_OPLATA (NOLOCK)
		WHERE	RESIDENT_ID	= @RESIDENT_ID	AND
				OPL_ID 		= @OPL_ID		AND
				DEL_FLAG	IS NULL		


	BEGIN TRANSACTION

	UPDATE	U_OPLATA 
	SET		NPP				= @NPP,
			DIRECTION		= @DIRECTION,
			BANK_ID			= @BANK_ID,
			SCHET_ID		= @SCHET_ID,
			KODOP			= @KODOP,
			VALP			= @VALP,
			SUMP			= @SUMP,
			VALK			= @VALK,
			SUMK			= @SUMK,
			KKURS			= @KKURS,
			KODS			= @KODS,
			PS_ID			= @PS_ID,
			N_PS_OLD		= @N_PS_OLD,
			D_PLAT			= @D_PLAT,
			N_PLAT			= @N_PLAT,
			D_REFER			= @D_REFER,
			N_REFER			= @N_REFER,
			PRIZ_OUT		= @PRIZ_OUT,
			PRIM			= @PRIM,
			TYPE			= @TYPE,
			TYPE_99010		= @TYPE_99010,
			KODS_IN_BANK	= @KODS_IN_BANK,
			PARTNER_ID		= @PARTNER_ID,
			IN_PART_BANK_ID	= @IN_PART_BANK_ID,
			D_VAL			= @D_VAL,
			KOD_VAL			= @KOD_VAL,
			SUM_VAL			= @SUM_VAL,
			VID_USLUG		= @VID_USLUG,
			VID_DIRECTION	= @VID_DIRECTION,
			PRIM_USLUG		= @PRIM_USLUG,
			PRIM_BANK		= @PRIM_BANK,
			NPP_BANK		= @NPP_BANK,
			DKOR			= CONVERT(SMALLDATETIME,GETDATE()),
			UNI_ID			= @UNI_ID,
			GID				= @GID,
			D_LOAD			= @D_LOAD,
			SRC_LOAD		= @SRC_LOAD,
			DOG_ID			= @DOG_ID,
			DOG_NPP			= @DOG_NPP,
			N_KONTR			= @N_KONTR,
			KONTR_SROK		= @KONTR_SROK,
			DOG_ID_BANK		= @DOG_ID_BANK,
			DOG_NPP_BANK	= @DOG_NPP_BANK
	WHERE	RESIDENT_ID		= @RESIDENT_ID	AND
			OPL_ID 			= @OPL_ID		AND
			DEL_FLAG		IS NULL		

	SELECT	@MY_ERROR	= @@ERROR, @MY_ROWCOUNT	= @@ROWCOUNT

	IF	@MY_ERROR <> 0
		BEGIN	
			ROLLBACK TRANSACTION
			SELECT	@RC		= 10
			GOTO	EXIT_OPLATA_UPDATE
		END

	IF	@MY_ROWCOUNT = 0
		BEGIN	
			ROLLBACK TRANSACTION
			SELECT	@RC		= 15
			GOTO	EXIT_OPLATA_UPDATE
		END

	--
	--	Проверка нарушения баланса по Платежу 
	--
	SELECT	@OST_OPLATA  		= SUMK 	
					- 
					(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM (NOLOCK) WHERE RESIDENT_ID = @RESIDENT_ID AND OPL_ID = @OPL_ID) 
					- 
					(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA (NOLOCK) WHERE RESIDENT_ID = @RESIDENT_ID AND (OPL_ID	= @OPL_ID OR OPL_ID2 = @OPL_ID))
	FROM	U_OPLATA (NOLOCK) 
	WHERE	RESIDENT_ID = @RESIDENT_ID	AND
			OPL_ID		= @OPL_ID 	AND
			DEL_FLAG	IS NULL

	IF	@OST_OPLATA	< 0 
		BEGIN
			ROLLBACK TRANSACTION
			SELECT @RC = 99
			GOTO   EXIT_OPLATA_UPDATE
		END

	SELECT	@RC		= 0

	--
	--	Добавление события в журнал событий
	--
	EXECUTE	@RETURN_STATUS	= U_EVENT_INSERT
			@EVENT_NAME		= 'UPD_OPLATA',
			@USER_ID		= @USER_ID,
			@RESIDENT_ID	= @RESIDENT_ID,
			@BANK_ID		= @BANK_ID,
			@PS_ID			= @PS_ID,
			@PLAT_ID 		= @OPL_ID,
			@NPP			= @NPP
			
	IF	@RETURN_STATUS <> 0
		ROLLBACK TRANSACTION
	ELSE
		COMMIT TRANSACTION

--
--	Возврат кода завершения
--
EXIT_OPLATA_UPDATE:
	SELECT	RC = @RC + @RETURN_STATUS
GO

	GRANT  EXECUTE  ON [dbo].[U_OPLATA_UPDATE]  TO [OPERS]
GO

--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[U_OPLATA_SPR_CONFIRM_RASPRED]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[U_OPLATA_SPR_CONFIRM_RASPRED]
GO

CREATE PROCEDURE [dbo].[U_OPLATA_SPR_CONFIRM_RASPRED]
--	-----------------------------------------------------------------------------------------------------------------------------------------------
--	Распределение Платежа на ПД
--	-----------------------------------------------------------------------------------------------------------------------------------------------
--
--	Возвращает @RC:	 				
--	   @RC =	0	- нормальное завершение							
--			10	- Платёж не найден
--			11	- Не определён Договор (контракт), на который ссылается Платёж
--			20	- ПД не найден
--			21	- ПД имеет признак "Не учитывать в расчёте сальдо, оборотов и не показывать в ВБК": распределение невозможно
--			22	- Не определён Договор (контракт), на который ссылается ПД
--			30	- Недопустимая Сумма распределения (<=0)
--			31	- Сумма распределения превышает остаток на Платеже
--			32	- Сумма распределения превышает остаток на ПД
--			40	- КВЦ ПД отличен от КВЦ Платежа
--			41	- Договор (контракт) ПД отличен от Договора (контракта) Платежа
--			45	- КВЦ распределения отличен от КВЦ Платежа (если имеется распределение данного Платежа на данный ПД)
--			50	- По направлению, коду вида валютной операции и детализации кода данный Платёж не может быть распределён на ПД.
--			51	- По коду вида документа и детализации кода данный ПД не может быть распределён на Платёж
--			52	- Направление, код валютной операции и детализации кода Платёжа не соответствуют коду вида документа и детализации кода ПД. Распределение невозможно.
--			60	- Ошибка при распределении
--			70	- Распределение не может быть выполнено - нарушение баланса по Платежу.
--			75	- Распределение не может быть выполнено - нарушение баланса по ПД.
--			100 - Ошибка регистрации события
--	-----------------------------------------------------------------------------------------------------------------------------------------------
--	(Модификация	в версии 2.1.0)
--	-----------------------------------------------------------------------------------------------------------------------------------------------
(
	@RESIDENT_ID 	AS INTEGER,
	@OPL_ID			AS INTEGER,
	@PD_ID			AS INTEGER,
	@SUMK			AS DECIMAL(16, 2),
	@USER_ID		AS VARCHAR(30),
	@RC				AS INTEGER OUTPUT
)
AS
	--
	--	Рабочие переменные
	--
	DECLARE	@RETURN_STATUS			AS INTEGER,
			@SUM_RASPRED			AS DECIMAL(16,2),	-- Сумма распределения (ранее сделанного)
			@VALK_RASPRED			AS CHAR(3),			-- КВЦ рапределения (ранее сделанного)
			@OST_OPLATA				AS DECIMAL(16,2),	-- Остаток на Платеже
			@VALK_OPLATA			AS CHAR(3),			-- КВЦ Платежа
			@DOG_ID_OPLATA			AS INTEGER,			-- Договор (контракт) Платежа
			@OST_SPR_CONFIRM		AS DECIMAL(16,2),	-- Остаток на ПД
			@VALK_SPR_CONFIRM		AS CHAR(3),			-- КВЦ ПД
			@DOG_ID_SPR_CONFIRM		AS INTEGER,			-- Договор (контракт) ПД
			@DIRECTION_OPLATA		AS CHAR(1),			-- Направление Платежа
			@KODOP_OPLATA			AS CHAR(5),			-- Код валютной операции Платежа
			@TYPE_OPLATA			AS CHAR(1),			-- Детализация кода валютной операции Платежа
			@KODD_SPR_CONFIRM		AS CHAR(2),			-- Код вида документа ПД
			@DIRECTION_SPR_CONFIRM	AS CHAR(1),			-- Детализация кода вида документа ПД
			@PRIZ_OPLATA			AS INTEGER,			-- "Тип" Платежа для распределения
			@PRIZ_SPR_CONFIRM		AS INTEGER,			-- "Тип" ПД для распределения
			@PR_NOT_CALC			AS CHAR(1)			-- Признак ПД "Не учитывать в расчёте сальдо, оборотов и не показывать в ВБК"
		
	--
	--	Начальные значения
	--
	SELECT	@RETURN_STATUS			= 0
	SELECT	@SUM_RASPRED			= 0
	SELECT	@VALK_RASPRED			= ''
	SELECT	@OST_OPLATA				= 0
	SELECT	@VALK_OPLATA			= ''
	SELECT	@DOG_ID_OPLATA			= 0
	SELECT	@OST_SPR_CONFIRM		= 0
	SELECT	@VALK_SPR_CONFIRM		= ''
	SELECT	@DOG_ID_SPR_CONFIRM		= 0
	SELECT	@DIRECTION_OPLATA		= ''
	SELECT	@KODOP_OPLATA			= ''
	SELECT	@TYPE_OPLATA			= ''
	SELECT	@KODD_SPR_CONFIRM		= ''
	SELECT	@DIRECTION_SPR_CONFIRM	= ''
	SELECT	@PRIZ_OPLATA			= 0
	SELECT	@PRIZ_SPR_CONFIRM		= 0
	SELECT	@PR_NOT_CALC			= NULL

	--
	--	Определяем Сумму и КВЦ распределения (ранее сделанного)
	--
	SELECT	@SUM_RASPRED	= SUMK,
			@VALK_RASPRED	= VALK
	FROM	U_RASPRED_OPLATA_SPR_CONFIRM (NOLOCK) 
	WHERE	RESIDENT_ID 	= @RESIDENT_ID	AND
			OPL_ID			= @OPL_ID 		AND
			PD_ID			= @PD_ID	

	--
	--	Определяем Остаток, КВЦ, Договор (контракт), Направление, Код вал.опер и Детализацию кода Платежа
	--
	SELECT	@OST_OPLATA = U_OPLATA.SUMK 	
						- 
						(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM (NOLOCK) WHERE RESIDENT_ID = @RESIDENT_ID AND OPL_ID = @OPL_ID) 
						- 
						(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA (NOLOCK) WHERE RESIDENT_ID = @RESIDENT_ID AND (OPL_ID	= @OPL_ID OR OPL_ID2 = @OPL_ID)),
			@VALK_OPLATA 		= U_OPLATA.VALK,
			@DOG_ID_OPLATA		= ISNULL(U_OPLATA.DOG_ID, ISNULL(DOG_PS.DOG_ID, 0)),
			@DIRECTION_OPLATA 	= U_OPLATA.DIRECTION,
			@KODOP_OPLATA		= U_OPLATA.KODOP,
			@TYPE_OPLATA		= U_OPLATA.TYPE
	FROM	U_OPLATA (NOLOCK) 
	LEFT	OUTER JOIN	U_PS (NOLOCK)ON 
			U_PS.PS_ID			= U_OPLATA.PS_ID		AND
			U_PS.RESIDENT_ID	= U_OPLATA.RESIDENT_ID	AND
			U_PS.DEL_FLAG		IS NULL	
	LEFT	OUTER JOIN	U_DOGOVOR AS DOG_PS (NOLOCK) ON
			DOG_PS.RESIDENT_ID	= U_PS.RESIDENT_ID		AND
			DOG_PS.DOG_ID		= U_PS.DOG_ID			AND
			DOG_PS.DOG_NPP		= U_PS.DOG_NPP			AND
			DOG_PS.DEL_FLAG		IS NULL
	WHERE	U_OPLATA.RESIDENT_ID	= @RESIDENT_ID		AND
			U_OPLATA.OPL_ID			= @OPL_ID 			AND
			U_OPLATA.DEL_FLAG		IS NULL
	
	IF	ISNULL(@VALK_OPLATA, '' ) = ''
		BEGIN
			SELECT @RC = 10
			GOTO   EXIT_OPLATA_SPR_CONFIRM_RASPRED
		END

	IF	ISNULL(@DOG_ID_OPLATA, 0 ) = 0
		BEGIN
			SELECT @RC = 11
			GOTO   EXIT_OPLATA_SPR_CONFIRM_RASPRED
		END


	--
	--	Определяем Признак PR_NOT_CALC, Остаток, КВЦ, Договор (контракт), Код вида документа и Детализацию кода ПД
	--
	SELECT	@OST_SPR_CONFIRM	= U_SPR_CONFIRM.SUMK 	- 
							( SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = @RESIDENT_ID AND R.PD_ID = @PD_ID ),
			@VALK_SPR_CONFIRM		= U_SPR_CONFIRM.VALK,
			@DOG_ID_SPR_CONFIRM		= ISNULL(U_SPR_CONFIRM.DOG_ID, ISNULL(DOG_PS.DOG_ID, 0)),
			@KODD_SPR_CONFIRM		= U_SPR_CONFIRM.KODD,
			@DIRECTION_SPR_CONFIRM	= U_SPR_CONFIRM.DIRECTION,
			@PR_NOT_CALC			= U_SPR_CONFIRM.PR_NOT_CALC
	FROM	U_SPR_CONFIRM (NOLOCK) 
	LEFT	OUTER JOIN	U_PS (NOLOCK)ON 
			U_PS.PS_ID					= U_SPR_CONFIRM.PS_ID		AND
			U_PS.RESIDENT_ID			= U_SPR_CONFIRM.RESIDENT_ID	AND
			U_PS.DEL_FLAG				IS NULL	
	LEFT	OUTER JOIN	U_DOGOVOR AS DOG_PS (NOLOCK) ON
			DOG_PS.RESIDENT_ID			= U_PS.RESIDENT_ID			AND
			DOG_PS.DOG_ID				= U_PS.DOG_ID				AND
			DOG_PS.DOG_NPP				= U_PS.DOG_NPP				AND
			DOG_PS.DEL_FLAG				IS NULL
	WHERE	U_SPR_CONFIRM.RESIDENT_ID 	= @RESIDENT_ID				AND
			U_SPR_CONFIRM.PD_ID			= @PD_ID					AND
			U_SPR_CONFIRM.DEL_FLAG		IS NULL

	IF	ISNULL( @VALK_SPR_CONFIRM, '' ) = '' 
		BEGIN
			SELECT @RC = 20
			GOTO   EXIT_OPLATA_SPR_CONFIRM_RASPRED
		END

	IF	ISNULL(@DOG_ID_SPR_CONFIRM, 0 ) = 0
		BEGIN
			SELECT @RC = 22
			GOTO   EXIT_OPLATA_SPR_CONFIRM_RASPRED
		END


	--
	--	Проверка 0: ПД имеет признак "Не учитывать в расчёте сальдо, оборотов и не показывать в ВБК"
	--
	IF	@PR_NOT_CALC	IS NOT NULL	
		BEGIN
			SELECT @RC = 21
			GOTO   EXIT_OPLATA_SPR_CONFIRM_RASPRED
		END

	--
	--	Проверка 1: Недопустимая Сумма к распределению (<=0)
	--
	IF	ISNULL(@SUMK, 0) <= 0 
		BEGIN
			SELECT @RC = 30
			GOTO   EXIT_OPLATA_SPR_CONFIRM_RASPRED
		END

	--
	--	Проверка 2: Сумма к распределению превышает остаток на Платеже
	--
	IF	@SUMK > @OST_OPLATA		 
		BEGIN
			SELECT @RC = 31
			GOTO   EXIT_OPLATA_SPR_CONFIRM_RASPRED
		END

	--
	--	Проверка 3: Сумма к распределению превышает остаток на ПД
	--
	IF	@SUMK > @OST_SPR_CONFIRM			 
		BEGIN
			SELECT @RC = 32
			GOTO   EXIT_OPLATA_SPR_CONFIRM_RASPRED
		END

	--
	--	Проверка 4: КВЦ ПД отличен от КВЦ Платежа 
	--
	IF	LTRIM(RTRIM(@VALK_SPR_CONFIRM)) <> LTRIM(RTRIM(@VALK_OPLATA))
		BEGIN
			SELECT @RC = 40
			GOTO   EXIT_OPLATA_SPR_CONFIRM_RASPRED
		END

	--
	--	Проверка 5: Договор (контракт) ПД отличен от Договора (контракта) Платежа 
	--
	IF	ISNULL(@DOG_ID_OPLATA, 0) <> @DOG_ID_SPR_CONFIRM
		BEGIN
			SELECT @RC = 41
			GOTO   EXIT_OPLATA_SPR_CONFIRM_RASPRED
		END

	--
	--	Проверка 6: КВЦ распределения отличен от КВЦ Платежа 
	--	(если имеется распределение данного Платежа на данный ПД)
	--
	IF	LEN(LTRIM(RTRIM(@VALK_RASPRED))) > 0
		BEGIN
		IF	LTRIM(RTRIM(@VALK_RASPRED)) <> LTRIM(RTRIM(@VALK_OPLATA))
			BEGIN
				SELECT @RC = 45
				GOTO   EXIT_OPLATA_SPR_CONFIRM_RASPRED
			END
		END

	--
	--	Проверка 7: По направлению, коду вида валютной операции и детализации кода данный Платёж не может быть распределён на ПД
	--
	SELECT	@PRIZ_OPLATA	= 0

	--	Экспорт товаров
	IF	@DIRECTION_OPLATA = '1'	AND	(	( @KODOP_OPLATA	>= '10010' AND @KODOP_OPLATA <= '10090' )
						   OR 
							( @KODOP_OPLATA = '35020' AND @TYPE_OPLATA = '1' ) 
	        				)
		SELECT	@PRIZ_OPLATA	= 1
        
	--	Импорт товаров
	IF	@DIRECTION_OPLATA = '2' AND	(	( @KODOP_OPLATA >= '11010' AND @KODOP_OPLATA <= '11060' )
						    OR
						        ( @KODOP_OPLATA = '35020' AND @TYPE_OPLATA = '2' ) 
					        ) 
		SELECT	@PRIZ_OPLATA	= 2

	--	Экспорт услуг
	IF	@DIRECTION_OPLATA = '1' AND     (       ( @KODOP_OPLATA >= '20010' AND @KODOP_OPLATA <= '20070' ) 
						    OR
						        ( @KODOP_OPLATA = '35020' AND @TYPE_OPLATA = '3' ) 
					        ) 
		SELECT	@PRIZ_OPLATA	= 3

	--	Импорт услуг
	IF	@DIRECTION_OPLATA = '2' AND	(	( @KODOP_OPLATA >= '21010' AND @KODOP_OPLATA <= '21040' )
					            OR
						        ( @KODOP_OPLATA = '35020' AND @TYPE_OPLATA = '4' ) 
					         )
		SELECT	@PRIZ_OPLATA	= 4

	IF	@PRIZ_OPLATA	= 0
			BEGIN
				SELECT @RC = 50
				GOTO   EXIT_OPLATA_SPR_CONFIRM_RASPRED
			END


	--
	--	Проверка 8: По коду вида документа и детализации кода данный ПД не может быть распределён на Платёж
	--
	SELECT	@PRIZ_SPR_CONFIRM	= 0

	--	Экспорт товаров
	IF	@KODD_SPR_CONFIRM >= '01' AND @KODD_SPR_CONFIRM	<= '02' AND @DIRECTION_SPR_CONFIRM = '2' OR @KODD_SPR_CONFIRM = '03'
		SELECT	@PRIZ_SPR_CONFIRM	= 1	

	--	Импорт товаров
	IF	@KODD_SPR_CONFIRM >= '01' AND @KODD_SPR_CONFIRM <= '02' AND @DIRECTION_SPR_CONFIRM = '1' 
		SELECT	@PRIZ_SPR_CONFIRM	= 2

	--	Экспорт услуг
	IF	@KODD_SPR_CONFIRM = '04' AND @DIRECTION_SPR_CONFIRM = '2' OR @KODD_SPR_CONFIRM = '05'
		SELECT	@PRIZ_SPR_CONFIRM	= 3

	--	Импорт услуг
	IF	@KODD_SPR_CONFIRM = '04' AND @DIRECTION_SPR_CONFIRM = '1'
		SELECT	@PRIZ_SPR_CONFIRM	= 4

	IF	@PRIZ_SPR_CONFIRM	= 0
		BEGIN
			SELECT @RC = 51
			GOTO   EXIT_OPLATA_SPR_CONFIRM_RASPRED
		END


	--
	--	Проверка 9: Направление, код валютной операции и детализации кода Платёжа не соответствуют коду вида документа и детализации кода ПД. Распределение невозможно.
	--
	IF	@PRIZ_OPLATA	<> @PRIZ_SPR_CONFIRM
		BEGIN
			SELECT @RC = 52
			GOTO   EXIT_OPLATA_SPR_CONFIRM_RASPRED
		END


	--
	--	Все предварительные проверки прошли, начинаем распределение
	--
	BEGIN TRANSACTION

	IF	LEN(LTRIM(RTRIM(@VALK_RASPRED))) > 0
		--	Делаем UPDATE
		UPDATE	U_RASPRED_OPLATA_SPR_CONFIRM 
		SET		SUMK		= SUMK + @SUMK,
				SPR_ID		= NULL,
				NPP			= NULL,
				D_KOR		= CONVERT(SMALLDATETIME, GETDATE()),
				[USER_ID]	= @USER_ID
		WHERE	RESIDENT_ID = @RESIDENT_ID	AND
				OPL_ID		= @OPL_ID 		AND
				PD_ID		= @PD_ID		AND
				VALK		= @VALK_OPLATA
	
	ELSE	--	IF	@SUM_RASPRED IS NULL
		--	Делаем INSERT
		INSERT	INTO	U_RASPRED_OPLATA_SPR_CONFIRM 
				(
				RESIDENT_ID,
				OPL_ID,
				PD_ID,
				SPR_ID,
				NPP,
				SUMK,
				VALK,
				D_KOR,
				[USER_ID]
				)
			VALUES
				(
				@RESIDENT_ID,
				@OPL_ID,
				@PD_ID,
				NULL,
				NULL,
				@SUMK,
				@VALK_OPLATA,
				CONVERT(SMALLDATETIME, GETDATE()),
				@USER_ID
				)

	IF	@@ERROR <> 0
		BEGIN	
			ROLLBACK TRANSACTION 
			SELECT	@RC	= 60
			GOTO	EXIT_OPLATA_SPR_CONFIRM_RASPRED
		END
	
	--
	--	Проверка 10: Нарушение баланса по Платежу 
	--
	SELECT	@OST_OPLATA  		= SUMK 	
					- 
					(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM (NOLOCK) WHERE RESIDENT_ID = @RESIDENT_ID AND OPL_ID = @OPL_ID) 
					- 
					(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA (NOLOCK) WHERE RESIDENT_ID = @RESIDENT_ID AND (OPL_ID	= @OPL_ID OR OPL_ID2 = @OPL_ID))
	FROM	U_OPLATA (NOLOCK) 
	WHERE	RESIDENT_ID = @RESIDENT_ID	AND
			OPL_ID		= @OPL_ID 		AND
			DEL_FLAG	IS NULL

	IF	@OST_OPLATA	< 0 
		BEGIN
			ROLLBACK TRANSACTION	
			SELECT @RC = 70
			GOTO   EXIT_OPLATA_SPR_CONFIRM_RASPRED
		END


	--
	--	Проверка 11: Нарушение баланса по ПД
	--
	SELECT	@OST_SPR_CONFIRM	= SUMK 	- 
					( SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = @RESIDENT_ID AND R.PD_ID = @PD_ID )
	FROM	U_SPR_CONFIRM (NOLOCK) 
	WHERE	RESIDENT_ID = @RESIDENT_ID	AND
			PD_ID		= @PD_ID		AND
			DEL_FLAG	IS NULL

	IF	@OST_SPR_CONFIRM	< 0
		BEGIN
			ROLLBACK TRANSACTION	
			SELECT @RC = 75
			GOTO   EXIT_OPLATA_SPR_CONFIRM_RASPRED
		END

	--
	--	Формируем код возврата
	--
	SELECT	@RC 	= 0

	--
	--	Добавление события в журнал событий
	--
	EXECUTE	@RETURN_STATUS	= U_EVENT_INSERT
			@EVENT_NAME		= 'MAKE_RASPRED',
			@USER_ID		= @USER_ID,
			@RESIDENT_ID	= @RESIDENT_ID,
			@PLAT_ID		= @OPL_ID,
			@SPR_ID			= @PD_ID
			
	IF	@RETURN_STATUS <> 0
		ROLLBACK TRANSACTION				
	ELSE 
		COMMIT TRANSACTION 

--
--	Возврат кода завершения 
--
EXIT_OPLATA_SPR_CONFIRM_RASPRED:
	SELECT	RC = @RC + @RETURN_STATUS
GO

GRANT  EXECUTE  ON [dbo].[U_OPLATA_SPR_CONFIRM_RASPRED]  TO [OPERS]
GO

--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[U_OPLATA_SELECT_RASPRED]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[U_OPLATA_SELECT_RASPRED]
GO

CREATE PROCEDURE [dbo].[U_OPLATA_SELECT_RASPRED]
--	----------------------------------------------------------
--	Выборка списка Платежей, распределённых на данный ПД
--	----------------------------------------------------------
--	(Модификация	в версии 2.1.0)
--	----------------------------------------------------------
(
	@RESIDENT_ID	AS INTEGER,
	@PD_ID			AS INTEGER
)
AS
	SET NOCOUNT ON
	--
	--	Рабочие переменные
	--
	DECLARE	@PS_ID	AS INTEGER,
			@MARK	AS BIT

	--
	--	Начальные значения
	--
	SELECT	@PS_ID	= 0
	SELECT	@MARK	= 0

	--
	--	Запоминаем ПС данного ПД (для признака Другой ПС - PRIZ_DR_PS)
	--
	SELECT	@PS_ID	= ISNULL(U_SPR_CONFIRM.PS_ID, 0)
	FROM	U_SPR_CONFIRM (NOLOCK) 
	WHERE	U_SPR_CONFIRM.RESIDENT_ID 	= @RESIDENT_ID			AND
			U_SPR_CONFIRM.PD_ID 		= @PD_ID 				AND
			U_SPR_CONFIRM.DEL_FLAG 		IS NULL		

	SELECT	U_OPLATA.RESIDENT_ID, U_OPLATA.PS_ID, 
			@MARK AS MARK,
			U_OPLATA.SUMK - 
			(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID) 
			- 
			(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND (R.OPL_ID = U_OPLATA.OPL_ID OR R.OPL_ID2 = U_OPLATA.OPL_ID)) AS SUM_OST,
			U_PS.N_PS, 
			CASE
				WHEN	ISNULL(U_OPLATA.PS_ID, 0) > 0			AND
						@PS_ID > 0								AND
						ISNULL(U_OPLATA.PS_ID, 0) <> @PS_ID
				THEN	'*'
				ELSE	NULL
			END	AS	PRIZ_DR_PS,
			U_OPLATA.NPP,
			U_OPLATA.DIRECTION, 		
			U_OPLATA.KODOP, 
			U_OPLATA.TYPE, 
			U_OPLATA.D_REFER, 
			U_OPLATA.VALK,		
			U_OPLATA.SUMK, 
			((SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID) 
			+ 
			(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND (R.OPL_ID = U_OPLATA.OPL_ID OR R.OPL_ID2 = U_OPLATA.OPL_ID))) AS SUM_RASPR_ALL,
			U_RASPRED_OPLATA_SPR_CONFIRM.SUMK AS SUM_RASPR_THIS_PD,
			U_RASPRED_OPLATA_SPR_CONFIRM.D_KOR AS D_RASPR_THIS_PD,
			U_OPLATA.OPL_ID, 
			U_OPLATA.VALP,
			U_OPLATA.SUMP 
	FROM	U_OPLATA (NOLOCK)
	INNER   JOIN U_RASPRED_OPLATA_SPR_CONFIRM (NOLOCK) ON
			U_RASPRED_OPLATA_SPR_CONFIRM.RESIDENT_ID	= @RESIDENT_ID			AND
			U_RASPRED_OPLATA_SPR_CONFIRM.PD_ID 			= @PD_ID				AND
			U_RASPRED_OPLATA_SPR_CONFIRM.OPL_ID			= U_OPLATA.OPL_ID	
	LEFT	OUTER JOIN	U_PS	(NOLOCK) ON
			U_PS.RESIDENT_ID							= U_OPLATA.RESIDENT_ID	AND
			U_PS.PS_ID									= U_OPLATA.PS_ID		AND
			U_PS.DEL_FLAG								IS NULL
	WHERE 	U_OPLATA.RESIDENT_ID						= @RESIDENT_ID			AND
			U_OPLATA.DEL_FLAG							IS NULL			
	ORDER	BY D_REFER
GO

GRANT  EXECUTE  ON [dbo].[U_OPLATA_SELECT_RASPRED]  TO [OPERS], [AUDITS]
GO

--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[U_OPLATA_SELECT_NOTRASPRED]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[U_OPLATA_SELECT_NOTRASPRED]
GO

CREATE PROCEDURE [dbo].[U_OPLATA_SELECT_NOTRASPRED]
--	---------------------------------------------------------------------------------
--	Выборка списка Платежей с ненулевым остатком для распределения на данный ПД
--	---------------------------------------------------------------------------------
--	
--	Параметр @FLAG_SELECT определяет набор Платежей, 
--	ограниченный по направлению, кодам вида валютной операции и детализации кода:
--		0 - все Платежи
--		1 - Платежи Экспорт товаров
--		2 - Платежи Импорт товаров
--		3 - Платежи Экспорт услуг
--		4 - Платежи Импорт услуг
--	---------------------------------------------------------------------------------
--	(Модификация	в версии 2.1.0)
--	---------------------------------------------------------------------------------
(
	@RESIDENT_ID	AS INTEGER,
	@PD_ID			AS INTEGER,
	@FLAG_SELECT	AS INTEGER
)
AS
	SET NOCOUNT ON
	--
	--	Рабочие переменные
	--
	DECLARE	@DOG_ID	AS INTEGER,
			@PS_ID	AS INTEGER,
			@VALK	AS CHAR(3),
			@MARK	AS BIT

	--
	--	Начальные значения
	--
	SELECT	@DOG_ID	= 0
	SELECT	@PS_ID	= 0
	SELECT	@VALK	= ''
	SELECT	@MARK	= 0

	--
	--	Запоминаем Договор, ПС (для признака Другой ПС - PRIZ_DR_PS) и КВЦ данного ПД
	--
	SELECT	@DOG_ID	= ISNULL(U_SPR_CONFIRM.DOG_ID, ISNULL(DOG_PS.DOG_ID, 0)),
			@PS_ID	= ISNULL(U_SPR_CONFIRM.PS_ID, 0),
			@VALK	= U_SPR_CONFIRM.VALK
	FROM	U_SPR_CONFIRM (NOLOCK) 
	LEFT	OUTER JOIN	U_PS	(NOLOCK) ON
			U_PS.RESIDENT_ID			= U_SPR_CONFIRM.RESIDENT_ID	AND
			U_PS.PS_ID					= U_SPR_CONFIRM.PS_ID		AND
			U_PS.DEL_FLAG				IS NULL
	LEFT	OUTER JOIN	U_DOGOVOR AS DOG_PS (NOLOCK) ON
			DOG_PS.RESIDENT_ID			= U_PS.RESIDENT_ID			AND
			DOG_PS.DOG_ID				= U_PS.DOG_ID				AND
			DOG_PS.DOG_NPP				= U_PS.DOG_NPP				AND
			DOG_PS.DEL_FLAG				IS NULL
	WHERE	U_SPR_CONFIRM.RESIDENT_ID 	= @RESIDENT_ID				AND
			U_SPR_CONFIRM.PD_ID 		= @PD_ID 					AND
			U_SPR_CONFIRM.DEL_FLAG 		IS NULL			

	IF @FLAG_SELECT = 1
	--
	--	Выбираем Платежи Экспорт товаров
	--
	SELECT	U_OPLATA.RESIDENT_ID, U_OPLATA.PS_ID, 
			ISNULL(U_OPLATA.DOG_ID, DOG_PS.DOG_ID)			AS OPL_DOG_ID,
			@MARK AS MARK,
			U_OPLATA.SUMK 
			- 
			(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID) 
			- 
			(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND (R.OPL_ID = U_OPLATA.OPL_ID OR R.OPL_ID2 = U_OPLATA.OPL_ID)) 
			AS SUM_OST,
			U_PS.N_PS,
			CASE
				WHEN	ISNULL(U_OPLATA.PS_ID, 0) > 0			AND
						@PS_ID > 0								AND
						ISNULL(U_OPLATA.PS_ID, 0) <> @PS_ID
				THEN	'*'
				ELSE	NULL
			END	AS	PRIZ_DR_PS,
			U_OPLATA.NPP,
			U_OPLATA.DIRECTION, 		
			U_OPLATA.KODOP, 
			U_OPLATA.TYPE, 
			U_OPLATA.D_REFER, 
			U_OPLATA.VALK,		
			U_OPLATA.SUMK, 
			(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID) 
			+ 
			(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND (R.OPL_ID = U_OPLATA.OPL_ID OR R.OPL_ID2 = U_OPLATA.OPL_ID)) 
			AS SUM_RASPR_ALL,
			( SELECT SUM(SUMK) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID AND R.PD_ID = @PD_ID ) 
			AS SUM_RASPR_THIS_PD,
			( SELECT MAX(D_KOR) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID AND R.PD_ID = @PD_ID ) 
			AS D_RASPR_THIS_PD,
			U_OPLATA.OPL_ID, 
			U_OPLATA.VALP,
			U_OPLATA.SUMP 
	FROM	U_OPLATA (NOLOCK)
	LEFT	OUTER JOIN	U_PS	(NOLOCK) ON
			U_PS.RESIDENT_ID		= U_OPLATA.RESIDENT_ID			AND
			U_PS.PS_ID				= U_OPLATA.PS_ID				AND
			U_PS.DEL_FLAG			IS NULL
	LEFT	OUTER JOIN	U_DOGOVOR AS DOG_PS (NOLOCK) ON
			DOG_PS.RESIDENT_ID		= U_PS.RESIDENT_ID				AND
			DOG_PS.DOG_ID			= U_PS.DOG_ID					AND
			DOG_PS.DOG_NPP			= U_PS.DOG_NPP					AND
			DOG_PS.DEL_FLAG			IS NULL
	WHERE 	U_OPLATA.RESIDENT_ID					= @RESIDENT_ID	AND
			ISNULL(U_OPLATA.DOG_ID, DOG_PS.DOG_ID)	= @DOG_ID		AND
			U_OPLATA.VALK							= @VALK			AND
			U_OPLATA.DEL_FLAG						IS NULL			AND
			U_OPLATA.SUMK 
			-
			(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID) 
			- 
			(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND (R.OPL_ID = U_OPLATA.OPL_ID OR R.OPL_ID2 = U_OPLATA.OPL_ID)) > 0 AND
			( U_OPLATA.DIRECTION = '1'	AND 
			( ( U_OPLATA.KODOP >= '10010'	AND U_OPLATA.KODOP <= '10090') 
			OR
		 	  ( U_OPLATA.KODOP = '35020'	AND U_OPLATA.TYPE = '1' ) ) 
			)
	ORDER	BY U_OPLATA.D_REFER

	ELSE IF @FLAG_SELECT = 2
	--
	--	Выбираем Платежи Импорт товаров
	--
	SELECT	U_OPLATA.RESIDENT_ID, U_OPLATA.PS_ID,
			ISNULL(U_OPLATA.DOG_ID, DOG_PS.DOG_ID)			AS OPL_DOG_ID, 
			@MARK AS MARK,
			U_OPLATA.SUMK 
			- 
			(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID) 
			- 
			(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND (R.OPL_ID = U_OPLATA.OPL_ID OR R.OPL_ID2 = U_OPLATA.OPL_ID)) 
			AS SUM_OST,
			U_PS.N_PS,
			CASE
				WHEN	ISNULL(U_OPLATA.PS_ID, 0) > 0			AND
						@PS_ID > 0								AND
						ISNULL(U_OPLATA.PS_ID, 0) <> @PS_ID
				THEN	'*'
				ELSE	NULL
			END	AS	PRIZ_DR_PS,
			U_OPLATA.NPP,
			U_OPLATA.DIRECTION, 		
			U_OPLATA.KODOP, 
			U_OPLATA.TYPE, 
			U_OPLATA.D_REFER, 
			U_OPLATA.VALK,		
			U_OPLATA.SUMK, 
			(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID) 
			+ 
			(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND (R.OPL_ID = U_OPLATA.OPL_ID OR R.OPL_ID2 = U_OPLATA.OPL_ID)) 
			AS SUM_RASPR_ALL,
			( SELECT SUM(SUMK) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID AND R.PD_ID = @PD_ID ) 
			AS SUM_RASPR_THIS_PD,
			( SELECT MAX(D_KOR) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID AND R.PD_ID = @PD_ID ) 
			AS D_RASPR_THIS_PD,
			U_OPLATA.OPL_ID, 
			U_OPLATA.VALP,
			U_OPLATA.SUMP 
	FROM	U_OPLATA (NOLOCK)
	LEFT	OUTER JOIN	U_PS	(NOLOCK) ON
			U_PS.RESIDENT_ID		= U_OPLATA.RESIDENT_ID			AND
			U_PS.PS_ID				= U_OPLATA.PS_ID				AND
			U_PS.DEL_FLAG			IS NULL
	LEFT	OUTER JOIN	U_DOGOVOR AS DOG_PS (NOLOCK) ON
			DOG_PS.RESIDENT_ID		= U_PS.RESIDENT_ID				AND
			DOG_PS.DOG_ID			= U_PS.DOG_ID					AND
			DOG_PS.DOG_NPP			= U_PS.DOG_NPP					AND
			DOG_PS.DEL_FLAG			IS NULL
	WHERE 	U_OPLATA.RESIDENT_ID					= @RESIDENT_ID	AND
			ISNULL(U_OPLATA.DOG_ID, DOG_PS.DOG_ID)	= @DOG_ID		AND
			U_OPLATA.VALK							= @VALK			AND
			U_OPLATA.DEL_FLAG						IS NULL			AND
			U_OPLATA.SUMK 
			-
			(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID) 
			- 
			(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND (R.OPL_ID = U_OPLATA.OPL_ID OR R.OPL_ID2 = U_OPLATA.OPL_ID)) > 0 AND
			( U_OPLATA.DIRECTION = '2'	AND
		        ( ( U_OPLATA.KODOP >= '11010'	AND U_OPLATA.KODOP <= '11060' ) 
			OR
		          ( U_OPLATA.KODOP = '35020'	AND U_OPLATA.TYPE = '2' ) )
			)
	ORDER	BY U_OPLATA.D_REFER

	ELSE IF @FLAG_SELECT = 3
	--
	--	Выбираем Платежи Экспорт услуг
	--
	SELECT	U_OPLATA.RESIDENT_ID, U_OPLATA.PS_ID, 
			ISNULL(U_OPLATA.DOG_ID, DOG_PS.DOG_ID)			AS OPL_DOG_ID,
			@MARK AS MARK,
			U_OPLATA.SUMK 
			- 
			(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID) 
			- 
			(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND (R.OPL_ID = U_OPLATA.OPL_ID OR R.OPL_ID2 = U_OPLATA.OPL_ID)) 
			AS SUM_OST,
			U_PS.N_PS,
			CASE
				WHEN	ISNULL(U_OPLATA.PS_ID, 0) > 0			AND
						@PS_ID > 0								AND
						ISNULL(U_OPLATA.PS_ID, 0) <> @PS_ID
				THEN	'*'
				ELSE	NULL
			END	AS	PRIZ_DR_PS,
			U_OPLATA.NPP,
			U_OPLATA.DIRECTION, 		
			U_OPLATA.KODOP, 
			U_OPLATA.TYPE, 
			U_OPLATA.D_REFER, 
			U_OPLATA.VALK,		
			U_OPLATA.SUMK, 
			(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID) 
			+ 
			(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND (R.OPL_ID = U_OPLATA.OPL_ID OR R.OPL_ID2 = U_OPLATA.OPL_ID)) 
			AS SUM_RASPR_ALL,
			( SELECT SUM(SUMK) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID AND R.PD_ID = @PD_ID ) 
			AS SUM_RASPR_THIS_PD,
			( SELECT MAX(D_KOR) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID AND R.PD_ID = @PD_ID  ) 
			AS D_RASPR_THIS_PD,
			U_OPLATA.OPL_ID, 
			U_OPLATA.VALP,
			U_OPLATA.SUMP 
	FROM	U_OPLATA (NOLOCK)
	LEFT	OUTER JOIN	U_PS	(NOLOCK) ON
			U_PS.RESIDENT_ID		= U_OPLATA.RESIDENT_ID			AND
			U_PS.PS_ID				= U_OPLATA.PS_ID				AND
			U_PS.DEL_FLAG			IS NULL
	LEFT	OUTER JOIN	U_DOGOVOR AS DOG_PS (NOLOCK) ON
			DOG_PS.RESIDENT_ID		= U_PS.RESIDENT_ID				AND
			DOG_PS.DOG_ID			= U_PS.DOG_ID					AND
			DOG_PS.DOG_NPP			= U_PS.DOG_NPP					AND
			DOG_PS.DEL_FLAG			IS NULL
	WHERE 	U_OPLATA.RESIDENT_ID					= @RESIDENT_ID	AND
			ISNULL(U_OPLATA.DOG_ID, DOG_PS.DOG_ID)	= @DOG_ID		AND
			U_OPLATA.VALK							= @VALK			AND
			U_OPLATA.DEL_FLAG						IS NULL			AND
			U_OPLATA.SUMK 
			-
			(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID) 
			- 
			(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND (R.OPL_ID = U_OPLATA.OPL_ID OR R.OPL_ID2 = U_OPLATA.OPL_ID)) > 0 AND
			( U_OPLATA.DIRECTION = '1'	AND
		        ( ( U_OPLATA.KODOP >= '20010'	AND U_OPLATA.KODOP <= '20070' ) 
			OR
		        ( U_OPLATA.KODOP = '35020'	AND U_OPLATA.TYPE = '3' ) )
			)
	ORDER	BY U_OPLATA.D_REFER

	ELSE IF @FLAG_SELECT = 4
	--
	--	Выбираем Платежи Импорт услуг
	--
	SELECT	U_OPLATA.RESIDENT_ID, U_OPLATA.PS_ID, 
			ISNULL(U_OPLATA.DOG_ID, DOG_PS.DOG_ID)			AS OPL_DOG_ID,
			@MARK AS MARK,
			U_OPLATA.SUMK 
			- 
			(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID) 
			- 
			(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND (R.OPL_ID = U_OPLATA.OPL_ID OR R.OPL_ID2 = U_OPLATA.OPL_ID)) 
			AS SUM_OST,
			U_PS.N_PS,
			CASE
				WHEN	ISNULL(U_OPLATA.PS_ID, 0) > 0			AND
						@PS_ID > 0								AND
						ISNULL(U_OPLATA.PS_ID, 0) <> @PS_ID
				THEN	'*'
				ELSE	NULL
			END	AS	PRIZ_DR_PS,
			U_OPLATA.NPP,
			U_OPLATA.DIRECTION, 		
			U_OPLATA.KODOP, 
			U_OPLATA.TYPE, 
			U_OPLATA.D_REFER, 
			U_OPLATA.VALK,		
			U_OPLATA.SUMK, 
			(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID) 
			+ 
			(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND (R.OPL_ID = U_OPLATA.OPL_ID OR R.OPL_ID2 = U_OPLATA.OPL_ID)) 
			AS SUM_RASPR_ALL,
			( SELECT SUM(SUMK) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID AND R.PD_ID = @PD_ID ) 
			AS SUM_RASPR_THIS_PD,
			( SELECT MAX(D_KOR) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID AND R.PD_ID = @PD_ID ) 
			AS D_RASPR_THIS_PD,
			U_OPLATA.OPL_ID, 
			U_OPLATA.VALP,
			U_OPLATA.SUMP 
	FROM	U_OPLATA (NOLOCK)
	LEFT	OUTER JOIN	U_PS	(NOLOCK) ON
			U_PS.RESIDENT_ID		= U_OPLATA.RESIDENT_ID			AND
			U_PS.PS_ID				= U_OPLATA.PS_ID				AND
			U_PS.DEL_FLAG			IS NULL
	LEFT	OUTER JOIN	U_DOGOVOR AS DOG_PS (NOLOCK) ON
			DOG_PS.RESIDENT_ID		= U_PS.RESIDENT_ID				AND
			DOG_PS.DOG_ID			= U_PS.DOG_ID					AND
			DOG_PS.DOG_NPP			= U_PS.DOG_NPP					AND
			DOG_PS.DEL_FLAG			IS NULL
	WHERE 	U_OPLATA.RESIDENT_ID					= @RESIDENT_ID	AND
			ISNULL(U_OPLATA.DOG_ID, DOG_PS.DOG_ID)	= @DOG_ID		AND
			U_OPLATA.VALK							= @VALK			AND
			U_OPLATA.DEL_FLAG						IS NULL			AND
			U_OPLATA.SUMK 
			-
			(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID) 
			- 
			(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND (R.OPL_ID = U_OPLATA.OPL_ID OR R.OPL_ID2 = U_OPLATA.OPL_ID)) > 0 AND
			( DIRECTION = '2'	AND
		        ( ( KODOP >= '21010'	AND KODOP <= '21040' ) 
		        OR
		        ( KODOP = '35020'	AND TYPE = '4' ) ) 
			)
	ORDER	BY D_REFER

	ELSE IF @FLAG_SELECT = 0 OR 1 = 1
	--
	--	Выбираем все Платежи с ненулевым остатком
	--
	SELECT	U_OPLATA.RESIDENT_ID, U_OPLATA.PS_ID, 
			ISNULL(U_OPLATA.DOG_ID, DOG_PS.DOG_ID)			AS OPL_DOG_ID,
			@MARK AS MARK,
			U_OPLATA.SUMK 
			- 
			(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID) 
			- 
			(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND (R.OPL_ID = U_OPLATA.OPL_ID OR R.OPL_ID2 = U_OPLATA.OPL_ID)) 
			AS SUM_OST,
			U_PS.N_PS,
			CASE
				WHEN	ISNULL(U_OPLATA.PS_ID, 0) > 0			AND
						@PS_ID > 0								AND
						ISNULL(U_OPLATA.PS_ID, 0) <> @PS_ID
				THEN	'*'
				ELSE	NULL
			END	AS	PRIZ_DR_PS,
			U_OPLATA.NPP,
			U_OPLATA.DIRECTION, 		
			U_OPLATA.KODOP, 
			U_OPLATA.TYPE, 
			U_OPLATA.D_REFER, 
			U_OPLATA.VALK,		
			U_OPLATA.SUMK, 
			(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID) 
			+ 
			(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND (R.OPL_ID = U_OPLATA.OPL_ID OR R.OPL_ID2 = U_OPLATA.OPL_ID)) 
			AS SUM_RASPR_ALL,
			( SELECT SUM(SUMK) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID AND R.PD_ID = @PD_ID ) 
			AS SUM_RASPR_THIS_PD,
			( SELECT MAX(D_KOR) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID AND R.PD_ID = @PD_ID ) 
			AS D_RASPR_THIS_PD,
			U_OPLATA.OPL_ID, 
			U_OPLATA.VALP,
			U_OPLATA.SUMP 
	FROM	U_OPLATA (NOLOCK)
	LEFT	OUTER JOIN	U_PS	(NOLOCK) ON
			U_PS.RESIDENT_ID		= U_OPLATA.RESIDENT_ID			AND
			U_PS.PS_ID				= U_OPLATA.PS_ID				AND
			U_PS.DEL_FLAG			IS NULL
	LEFT	OUTER JOIN	U_DOGOVOR AS DOG_PS (NOLOCK) ON
			DOG_PS.RESIDENT_ID		= U_PS.RESIDENT_ID				AND
			DOG_PS.DOG_ID			= U_PS.DOG_ID					AND
			DOG_PS.DOG_NPP			= U_PS.DOG_NPP					AND
			DOG_PS.DEL_FLAG			IS NULL
	WHERE 	U_OPLATA.RESIDENT_ID					= @RESIDENT_ID	AND
			ISNULL(U_OPLATA.DOG_ID, DOG_PS.DOG_ID)	= @DOG_ID		AND
			U_OPLATA.VALK							= @VALK			AND
			U_OPLATA.DEL_FLAG						IS NULL			AND
			U_OPLATA.SUMK 
			-
			(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID) 
			- 
			(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND (R.OPL_ID = U_OPLATA.OPL_ID OR R.OPL_ID2 = U_OPLATA.OPL_ID)) > 0 
	ORDER	BY D_REFER
GO

GRANT  EXECUTE  ON [dbo].[U_OPLATA_SELECT_NOTRASPRED]  TO [OPERS], [AUDITS]
GO

--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[U_OPLATA_SELECT_RASPRED_VOZV]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[U_OPLATA_SELECT_RASPRED_VOZV]
GO

CREATE PROCEDURE [dbo].[U_OPLATA_SELECT_RASPRED_VOZV]
--	----------------------------------------------------------
--	Выборка списка Платежей, распределённых на данный Возврат
--	----------------------------------------------------------
--	(Модификация	в версии 2.1.0)
--	----------------------------------------------------------
(
	@RESIDENT_ID	AS INTEGER,
	@OPL_ID			AS INTEGER
)
AS
	SET NOCOUNT ON
	--
	--	Рабочие переменные
	--
	DECLARE	@PS_ID	AS INTEGER,
			@MARK	AS BIT

	--
	--	Начальные значения
	--
	SELECT	@PS_ID	= 0
	SELECT	@MARK	= 0

	--
	--	Запоминаем ПС данного Платежа (для признака Другой ПС - PRIZ_DR_PS)
	--
	SELECT	@PS_ID	= ISNULL(U_OPLATA.PS_ID, 0)
	FROM	U_OPLATA (NOLOCK) 
	WHERE	U_OPLATA.RESIDENT_ID 	= @RESIDENT_ID			AND
			U_OPLATA.OPL_ID 		= @OPL_ID 				AND
			U_OPLATA.DEL_FLAG 		IS NULL		

	SELECT	U_OPLATA.RESIDENT_ID, U_OPLATA.PS_ID, 
			@MARK AS MARK,
			U_OPLATA.SUMK - 
			(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID) 
			- 
			(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND (R.OPL_ID = U_OPLATA.OPL_ID OR R.OPL_ID2 = U_OPLATA.OPL_ID)) AS SUM_OST,
						U_PS.N_PS, 
			CASE
				WHEN	ISNULL(U_OPLATA.PS_ID, 0) > 0			AND
						@PS_ID > 0								AND
						ISNULL(U_OPLATA.PS_ID, 0) <> @PS_ID
				THEN	'*'
				ELSE	NULL
			END	AS	PRIZ_DR_PS,
			U_OPLATA.NPP,
			U_OPLATA.DIRECTION, 		
			U_OPLATA.KODOP, 
			U_OPLATA.TYPE, 
			U_OPLATA.D_REFER, 
			U_OPLATA.VALK,		
			U_OPLATA.SUMK, 
			((SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID) 
			+ 
			(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND (R.OPL_ID = U_OPLATA.OPL_ID OR R.OPL_ID2 = U_OPLATA.OPL_ID))) AS SUM_RASPR_ALL,
			U_RASPRED_OPLATA_OPLATA.SUMK AS SUM_RASPR_THIS_VOZV,
			U_RASPRED_OPLATA_OPLATA.D_KOR AS D_RASPR_THIS_VOZV,
			U_OPLATA.OPL_ID, 
			U_OPLATA.VALP,
			U_OPLATA.SUMP 
	FROM	U_OPLATA (NOLOCK)
	INNER   JOIN U_RASPRED_OPLATA_OPLATA (NOLOCK) ON
			U_RASPRED_OPLATA_OPLATA.RESIDENT_ID	= @RESIDENT_ID			AND
			U_RASPRED_OPLATA_OPLATA.OPL_ID 		= @OPL_ID				AND
			U_RASPRED_OPLATA_OPLATA.OPL_ID2		= U_OPLATA.OPL_ID	
	LEFT	OUTER JOIN	U_PS	(NOLOCK) ON
			U_PS.RESIDENT_ID					= U_OPLATA.RESIDENT_ID	AND
			U_PS.PS_ID							= U_OPLATA.PS_ID		AND
			U_PS.DEL_FLAG						IS NULL
	WHERE 	U_OPLATA.RESIDENT_ID				= @RESIDENT_ID			AND
			U_OPLATA.DEL_FLAG					IS NULL			
	ORDER	BY D_REFER
GO

GRANT  EXECUTE  ON [dbo].[U_OPLATA_SELECT_RASPRED_VOZV]  TO [OPERS], [AUDITS]
GO

--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[U_OPLATA_SELECT_NOTRASPRED_VOZV]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[U_OPLATA_SELECT_NOTRASPRED_VOZV]
GO

CREATE PROCEDURE [dbo].[U_OPLATA_SELECT_NOTRASPRED_VOZV]
--	---------------------------------------------------------------------------------
--	Выборка списка Платежей с ненулевым остатком для распределения на данный Возврат
--	---------------------------------------------------------------------------------
--	
--	Параметр @FLAG_SELECT определяет набор Платежей, 
--	ограниченный по направлению, кодам вида валютной операции и детализации кода:
--		0 - все Платежи
--		1 - Платежи Экспорт товаров
--		2 - Платежи Импорт товаров
--		3 - Платежи Экспорт услуг
--		4 - Платежи Импорт услуг
--	---------------------------------------------------------------------------------
--	(Модификация	в версии 2.1.0)
--	---------------------------------------------------------------------------------
(
	@RESIDENT_ID	AS INTEGER,
	@OPL_ID			AS INTEGER,
	@FLAG_SELECT	AS INTEGER
)
AS
	SET NOCOUNT ON
	--
	--	Рабочие переменные
	--
	DECLARE	@DOG_ID	AS INTEGER,
			@PS_ID	AS INTEGER,
			@VALK	AS CHAR(3),
			@MARK	AS BIT

	--
	--	Начальные значения
	--
	SELECT	@DOG_ID	= 0
	SELECT	@PS_ID	= 0
	SELECT	@VALK	= ''
	SELECT	@MARK	= 0

	--
	--	Запоминаем Договор, ПС (для признака Другой ПС - PRIZ_DR_PS) и КВЦ данного Возврата
	--
	SELECT	@DOG_ID	= ISNULL(U_OPLATA.DOG_ID, ISNULL(DOG_PS.DOG_ID, 0)),
			@PS_ID	= ISNULL(U_OPLATA.PS_ID, 0),
			@VALK	= U_OPLATA.VALK
	FROM	U_OPLATA (NOLOCK) 
	LEFT	OUTER JOIN	U_PS	(NOLOCK) ON
			U_PS.RESIDENT_ID		= U_OPLATA.RESIDENT_ID	AND
			U_PS.PS_ID				= U_OPLATA.PS_ID		AND
			U_PS.DEL_FLAG			IS NULL
	LEFT	OUTER JOIN	U_DOGOVOR AS DOG_PS (NOLOCK) ON
			DOG_PS.RESIDENT_ID		= U_PS.RESIDENT_ID		AND
			DOG_PS.DOG_ID			= U_PS.DOG_ID			AND
			DOG_PS.DOG_NPP			= U_PS.DOG_NPP			AND
			DOG_PS.DEL_FLAG			IS NULL
	WHERE	U_OPLATA.RESIDENT_ID 	= @RESIDENT_ID			AND
			U_OPLATA.OPL_ID 		= @OPL_ID 				AND
			U_OPLATA.DEL_FLAG 		IS NULL			


	IF @FLAG_SELECT = 1
	--
	--	Выбираем Платежи Экспорт товаров
	--
	SELECT	U_OPLATA.RESIDENT_ID, U_OPLATA.PS_ID, 
			ISNULL(U_OPLATA.DOG_ID, DOG_PS.DOG_ID)			AS OPL_DOG_ID,
			@MARK AS MARK,
			U_OPLATA.SUMK - 
			(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID) 
			- 
			(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND (R.OPL_ID = U_OPLATA.OPL_ID OR R.OPL_ID2 = U_OPLATA.OPL_ID)) AS SUM_OST,
			U_PS.N_PS,
			CASE
				WHEN	ISNULL(U_OPLATA.PS_ID, 0) > 0			AND
						@PS_ID > 0								AND
						ISNULL(U_OPLATA.PS_ID, 0) <> @PS_ID
				THEN	'*'
				ELSE	NULL
			END	AS	PRIZ_DR_PS,
			U_OPLATA.NPP,
			U_OPLATA.DIRECTION, 		
			U_OPLATA.KODOP, 
			U_OPLATA.TYPE, 
			U_OPLATA.D_REFER, 
			U_OPLATA.VALK,		
			U_OPLATA.SUMK, 
			(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID) 
			+ 
			(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND (R.OPL_ID = U_OPLATA.OPL_ID OR R.OPL_ID2 = U_OPLATA.OPL_ID)) AS SUM_RASPR_ALL,
			( SELECT SUM(SUMK) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID2 = U_OPLATA.OPL_ID AND R.OPL_ID = @OPL_ID ) AS SUM_RASPR_THIS_VOZV,
			( SELECT MAX(D_KOR) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID2 = U_OPLATA.OPL_ID AND R.OPL_ID = @OPL_ID ) AS D_RASPR_THIS_VOZV,
			U_OPLATA.OPL_ID, 
			U_OPLATA.VALP,
			U_OPLATA.SUMP 
	FROM	U_OPLATA (NOLOCK)
	LEFT	OUTER JOIN	U_PS	(NOLOCK) ON
			U_PS.RESIDENT_ID		= U_OPLATA.RESIDENT_ID			AND
			U_PS.PS_ID				= U_OPLATA.PS_ID				AND
			U_PS.DEL_FLAG			IS NULL
	LEFT	OUTER JOIN	U_DOGOVOR AS DOG_PS (NOLOCK) ON
			DOG_PS.RESIDENT_ID		= U_PS.RESIDENT_ID				AND
			DOG_PS.DOG_ID			= U_PS.DOG_ID					AND
			DOG_PS.DOG_NPP			= U_PS.DOG_NPP					AND
			DOG_PS.DEL_FLAG			IS NULL
	WHERE 	U_OPLATA.RESIDENT_ID					= @RESIDENT_ID	AND
			ISNULL(U_OPLATA.DOG_ID, DOG_PS.DOG_ID)	= @DOG_ID		AND
			U_OPLATA.VALK							= @VALK			AND
			U_OPLATA.DEL_FLAG						IS NULL			AND
			U_OPLATA.SUMK -
			(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID) 
			- 
			(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND (R.OPL_ID = U_OPLATA.OPL_ID OR R.OPL_ID2 = U_OPLATA.OPL_ID)) > 0 AND
			( U_OPLATA.DIRECTION = '1'	AND 
			( ( U_OPLATA.KODOP >= '10010'	AND U_OPLATA.KODOP <= '10090') 
			OR
		 	  ( U_OPLATA.KODOP = '35020'	AND U_OPLATA.TYPE = '1' ) ) 
			)
	ORDER	BY U_OPLATA.D_REFER

	ELSE IF @FLAG_SELECT = 2
	--
	--	Выбираем Платежи Импорт товаров
	--
	SELECT	U_OPLATA.RESIDENT_ID, U_OPLATA.PS_ID, 
			ISNULL(U_OPLATA.DOG_ID, DOG_PS.DOG_ID)			AS OPL_DOG_ID,
			@MARK AS MARK,
			U_OPLATA.SUMK - 
			(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID) 
			- 
			(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND (R.OPL_ID = U_OPLATA.OPL_ID OR R.OPL_ID2 = U_OPLATA.OPL_ID)) AS SUM_OST,
			U_PS.N_PS,
			CASE
				WHEN	ISNULL(U_OPLATA.PS_ID, 0) > 0			AND
						@PS_ID > 0								AND
						ISNULL(U_OPLATA.PS_ID, 0) <> @PS_ID
				THEN	'*'
				ELSE	NULL
			END	AS	PRIZ_DR_PS,
			U_OPLATA.NPP,
			U_OPLATA.DIRECTION, 		
			U_OPLATA.KODOP, 
			U_OPLATA.TYPE, 
			U_OPLATA.D_REFER, 
			U_OPLATA.VALK,		
			U_OPLATA.SUMK, 
			(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID) 
			+ 
			(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND (R.OPL_ID = U_OPLATA.OPL_ID OR R.OPL_ID2 = U_OPLATA.OPL_ID)) AS SUM_RASPR_ALL,
			( SELECT SUM(SUMK) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID2 = U_OPLATA.OPL_ID AND R.OPL_ID = @OPL_ID ) AS SUM_RASPR_THIS_VOZV,
			( SELECT MAX(D_KOR) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID2 = U_OPLATA.OPL_ID AND R.OPL_ID = @OPL_ID ) AS D_RASPR_THIS_VOZV,
			U_OPLATA.OPL_ID, 
			U_OPLATA.VALP,
			U_OPLATA.SUMP 
	FROM	U_OPLATA (NOLOCK)
	LEFT	OUTER JOIN	U_PS	(NOLOCK) ON
			U_PS.RESIDENT_ID		= U_OPLATA.RESIDENT_ID			AND
			U_PS.PS_ID				= U_OPLATA.PS_ID				AND
			U_PS.DEL_FLAG			IS NULL
	LEFT	OUTER JOIN	U_DOGOVOR AS DOG_PS (NOLOCK) ON
			DOG_PS.RESIDENT_ID		= U_PS.RESIDENT_ID				AND
			DOG_PS.DOG_ID			= U_PS.DOG_ID					AND
			DOG_PS.DOG_NPP			= U_PS.DOG_NPP					AND
			DOG_PS.DEL_FLAG			IS NULL
	WHERE 	U_OPLATA.RESIDENT_ID					= @RESIDENT_ID	AND
			ISNULL(U_OPLATA.DOG_ID, DOG_PS.DOG_ID)	= @DOG_ID		AND
			U_OPLATA.VALK							= @VALK			AND
			U_OPLATA.DEL_FLAG						IS NULL			AND
			U_OPLATA.SUMK -
			(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID) 
			- 
			(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND (R.OPL_ID = U_OPLATA.OPL_ID OR R.OPL_ID2 = U_OPLATA.OPL_ID)) > 0 AND
			( U_OPLATA.DIRECTION = '2'	AND
		        ( ( U_OPLATA.KODOP >= '11010'	AND U_OPLATA.KODOP <= '11060' ) 
			OR
		          ( U_OPLATA.KODOP = '35020'	AND U_OPLATA.TYPE = '2' ) )
			)
	ORDER	BY U_OPLATA.D_REFER

	ELSE IF @FLAG_SELECT = 3
	--
	--	Выбираем Платежи Экспорт услуг
	--
	SELECT	U_OPLATA.RESIDENT_ID, U_OPLATA.PS_ID, 
			ISNULL(U_OPLATA.DOG_ID, DOG_PS.DOG_ID)			AS OPL_DOG_ID,
			@MARK AS MARK,
			U_OPLATA.SUMK - 
			(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID) 
			- 
			(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND (R.OPL_ID = U_OPLATA.OPL_ID OR R.OPL_ID2 = U_OPLATA.OPL_ID)) AS SUM_OST,
			U_PS.N_PS,
			CASE
				WHEN	ISNULL(U_OPLATA.PS_ID, 0) > 0			AND
						@PS_ID > 0								AND
						ISNULL(U_OPLATA.PS_ID, 0) <> @PS_ID
				THEN	'*'
				ELSE	NULL
			END	AS	PRIZ_DR_PS,
			U_OPLATA.NPP,
			U_OPLATA.DIRECTION, 		
			U_OPLATA.KODOP, 
			U_OPLATA.TYPE, 
			U_OPLATA.D_REFER, 
			U_OPLATA.VALK,		
			U_OPLATA.SUMK, 
			(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID) 
			+ 
			(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND (R.OPL_ID = U_OPLATA.OPL_ID OR R.OPL_ID2 = U_OPLATA.OPL_ID)) AS SUM_RASPR_ALL,
			( SELECT SUM(SUMK) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID2 = U_OPLATA.OPL_ID AND R.OPL_ID = @OPL_ID ) AS SUM_RASPR_THIS_VOZV,
			( SELECT MAX(D_KOR) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID2 = U_OPLATA.OPL_ID AND R.OPL_ID = @OPL_ID ) AS D_RASPR_THIS_VOZV,
			U_OPLATA.OPL_ID, 
			U_OPLATA.VALP,
			U_OPLATA.SUMP 
	FROM	U_OPLATA (NOLOCK)
	LEFT	OUTER JOIN	U_PS	(NOLOCK) ON
			U_PS.RESIDENT_ID		= U_OPLATA.RESIDENT_ID			AND
			U_PS.PS_ID				= U_OPLATA.PS_ID				AND
			U_PS.DEL_FLAG			IS NULL
	LEFT	OUTER JOIN	U_DOGOVOR AS DOG_PS (NOLOCK) ON
			DOG_PS.RESIDENT_ID		= U_PS.RESIDENT_ID				AND
			DOG_PS.DOG_ID			= U_PS.DOG_ID					AND
			DOG_PS.DOG_NPP			= U_PS.DOG_NPP					AND
			DOG_PS.DEL_FLAG			IS NULL
	WHERE 	U_OPLATA.RESIDENT_ID					= @RESIDENT_ID	AND
			ISNULL(U_OPLATA.DOG_ID, DOG_PS.DOG_ID)	= @DOG_ID		AND
			U_OPLATA.VALK							= @VALK			AND
			U_OPLATA.DEL_FLAG						IS NULL			AND
			U_OPLATA.SUMK -
			(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID) 
			- 
			(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND (R.OPL_ID = U_OPLATA.OPL_ID OR R.OPL_ID2 = U_OPLATA.OPL_ID)) > 0 AND
			( U_OPLATA.DIRECTION = '1'	AND
		        ( ( U_OPLATA.KODOP >= '20010'	AND U_OPLATA.KODOP <= '20070' ) 
			OR
		        ( U_OPLATA.KODOP = '35020'	AND U_OPLATA.TYPE = '3' ) )
			)
	ORDER	BY U_OPLATA.D_REFER

	ELSE IF @FLAG_SELECT = 4
	--
	--	Выбираем Платежи Импорт услуг
	--
	SELECT	U_OPLATA.RESIDENT_ID, U_OPLATA.PS_ID, 
			ISNULL(U_OPLATA.DOG_ID, DOG_PS.DOG_ID)			AS OPL_DOG_ID,
			@MARK AS MARK,
			U_OPLATA.SUMK - 
			(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID) 
			- 
			(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND (R.OPL_ID = U_OPLATA.OPL_ID OR R.OPL_ID2 = U_OPLATA.OPL_ID)) AS SUM_OST,
			U_PS.N_PS,
			CASE
				WHEN	ISNULL(U_OPLATA.PS_ID, 0) > 0			AND
						@PS_ID > 0								AND
						ISNULL(U_OPLATA.PS_ID, 0) <> @PS_ID
				THEN	'*'
				ELSE	NULL
			END	AS	PRIZ_DR_PS,
			U_OPLATA.NPP,
			U_OPLATA.DIRECTION, 		
			U_OPLATA.KODOP, 
			U_OPLATA.TYPE, 
			U_OPLATA.D_REFER, 
			U_OPLATA.VALK,		
			U_OPLATA.SUMK, 
			(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID) 
			+ 
			(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND (R.OPL_ID = U_OPLATA.OPL_ID OR R.OPL_ID2 = U_OPLATA.OPL_ID)) AS SUM_RASPR_ALL,
			( SELECT SUM(SUMK) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID2 = U_OPLATA.OPL_ID AND R.OPL_ID = @OPL_ID ) AS SUM_RASPR_THIS_VOZV,
			( SELECT MAX(D_KOR) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID2 = U_OPLATA.OPL_ID AND R.OPL_ID = @OPL_ID ) AS D_RASPR_THIS_VOZV,
			U_OPLATA.OPL_ID, 
			U_OPLATA.VALP,
			U_OPLATA.SUMP 
	FROM	U_OPLATA (NOLOCK)
	LEFT	OUTER JOIN	U_PS	(NOLOCK) ON
			U_PS.RESIDENT_ID		= U_OPLATA.RESIDENT_ID			AND
			U_PS.PS_ID				= U_OPLATA.PS_ID				AND
			U_PS.DEL_FLAG			IS NULL
	LEFT	OUTER JOIN	U_DOGOVOR AS DOG_PS (NOLOCK) ON
			DOG_PS.RESIDENT_ID		= U_PS.RESIDENT_ID				AND
			DOG_PS.DOG_ID			= U_PS.DOG_ID					AND
			DOG_PS.DOG_NPP			= U_PS.DOG_NPP					AND
			DOG_PS.DEL_FLAG			IS NULL
	WHERE 	U_OPLATA.RESIDENT_ID					= @RESIDENT_ID	AND
			ISNULL(U_OPLATA.DOG_ID, DOG_PS.DOG_ID)	= @DOG_ID		AND
			U_OPLATA.VALK							= @VALK			AND
			U_OPLATA.DEL_FLAG						IS NULL			AND
			U_OPLATA.SUMK -
			(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID) 
			- 
			(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND (R.OPL_ID = U_OPLATA.OPL_ID OR R.OPL_ID2 = U_OPLATA.OPL_ID)) > 0 AND
			( DIRECTION = '2'	AND
		        ( ( KODOP >= '21010'	AND KODOP <= '21040' ) 
		        OR
		        ( KODOP = '35020'	AND TYPE = '4' ) ) 
			)
	ORDER	BY D_REFER

	ELSE IF @FLAG_SELECT = 0 OR 1 = 1
	--
	--	Выбираем все Платежи с ненулевым остатком
	--
	SELECT	U_OPLATA.RESIDENT_ID, U_OPLATA.PS_ID, 
			ISNULL(U_OPLATA.DOG_ID, DOG_PS.DOG_ID)			AS OPL_DOG_ID,
			@MARK AS MARK,
			U_OPLATA.SUMK - 
			(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID) 
			- 
			(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND (R.OPL_ID = U_OPLATA.OPL_ID OR R.OPL_ID2 = U_OPLATA.OPL_ID)) AS SUM_OST,
			U_PS.N_PS,
			CASE
				WHEN	ISNULL(U_OPLATA.PS_ID, 0) > 0			AND
						@PS_ID > 0								AND
						ISNULL(U_OPLATA.PS_ID, 0) <> @PS_ID
				THEN	'*'
				ELSE	NULL
			END	AS	PRIZ_DR_PS,
			U_OPLATA.NPP,
			U_OPLATA.DIRECTION, 		
			U_OPLATA.KODOP, 
			U_OPLATA.TYPE, 
			U_OPLATA.D_REFER, 
			U_OPLATA.VALK,		
			U_OPLATA.SUMK, 
			(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID) 
			+ 
			(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND (R.OPL_ID = U_OPLATA.OPL_ID OR R.OPL_ID2 = U_OPLATA.OPL_ID)) AS SUM_RASPR_ALL,
			( SELECT SUM(SUMK) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID2 = U_OPLATA.OPL_ID AND R.OPL_ID = @OPL_ID ) AS SUM_RASPR_THIS_VOZV,
			( SELECT MAX(D_KOR) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID2 = U_OPLATA.OPL_ID AND R.OPL_ID = @OPL_ID ) AS D_RASPR_THIS_VOZV,
			U_OPLATA.OPL_ID, 
			U_OPLATA.VALP,
			U_OPLATA.SUMP 
	FROM	U_OPLATA (NOLOCK)
	LEFT	OUTER JOIN	U_PS	(NOLOCK) ON
			U_PS.RESIDENT_ID		= U_OPLATA.RESIDENT_ID			AND
			U_PS.PS_ID				= U_OPLATA.PS_ID				AND
			U_PS.DEL_FLAG			IS NULL
	LEFT	OUTER JOIN	U_DOGOVOR AS DOG_PS (NOLOCK) ON
			DOG_PS.RESIDENT_ID		= U_PS.RESIDENT_ID				AND
			DOG_PS.DOG_ID			= U_PS.DOG_ID					AND
			DOG_PS.DOG_NPP			= U_PS.DOG_NPP					AND
			DOG_PS.DEL_FLAG			IS NULL
	WHERE 	U_OPLATA.RESIDENT_ID					= @RESIDENT_ID	AND
			ISNULL(U_OPLATA.DOG_ID, DOG_PS.DOG_ID)	= @DOG_ID		AND
			U_OPLATA.VALK							= @VALK			AND
			U_OPLATA.DEL_FLAG						IS NULL			AND
			U_OPLATA.SUMK -
			(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID) 
			- 
			(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND (R.OPL_ID = U_OPLATA.OPL_ID OR R.OPL_ID2 = U_OPLATA.OPL_ID)) > 0 
	ORDER	BY D_REFER
GO

GRANT  EXECUTE  ON [dbo].[U_OPLATA_SELECT_NOTRASPRED_VOZV]  TO [OPERS], [AUDITS]
GO

--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[U_OPLATA_OPLATA_RASPRED]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[U_OPLATA_OPLATA_RASPRED]
GO

CREATE PROCEDURE [dbo].[U_OPLATA_OPLATA_RASPRED]
--	-------------------------------------------------------------------------------------------------------------------------------------------
--	Распределение Возврата на Платёж
--	-------------------------------------------------------------------------------------------------------------------------------------------
--
--	Возвращает @RC:	 				
--	   @RC =	0	- нормальное завершение							
--				10	- Возврат не найден
--				11	- Не определён Договор (контракт), на который ссылается Возврат
--				20	- Платёж не найден
--				22	- Не определён Договор (контракт), на который ссылается Платёж
--				30	- Недопустимая Сумма распределения (<=0)
--				31	- Сумма распределения превышает остаток на Возврате
--				32	- Сумма распределения превышает остаток на Платеже
--				40	- КВЦК Платежа отличен от КВЦК Возврата
--				41	- Договор (контракт) Платежа отличен от Договор (контракт) Возврата
--				45	- КВЦ распределения отличен от КВЦ Возврата (если имеется распределение данного Возврата на данный Платёж)
--				50	- По направлению, коду вида валютной операции и детализации кода данный Возврат не может быть распределён на Платёж.
--				51	- По направлению, коду вида валютной операции и детализации кода данный Платёж не может быть распределён на Возврат
--				52	- Направление, код валютной операции и детализации кода Возврата не соответствуют направлению, коду валютной операции и детализации кода Платежа. Распределение невозможно.
--				60	- Ошибка при распределении
--				70	- Распределение не может быть выполнено - нарушение баланса по Возврату.
--				75	- Распределение не может быть выполнено - нарушение баланса по Платежу.
--				100 - Ошибка регистрации события
--
--	--------------------------------------------------------------------------------------------------------------------------------------------
--	(Модификация	в версии 2.1.0)
--	--------------------------------------------------------------------------------------------------------------------------------------------
(
	@RESIDENT_ID 	AS INTEGER,
	@OPL_ID			AS INTEGER,
	@OPL_ID2		AS INTEGER,
	@SUMK			AS DECIMAL(16, 2),
	@USER_ID		AS VARCHAR(30),
	@RC				AS INTEGER OUTPUT
)
AS
	--
	--	Рабочие переменные
	--
	DECLARE	@RETURN_STATUS		AS INTEGER,
			@SUM_RASPRED		AS DECIMAL(16,2),	-- Сумма распределения (ранее сделанного)
			@VALK_RASPRED		AS CHAR(3),			-- КВЦ рапределения (ранее сделанного)
			@OST_OPLATA			AS DECIMAL(16,2),	-- Остаток на Возврате
			@VALK_OPLATA		AS CHAR(3),			-- КВЦ Возврата
			@DOG_ID_OPLATA		AS INTEGER,			-- Договор (контракт) Возврата
			@OST_OPLATA2		AS DECIMAL(16,2),	-- Остаток на Платеже
			@VALK_OPLATA2		AS CHAR(3),			-- КВЦ Платежа
			@DOG_ID_OPLATA2		AS INTEGER,			-- Договор (контракт) Платежа
			@DIRECTION_OPLATA	AS CHAR(1),			-- Направление Возврата
			@KODOP_OPLATA		AS CHAR(5),			-- Код валютной операции Возврата
			@TYPE_OPLATA		AS CHAR(1),			-- Детализация кода валютной операции Возврата
			@DIRECTION_OPLATA2	AS CHAR(1),			-- Направление Возврата
			@KODOP_OPLATA2		AS CHAR(5),			-- Код валютной операции Возврата
			@TYPE_OPLATA2		AS CHAR(1),			-- Детализация кода валютной операции Возврата
			@PRIZ_OPLATA		AS INTEGER,			-- "Тип" Возврата для распределения
			@PRIZ_OPLATA2		AS INTEGER			-- "Тип" Платежа для распределения
		
	--
	--	Начальные значения
	--
	SELECT	@RETURN_STATUS		= 0
	SELECT	@SUM_RASPRED		= 0
	SELECT	@VALK_RASPRED		= ''
	SELECT	@OST_OPLATA			= 0
	SELECT	@VALK_OPLATA		= ''
	SELECT	@DOG_ID_OPLATA		= 0
	SELECT	@OST_OPLATA2		= 0
	SELECT	@VALK_OPLATA2		= ''
	SELECT	@DOG_ID_OPLATA2		= 0
	SELECT	@DIRECTION_OPLATA	= ''
	SELECT	@KODOP_OPLATA		= ''
	SELECT	@TYPE_OPLATA		= ''
	SELECT	@DIRECTION_OPLATA2	= ''
	SELECT	@KODOP_OPLATA2		= ''
	SELECT	@TYPE_OPLATA2		= ''
	SELECT	@PRIZ_OPLATA		= 0
	SELECT	@PRIZ_OPLATA2		= 0

	--
	--	Определяем Сумму и КВЦ распределения (ранее сделанного)
	--
	SELECT	@SUM_RASPRED	= SUMK,
			@VALK_RASPRED	= VALK
	FROM	U_RASPRED_OPLATA_OPLATA (NOLOCK) 
	WHERE	RESIDENT_ID = @RESIDENT_ID	AND
			OPL_ID		= @OPL_ID 		AND
			OPL_ID2		= @OPL_ID2

	--
	--	Определяем Остаток, КВЦ, Договор (контракт), Направление, Код вал.опер и Детализацию кода Возврата
	--
	SELECT	@OST_OPLATA  		= U_OPLATA.SUMK 	
					- 
					(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM (NOLOCK) WHERE RESIDENT_ID = @RESIDENT_ID AND OPL_ID = @OPL_ID) 
					- 
					(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA (NOLOCK) WHERE RESIDENT_ID = @RESIDENT_ID AND (OPL_ID	= @OPL_ID OR OPL_ID2 = @OPL_ID)),
			@VALK_OPLATA 		= U_OPLATA.VALK,
			@DOG_ID_OPLATA		= ISNULL(U_OPLATA.DOG_ID, ISNULL(DOG_PS.DOG_ID, 0)),
			@DIRECTION_OPLATA 	= U_OPLATA.DIRECTION,
			@KODOP_OPLATA		= U_OPLATA.KODOP,
			@TYPE_OPLATA		= U_OPLATA.TYPE
	FROM	U_OPLATA (NOLOCK) 
	LEFT	OUTER JOIN	U_PS (NOLOCK)ON 
			U_PS.PS_ID			= U_OPLATA.PS_ID		AND
			U_PS.RESIDENT_ID	= U_OPLATA.RESIDENT_ID	AND
			U_PS.DEL_FLAG		IS NULL	
	LEFT	OUTER JOIN	U_DOGOVOR AS DOG_PS (NOLOCK) ON
			DOG_PS.RESIDENT_ID	= U_PS.RESIDENT_ID		AND
			DOG_PS.DOG_ID		= U_PS.DOG_ID			AND
			DOG_PS.DOG_NPP		= U_PS.DOG_NPP			AND
			DOG_PS.DEL_FLAG		IS NULL
	WHERE	U_OPLATA.RESIDENT_ID	= @RESIDENT_ID		AND
			U_OPLATA.OPL_ID			= @OPL_ID 			AND
			U_OPLATA.DEL_FLAG		IS NULL
	
	IF	ISNULL(@VALK_OPLATA, '' ) = ''
		BEGIN
			SELECT @RC = 10
			GOTO   EXIT_OPLATA_OPLATA_RASPRED
		END

	IF	ISNULL(@DOG_ID_OPLATA, 0 ) = 0
		BEGIN
			SELECT @RC = 11
			GOTO   EXIT_OPLATA_OPLATA_RASPRED
		END

	--
	--	Определяем Остаток, КВЦ, Договор (контракт), Направление, Код вал.опер и Детализацию кода Платежа
	--
	SELECT	@OST_OPLATA2  		= U_OPLATA.SUMK 	
					- 
					(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM (NOLOCK) WHERE RESIDENT_ID = @RESIDENT_ID AND OPL_ID = @OPL_ID2) 
					- 
					(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA (NOLOCK) WHERE RESIDENT_ID = @RESIDENT_ID AND (OPL_ID	= @OPL_ID2 OR OPL_ID2 = @OPL_ID2)),
			@VALK_OPLATA2 		= U_OPLATA.VALK,
			@DOG_ID_OPLATA2		= ISNULL(U_OPLATA.DOG_ID, ISNULL(DOG_PS.DOG_ID, 0)),
			@DIRECTION_OPLATA2 	= U_OPLATA.DIRECTION,
			@KODOP_OPLATA2		= U_OPLATA.KODOP,
			@TYPE_OPLATA2		= U_OPLATA.TYPE
	FROM	U_OPLATA (NOLOCK) 
	LEFT	OUTER JOIN	U_PS (NOLOCK)ON 
			U_PS.PS_ID			= U_OPLATA.PS_ID		AND
			U_PS.RESIDENT_ID	= U_OPLATA.RESIDENT_ID	AND
			U_PS.DEL_FLAG		IS NULL	
	LEFT	OUTER JOIN	U_DOGOVOR AS DOG_PS (NOLOCK) ON
			DOG_PS.RESIDENT_ID	= U_PS.RESIDENT_ID		AND
			DOG_PS.DOG_ID		= U_PS.DOG_ID			AND
			DOG_PS.DOG_NPP		= U_PS.DOG_NPP			AND
			DOG_PS.DEL_FLAG		IS NULL
	WHERE	U_OPLATA.RESIDENT_ID = @RESIDENT_ID	AND
			U_OPLATA.OPL_ID		= @OPL_ID2 		AND
			U_OPLATA.DEL_FLAG	IS NULL

	IF	ISNULL( @VALK_OPLATA2, '' ) = '' 
		BEGIN
			SELECT @RC = 20
			GOTO   EXIT_OPLATA_OPLATA_RASPRED
		END

	IF	ISNULL(@DOG_ID_OPLATA2, 0 ) = 0
		BEGIN
			SELECT @RC = 22
			GOTO   EXIT_OPLATA_OPLATA_RASPRED
		END


	--
	--	Проверка 1: Недопустимая Сумма к распределению (<=0)
	--
	IF	ISNULL(@SUMK, 0) <= 0 
		BEGIN
			SELECT @RC = 30
			GOTO   EXIT_OPLATA_OPLATA_RASPRED
		END

	--
	--	Проверка 2: Сумма к распределению превышает остаток на Возврате
	--
	IF	@SUMK > @OST_OPLATA		 
		BEGIN
			SELECT @RC = 31
			GOTO   EXIT_OPLATA_OPLATA_RASPRED
		END

	--
	--	Проверка 3: Сумма к распределению превышает остаток на Платеже
	--
	IF	@SUMK > @OST_OPLATA2			 
		BEGIN
			SELECT @RC = 32
			GOTO   EXIT_OPLATA_OPLATA_RASPRED
		END

	--
	--	Проверка 4: КВЦ Платежа отличен от КВЦ Возврата
	--
	IF	LTRIM(RTRIM(@VALK_OPLATA)) <> LTRIM(RTRIM(@VALK_OPLATA2))
		BEGIN
			SELECT @RC = 40
			GOTO   EXIT_OPLATA_OPLATA_RASPRED
		END

	--
	--	Проверка 5: Договор (контракт) Платежа отличен от Договора (контракта) Возврата
	--
	IF	ISNULL(@DOG_ID_OPLATA, 0) <> ISNULL(@DOG_ID_OPLATA2, 0)
		BEGIN
			SELECT @RC = 41
			GOTO   EXIT_OPLATA_OPLATA_RASPRED
		END

	--
	--	Проверка 6: КВЦ распределения отличен от КВЦ Возврата 
	--	(если имеется распределение данного Возврата на данный Платёж)
	--
	IF	LEN(LTRIM(RTRIM(@VALK_RASPRED))) > 0
		BEGIN
		IF	LTRIM(RTRIM(@VALK_RASPRED)) <> LTRIM(RTRIM(@VALK_OPLATA))
			BEGIN
				SELECT @RC = 45
				GOTO   EXIT_OPLATA_OPLATA_RASPRED
			END
		END

	--
	--	Проверка 7: По направлению, коду вида валютной операции и детализации кода данный Возврат не может быть распределён на Платёж
	--
	SELECT	@PRIZ_OPLATA	= 0

	--	Экспорт товаров
	IF	@DIRECTION_OPLATA = '2'	AND	( @KODOP_OPLATA	= '35010' OR @KODOP_OPLATA = '35020' )
					AND	@TYPE_OPLATA = '1'
		SELECT	@PRIZ_OPLATA	= 1
        
	--	Импорт товаров
	IF	@DIRECTION_OPLATA = '1' AND	( @KODOP_OPLATA = '35010' OR @KODOP_OPLATA = '35020' )
					AND	@TYPE_OPLATA = '2' 
		SELECT	@PRIZ_OPLATA	= 2

	--	Экспорт услуг
	IF	@DIRECTION_OPLATA = '2' AND     ( @KODOP_OPLATA = '35010' OR @KODOP_OPLATA = '35020' ) 
					AND	@TYPE_OPLATA = '3'
		SELECT	@PRIZ_OPLATA	= 3

	--	Импорт услуг
	IF	@DIRECTION_OPLATA = '1' AND	( @KODOP_OPLATA = '35010' OR @KODOP_OPLATA = '35020' )
					AND	@TYPE_OPLATA = '4'
		SELECT	@PRIZ_OPLATA	= 4

	IF	@PRIZ_OPLATA	= 0
			BEGIN
				SELECT @RC = 50
				GOTO   EXIT_OPLATA_OPLATA_RASPRED
			END


	--
	--	Проверка 8: По направлению, коду вида валютной операции и детализации кода данный Платёж не может быть распределён на Возврат
	--
	SELECT	@PRIZ_OPLATA2	= 0

	--	Экспорт товаров
	IF	@DIRECTION_OPLATA2 = '1'	AND	(	( @KODOP_OPLATA2	>= '10010' AND @KODOP_OPLATA2 <= '10090' )
						   OR 
							( @KODOP_OPLATA2 = '35020' AND @TYPE_OPLATA2 = '1' ) 
	        				)
		SELECT	@PRIZ_OPLATA2	= 1
        
	--	Импорт товаров
	IF	@DIRECTION_OPLATA2 = '2' AND	(	( @KODOP_OPLATA2 >= '11010' AND @KODOP_OPLATA2 <= '11060' )
						    OR
						        ( @KODOP_OPLATA2 = '35020' AND @TYPE_OPLATA2 = '2' ) 
					        ) 
		SELECT	@PRIZ_OPLATA2	= 2

	--	Экспорт услуг
	IF	@DIRECTION_OPLATA2 = '1' AND     (       ( @KODOP_OPLATA2 >= '20010' AND @KODOP_OPLATA2 <= '20070' ) 
						    OR
						        ( @KODOP_OPLATA2 = '35020' AND @TYPE_OPLATA2 = '3' ) 
					        ) 
		SELECT	@PRIZ_OPLATA2	= 3

	--	Импорт услуг
	IF	@DIRECTION_OPLATA2 = '2' AND	(	( @KODOP_OPLATA2 >= '21010' AND @KODOP_OPLATA2 <= '21040' )
					            OR
						        ( @KODOP_OPLATA2 = '35020' AND @TYPE_OPLATA2 = '4' ) 
					         )
		SELECT	@PRIZ_OPLATA2	= 4

	IF	@PRIZ_OPLATA2	= 0
			BEGIN
				SELECT @RC = 51
				GOTO   EXIT_OPLATA_OPLATA_RASPRED
			END



	--
	--	Проверка 9: Направление, код валютной операции и детализации кода Возврата не соответствуют направлению, коду валютной операции и детализации кода Платежа. Распределение невозможно.
	--
	IF	@PRIZ_OPLATA	<> @PRIZ_OPLATA2
		BEGIN
			SELECT @RC = 52
			GOTO   EXIT_OPLATA_OPLATA_RASPRED
		END


	--
	--	Все предварительные проверки прошли, начинаем распределение
	--
	BEGIN TRANSACTION

	IF	LEN(LTRIM(RTRIM(@VALK_RASPRED))) > 0
		--	Делаем UPDATE
		UPDATE	U_RASPRED_OPLATA_OPLATA 
		SET		SUMK		= SUMK + @SUMK,
				D_KOR		= CONVERT(SMALLDATETIME, GETDATE()),
				[USER_ID]	= @USER_ID
		WHERE	RESIDENT_ID = @RESIDENT_ID	AND
				OPL_ID		= @OPL_ID 		AND
				OPL_ID2		= @OPL_ID2		AND
				VALK		= @VALK_OPLATA
	
	ELSE	--	IF	@SUM_RASPRED IS NULL
		--	Делаем INSERT
		INSERT	INTO	U_RASPRED_OPLATA_OPLATA 
				(
				RESIDENT_ID,
				OPL_ID,
				OPL_ID2,
				SUMK,
				VALK,
				D_KOR,
				[USER_ID]
				)
			VALUES
				(
				@RESIDENT_ID,
				@OPL_ID,
				@OPL_ID2,
				@SUMK,
				@VALK_OPLATA,
				CONVERT(SMALLDATETIME, GETDATE()),
				@USER_ID
				)

	IF	@@ERROR <> 0
		BEGIN	
			ROLLBACK TRANSACTION 
			SELECT	@RC	= 60
			GOTO	EXIT_OPLATA_OPLATA_RASPRED
		END
			

	--
	--	Проверка 10: Нарушение баланса по Возврату 
	--
	SELECT	@OST_OPLATA  		= SUMK 	
					- 
					(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM (NOLOCK) WHERE RESIDENT_ID = @RESIDENT_ID AND OPL_ID = @OPL_ID) 
					- 
					(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA (NOLOCK) WHERE RESIDENT_ID = @RESIDENT_ID AND (OPL_ID	= @OPL_ID OR OPL_ID2 = @OPL_ID))
	FROM	U_OPLATA (NOLOCK) 
	WHERE	RESIDENT_ID = @RESIDENT_ID	AND
			OPL_ID		= @OPL_ID 		AND
			DEL_FLAG	IS NULL

	IF	@OST_OPLATA	< 0 
		BEGIN
			ROLLBACK TRANSACTION 
			SELECT @RC = 70
			GOTO   EXIT_OPLATA_OPLATA_RASPRED
		END


	--
	--	Проверка 11: Нарушение баланса по Платежу
	--
	SELECT	@OST_OPLATA2  		= SUMK 	
					- 
					(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM (NOLOCK) WHERE RESIDENT_ID = @RESIDENT_ID AND OPL_ID = @OPL_ID2) 
					- 
					(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA (NOLOCK) WHERE RESIDENT_ID = @RESIDENT_ID AND (OPL_ID	= @OPL_ID2 OR OPL_ID2 = @OPL_ID2))
	FROM	U_OPLATA (NOLOCK) 
	WHERE	RESIDENT_ID = @RESIDENT_ID	AND
			OPL_ID		= @OPL_ID2 		AND
			DEL_FLAG	IS NULL

	IF	@OST_OPLATA2	< 0
		BEGIN
			ROLLBACK TRANSACTION 
			SELECT @RC = 75
			GOTO   EXIT_OPLATA_OPLATA_RASPRED
		END

	--
	--	Формируем код возврата
	--
	SELECT	@RC 	= 0

	--
	--	Добавление события в журнал событий
	--
	EXECUTE	@RETURN_STATUS	= U_EVENT_INSERT
			@EVENT_NAME		= 'MAKE_RASPRED',
			@USER_ID		= @USER_ID,
			@RESIDENT_ID	= @RESIDENT_ID,
			@PLAT_ID		= @OPL_ID
				
	IF	@RETURN_STATUS <> 0
		ROLLBACK TRANSACTION				
	ELSE 
		COMMIT TRANSACTION 

--
--	Возврат кода завершения 
--
EXIT_OPLATA_OPLATA_RASPRED:
	SELECT	RC = @RC + @RETURN_STATUS
GO

GRANT  EXECUTE  ON [dbo].[U_OPLATA_OPLATA_RASPRED]  TO [OPERS]
GO

--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[U_OPLATA_LOAD]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[U_OPLATA_LOAD]
GO

CREATE PROCEDURE [dbo].[U_OPLATA_LOAD]
--	------------------------------------------------------------------------------------------------------------------------
--	Приём Платежа (АСВКБ)
--	------------------------------------------------------------------------------------------------------------------------
--
--	Возвращает:
--	1. RC 				
--	   RC =	0	- нормальное завершение		
--			2	- ПС не найден						
--			10	- ошибка при приёме Платежа
--			15	- Платеж не найден (приём-обновление)
--			20	- ошибка при вычислении идентификатора платежа
--			40	- код валюты платежа отсутствует в справочнике
--			45	- код валюты цены контракта (договора) отсутствует в справочнике
--			46	- код валюты корреспондентского счёта отсутствует в справочнике
--			47	- код валюты цены контракта (договора) не соответствует коду валюты, указанному в Паспорте сделки, и не найден среди кодов валют в предыдущих условиях контракта (договора)
--			50	- код операции отсутствует в справочнике
--			55	- Договор отсутствует в БД
--			56	- ПС отсутствует в БД
--			57	- Ссылка Платежа одновременно и на Договор и на ПС недопустима
--			71	- Код страны Иностранного контрагента отсутствует в справочнике
--			72	- Ошибка при вычислении идентификатора Иностранного контрагента
--			73	- Ошибка при добавлении Иностранного контрагента
--			74	- Код страны Банка иностранного контрагента отсутствует в справочнике
--			75	- Ошибка при вычислении идентификатора Банка иностранного контрагента
--			76	- Ошибка при добавлении Банка иностранного контрагента
--			80	- Ошибка при добавлении Счёта
--			81	- код валюты Счёта отсутствует в справочнике
--			82	- вид Счёта отсутствует в справочнике
--			83	- Ошибка при вычислении идентификатора Счёта
--			90	- код страны банка - отправителя (получателя) платежа отсутствует в справочнике
--			95	- код страны банка - нерезидента отсутствует в справочнике
--			99	- Сумма в валюте цены контракта не может быть меньше распределённой суммы (приём-обновление)
--			100 - ошибка при регистрации события
--			130	- дублирование порядкового номера платежа
--			201	- Платёж распределён: менять Паспорт сделки нельзя (приём-обновление)
--			202	- Платёж распределён: менять Код валюты цены контракта нельзя (приём-обновление)
--			203	- Платёж распределён: менять направление Платежа нельзя (приём-обновление)
--			204	- Платёж распределён: менять Код вида валютной операции нельзя (приём-обновление)
--			205	- Платёж распределён: менять Детализацию кода вида валютной операции нельзя (приём-обновление)
--			206	- Платёж распределён: менять Договор нельзя (приём-обновление)
--
--	2.FLAG_LOAD = 	1 - приём-добавление,
--					2 - приём-обновление
--	------------------------------------------------------------------------------------------------------------------------
--	(Модификация	в версии 2.1.0)
--	------------------------------------------------------------------------------------------------------------------------
(
	@RESIDENT_ID			AS INTEGER,
	@BANK_ID				AS INTEGER,
	@PS__N_PS				AS CHAR(22),
	@PS__UNI_ID				AS UNIQUEIDENTIFIER,
	@IN_PART__NAMEP			AS VARCHAR (300),
	@IN_PART__KODS			AS CHAR (3),
	@IN_PART__INN			AS VARCHAR (12),
	@IN_PART__ADRES			AS VARCHAR (300),
	@IN_PART__TYPE			AS CHAR (1),
	@IN_PART_BANKS__NAMEB 	AS VARCHAR (300),
 	@IN_PART_BANKS__BIK		AS CHAR (9),
    @IN_PART_BANKS__SWIFT	AS VARCHAR (11),
    @IN_PART_BANKS__HP 		AS CHAR (2),
    @IN_PART_BANKS__KODS 	AS CHAR (3),
	@SCHET__KODV			AS CHAR (3),
	@SCHET__D_OPEN			AS SMALLDATETIME,
	@SCHET__PRIM			AS VARCHAR (100),
	@SCHET__TYPE_SCHET_ID	AS INTEGER,
	@SCHET__N_SCHET			AS VARCHAR (50),
	@NPP					AS INTEGER,
	@DIRECTION 				AS CHAR (1),
	@KODOP					AS CHAR (5),
	@VALP					AS CHAR (3),
	@SUMP					AS DECIMAL (16, 2),
	@VALK					AS CHAR (3),
	@SUMK					AS DECIMAL (16, 2) ,
	@KKURS					AS DECIMAL (16,8),
	@KODS					AS CHAR (3),
	@N_PS_OLD				AS CHAR (25),
	@D_PLAT					AS SMALLDATETIME,
	@N_PLAT					AS VARCHAR (100),
	@D_REFER				AS SMALLDATETIME,
	@N_REFER				AS VARCHAR (100),
	@PRIZ_OUT				AS CHAR (1)	,
	@N_KONTR				AS VARCHAR (100),
	@PRIM					AS VARCHAR (500),
	@TYPE					AS CHAR (1)	,
	@TYPE_99010				AS CHAR (1)	, 	 	
	@KODS_IN_BANK			AS CHAR (3)	,
	@D_VAL					AS SMALLDATETIME,
	@KOD_VAL				AS CHAR (3)	,
	@SUM_VAL				AS DECIMAL (16, 2),
	@VID_USLUG				AS VARCHAR (7),
	@VID_DIRECTION			AS CHAR (1)	,
	@PRIM_USLUG				AS VARCHAR (500),
	@PRIM_BANK				AS VARCHAR (500),
	@KONTR_SROK  			AS CHAR (4),
	@DOG_ID_BANK			AS INTEGER,
	@DOG_NPP_BANK			AS INTEGER,
	@USER_ID				AS VARCHAR (30),
	@UNI_ID					AS UNIQUEIDENTIFIER,
	@FLAG_LOAD				AS INTEGER OUTPUT,
	@RC 					AS INTEGER OUTPUT
)
AS
	SET NOCOUNT ON
	--
	--	Рабочие переменные
	--
	DECLARE	@RC1					AS INTEGER,
			@RC2					AS INTEGER,
			@OPL_ID_OLD				AS INTEGER,
			@NPP_OLD				AS INTEGER,
			@PS_ID_OLD				AS INTEGER,
			@DOG_ID_OLD				AS INTEGER,
			@DOG_NPP_OLD			AS INTEGER,
			@SCHET_ID_OLD			AS INTEGER,
			@PARTNER_ID_OLD			AS INTEGER,
			@IN_PART_BANK_ID_OLD	AS INTEGER,
			@D_TODAY				AS SMALLDATETIME
			
	--
	--	Начальные значения
	--
	SELECT	@FLAG_LOAD				= 1
	SELECT	@D_TODAY				= CONVERT(SMALLDATETIME,GETDATE())
	SELECT	@RC1 					= 0
	SELECT	@RC2 					= 0
	SELECT	@OPL_ID_OLD				= NULL
	SELECT	@NPP_OLD				= NULL
	SELECT	@PS_ID_OLD				= NULL
	SELECT	@DOG_ID_OLD				= NULL
	SELECT	@DOG_NPP_OLD			= NULL
	SELECT	@SCHET_ID_OLD			= NULL
	SELECT	@PARTNER_ID_OLD			= NULL
	SELECT	@IN_PART_BANK_ID_OLD	= NULL

	IF @DOG_ID_BANK IS NOT NULL	AND @DOG_NPP_BANK IS NOT NULL
	BEGIN
		--
		--	0. Поиск Договора по DOG_ID_BANK и DOG_NPP_BANK (банковским идентификаторам)
		--
		SELECT	@DOG_ID_OLD		= DOG_ID,
				@DOG_NPP_OLD	= DOG_NPP
		FROM	U_DOGOVOR (NOLOCK)
		WHERE	RESIDENT_ID		= @RESIDENT_ID	AND
				DOG_ID_BANK		= @DOG_ID_BANK	AND
				DOG_NPP_BANK	= @DOG_NPP_BANK	AND
				DEL_FLAG	IS NULL 
	END

	IF @PS__UNI_ID IS NOT NULL
	BEGIN
		--
		--	1. Поиск ПС по UNI_ID
		--
		SELECT	@PS_ID_OLD	= PS_ID
		FROM	U_PS (NOLOCK)
		WHERE	UNI_ID		= @PS__UNI_ID	AND
				DEL_FLAG	IS NULL 
				
		IF @PS_ID_OLD IS NULL 
		-- ПС НЕ найден по UNI_ID 
		BEGIN
			--
			--	2. Поиск ПС по Номеру ПС
			--
			SELECT	@PS_ID_OLD		= PS_ID
			FROM	U_PS (NOLOCK)
			WHERE	RESIDENT_ID	= @RESIDENT_ID	AND
					BANK_ID		= @BANK_ID		AND
					N_PS		= @PS__N_PS		AND
					DEL_FLAG	IS NULL 
		
			IF @PS_ID_OLD IS NULL 
			-- ПС НЕ найден по Номеру ПС -> -> завершаем приём 
			BEGIN
				SELECT	@RC = 2
				GOTO	EXIT_OPLATA_LOAD
			END
		END	
	END

	IF @SCHET__N_SCHET	IS NOT NULL
	BEGIN
		--
		--	Поиск Счёта по переданным реквизитам
		--
		SELECT	@SCHET_ID_OLD	= SCHET_ID 	
		FROM	U_SCHET (NOLOCK)
		WHERE	RESIDENT_ID						= @RESIDENT_ID							AND
				BANK_ID							= @BANK_ID								AND
				UPPER(LTRIM(RTRIM(N_SCHET)))	= UPPER(LTRIM(RTRIM(@SCHET__N_SCHET)))	AND
				ISNULL(D_OPEN, CONVERT( SMALLDATETIME, '19370101'))	= ISNULL(@SCHET__D_OPEN, CONVERT( SMALLDATETIME, '19370101'))	AND 
				KODV							= @SCHET__KODV							AND	
				ISNULL(TYPE_SCHET_ID, 0)		= ISNULL(@SCHET__TYPE_SCHET_ID, 0)		AND
				DEL_FLAG						IS NULL
	
		IF ISNULL(@SCHET_ID_OLD, 0) = 0 
		-- Счёт не найден - будем добалять
		BEGIN
			--
			--	Проверка кода валюты Счёта
			--
			IF NOT EXISTS	(	SELECT	555
								FROM	VALW (NOLOCK)
								WHERE	KOD	=  @SCHET__KODV	
							)
				BEGIN
					SELECT	@RC		= 81
					GOTO	EXIT_OPLATA_LOAD
				END
			
			--
			--	Проверка вида Счёта
			--
			IF NOT EXISTS	(	SELECT	555
								FROM	TYPES_SCHETS (NOLOCK)
								WHERE	TYPE_SCHET_ID			=  @SCHET__TYPE_SCHET_ID	OR
										@SCHET__TYPE_SCHET_ID	IS NULL
							)
				BEGIN
					SELECT	@RC		= 82
					GOTO	EXIT_OPLATA_LOAD
				END
				
			--
			--	Определяем ID Счёта
			--
			SELECT	@SCHET_ID_OLD = MAX( SCHET_ID ) + 1
			FROM	U_SCHET (NOLOCK)
			WHERE	RESIDENT_ID	= @RESIDENT_ID
			IF	@@ERROR <> 0
				BEGIN	
					SELECT	@RC		= 83
					GOTO	EXIT_OPLATA_LOAD
				END
	
			SELECT	@SCHET_ID_OLD	= ISNULL( @SCHET_ID_OLD,  1 )
	
			--	
			--	Добавляем новую запись о Счёте
			--
			INSERT	INTO	U_SCHET  	
				( RESIDENT_ID, SCHET_ID, BANK_ID, N_SCHET, D_OPEN, KODV, TYPE_SCHET_ID, PRIM, DEL_FLAG )
			VALUES
				( @RESIDENT_ID, @SCHET_ID_OLD, @BANK_ID, @SCHET__N_SCHET, @SCHET__D_OPEN, @SCHET__KODV, @SCHET__TYPE_SCHET_ID, @SCHET__PRIM, NULL )
	
			IF	@@ERROR <> 0
				BEGIN	
					SELECT	@RC		= 80
					GOTO	EXIT_OPLATA_LOAD
				END
		END	-- добавления Счёта
	END

	IF	@IN_PART__NAMEP	IS NOT NULL
	BEGIN
		--
		--	Поиск Иностранного контрагента по переданным реквизитам
		--
		SELECT	@PARTNER_ID_OLD	= PARTNER_ID 	
		FROM	U_IN_PART (NOLOCK)
		WHERE	KODS						= @IN_PART__KODS												AND
				UPPER(LTRIM(RTRIM(NAMEP)))	= UPPER(LTRIM(RTRIM(@IN_PART__NAMEP)))							AND
				ISNULL(INN, '')				= ISNULL(@IN_PART__INN, '')										AND
				UPPER(LTRIM(RTRIM(ISNULL(ADRES, ''))))	= UPPER(LTRIM(RTRIM(ISNULL(@IN_PART__ADRES, ''))))	AND
				ISNULL(TYPE, '')			= ISNULL(@IN_PART__TYPE, '')									AND
				DEL_FLAG					IS NULL
	
		IF ISNULL(@PARTNER_ID_OLD, 0) = 0 
		-- Иностранный контрагент не найден - будем добалять
		BEGIN
			--
			--	Проверка кода страны
			--
			IF NOT EXISTS	(	SELECT	*
								FROM	OKSMT (NOLOCK)
								WHERE	KOD	=  @IN_PART__KODS	
							)
				BEGIN
					SELECT	@RC		= 71
					GOTO	EXIT_OPLATA_LOAD
				END
	
			--
			--	Определяем ID Иностранного контрагента
			--
			SELECT	@PARTNER_ID_OLD = MAX( PARTNER_ID ) + 1
			FROM	U_IN_PART (NOLOCK)
				
			IF	@@ERROR <> 0
				BEGIN	
					SELECT	@RC		= 72
					GOTO	EXIT_OPLATA_LOAD
				END
	
			SELECT	@PARTNER_ID_OLD	= ISNULL( @PARTNER_ID_OLD,  1 )
	
			--	
			--	Добавляем новую запись об Иностранном контрагенте
			--
			INSERT	INTO	U_IN_PART  	
					( PARTNER_ID, NAMEP,  KODS, INN, ADRES, TYPE, DEL_FLAG )
			VALUES
					( @PARTNER_ID_OLD, @IN_PART__NAMEP, @IN_PART__KODS, @IN_PART__INN, @IN_PART__ADRES, @IN_PART__TYPE, NULL )
	
			IF	@@ERROR <> 0
				BEGIN	
					SELECT	@RC		= 73
					GOTO	EXIT_OPLATA_LOAD
				END
		END	-- добавления Иностранного контрагента

		IF	@IN_PART_BANKS__NAMEB 	IS NOT NULL
		BEGIN
			--
			--	Поиск Банка иностранного контрагента по переданным реквизитам
			--
			SELECT	@IN_PART_BANK_ID_OLD = IN_PART_BANK_ID 	
			FROM	U_IN_PART_BANKS (NOLOCK)
			WHERE	PARTNER_ID					= @PARTNER_ID_OLD								AND
					UPPER(LTRIM(RTRIM(NAMEB)))	= UPPER(LTRIM(RTRIM(@IN_PART_BANKS__NAMEB 	)))	AND
					ISNULL( BIK, '')			= ISNULL( @IN_PART_BANKS__BIK, '')				AND
					ISNULL( SWIFT, '')			= ISNULL( @IN_PART_BANKS__SWIFT, '')			AND
					ISNULL( HP, '')				= ISNULL( @IN_PART_BANKS__HP, '')				AND
					ISNULL( KODS, '')			= ISNULL( @IN_PART_BANKS__KODS, '')				AND
					DEL_FLAG					IS NULL
		
			IF ISNULL(@IN_PART_BANK_ID_OLD, 0) = 0 
			-- Банк иностранного контрагента не найден - будем добалять
			BEGIN
				--
				--	Проверка кода страны
				--
				IF NOT EXISTS	(	SELECT	*
									FROM	OKSMT (NOLOCK)
									WHERE	KOD	=  @IN_PART_BANKS__KODS	
								)
					BEGIN
						SELECT	@RC		= 74
						GOTO	EXIT_OPLATA_LOAD
					END
		
				--
				--	Определяем ID Банка Иностранного контрагента
				--
				SELECT	@IN_PART_BANK_ID_OLD = MAX( IN_PART_BANK_ID ) + 1
				FROM	U_IN_PART_BANKS (NOLOCK)
				WHERE	PARTNER_ID	=	@PARTNER_ID_OLD
					
				IF	@@ERROR <> 0
					BEGIN	
						SELECT	@RC		= 75
						GOTO	EXIT_OPLATA_LOAD
					END
		
				SELECT	@IN_PART_BANK_ID_OLD	= ISNULL( @IN_PART_BANK_ID_OLD,  1 )
		
				--	
				--	Добавляем новую запись о Банке Иностранного контрагента
				--
				--	
				INSERT	INTO	U_IN_PART_BANKS  	
							(	PARTNER_ID, IN_PART_BANK_ID, NAMEB, BIK, SWIFT, HP, KODS, DEL_FLAG )
				VALUES
							(	@PARTNER_ID_OLD, @IN_PART_BANK_ID_OLD, @IN_PART_BANKS__NAMEB, @IN_PART_BANKS__BIK, @IN_PART_BANKS__SWIFT, @IN_PART_BANKS__HP, @IN_PART_BANKS__KODS, NULL )
		
				IF	@@ERROR <> 0
					BEGIN	
						SELECT	@RC		= 76
						GOTO	EXIT_OPLATA_LOAD
					END
			END	-- добавления Банка иностранного контрагента
		END
	END

	--
	--	3. Поиск Платежа по UNI_ID
	--
	SELECT	@OPL_ID_OLD	= OPL_ID,
			@NPP_OLD	= NPP
	FROM	U_OPLATA (NOLOCK)
	WHERE	UNI_ID		= @UNI_ID	AND
			DEL_FLAG	IS NULL 
	IF	@OPL_ID_OLD IS NOT NULL
	-- Платёж найден по UNI_ID -> приём-обновление
		SELECT	@FLAG_LOAD = 2
	ELSE
	BEGIN
		--
		--	4. Поиск Платежа по ключевым реквизитам 
		--
		SELECT	@OPL_ID_OLD	= OPL_ID,
				@NPP_OLD	= NPP
		FROM	U_OPLATA	(NOLOCK)
		WHERE	RESIDENT_ID						= @RESIDENT_ID						AND
				BANK_ID							= @BANK_ID							AND
				KODOP							= @KODOP							AND
				ISNULL(D_REFER, CONVERT( SMALLDATETIME, '19370101'))	= ISNULL(@D_REFER, CONVERT( SMALLDATETIME, '19370101'))	AND
				ISNULL(DIRECTION , '')			= ISNULL(@DIRECTION , '')			AND
				ISNULL(VALP  , '')				= ISNULL(@VALP  , '')				AND
				ISNULL(VALK  , '')				= ISNULL(@VALK  , '')				AND
				SUMP 							= @SUMP				 				AND
				SUMK 							= @SUMK				 				AND
				ISNULL(SCHET_ID, 0)				= ISNULL(@SCHET_ID_OLD, 0)			AND
				DEL_FLAG			IS NULL 										AND
				UNI_ID				IS NULL
		IF	@OPL_ID_OLD IS NOT NULL
		-- Платёж найден по ключевым реквизитам -> приём-обновление
			SELECT	@FLAG_LOAD = 2
	END


	IF	@FLAG_LOAD = 2 
	-- приём-обновление
	BEGIN
		EXECUTE U_OPLATA_UPDATE
				@RESIDENT_ID	= @RESIDENT_ID,
				@OPL_ID			= @OPL_ID_OLD,
				@NPP			= @NPP_OLD,
				@DIRECTION		= @DIRECTION,
				@BANK_ID		= @BANK_ID,
				@KODOP			= @KODOP,
				@VALP			= @VALP,
				@SUMP			= @SUMP,
				@VALK			= @VALK,
				@SUMK			= @SUMK,
				@KODS			= @KODS,
				@USER_ID		= 'SYSTEM',
				@KODS_IN_BANK	= @KODS_IN_BANK,
				@SCHET_ID		= @SCHET_ID_OLD,
				@KKURS			= @KKURS,
				@PS_ID			= @PS_ID_OLD,
				@N_PS_OLD		= @N_PS_OLD,
				@D_PLAT			= @D_PLAT,
				@N_PLAT			= @N_PLAT,
				@D_REFER		= @D_REFER,
				@N_REFER		= @N_REFER,
				@PRIZ_OUT		= @PRIZ_OUT,
				@N_KONTR		= @N_KONTR,
				@PRIM			= @PRIM,
				@TYPE			= @TYPE,
				@TYPE_99010		= @TYPE_99010,
				@PARTNER_ID		= @PARTNER_ID_OLD,
				@IN_PART_BANK_ID= @IN_PART_BANK_ID_OLD,
				@D_VAL			= @D_VAL, 
				@KOD_VAL		= @KOD_VAL,
				@SUM_VAL		= @SUM_VAL, 
				@VID_USLUG		= @VID_USLUG,  
				@VID_DIRECTION	= @VID_DIRECTION, 
				@PRIM_USLUG		= @PRIM_USLUG, 
				@PRIM_BANK		= @PRIM_BANK,  
				@NPP_BANK		= @NPP,
				@UNI_ID			= @UNI_ID,
				@DOG_ID			= @DOG_ID_OLD,
				@DOG_NPP		= @DOG_NPP_OLD,
				@KONTR_SROK		= @KONTR_SROK,
				@DOG_ID_BANK	= @DOG_ID_BANK,
				@DOG_NPP_BANK	= @DOG_NPP_BANK,
				@D_LOAD			= @D_TODAY,
				@SRC_LOAD		= 'АСВКБ',
				@RC				= @RC1 OUTPUT 

			IF	@RC1 > 0					
				BEGIN
					SELECT	@RC = @RC1
					GOTO	EXIT_OPLATA_LOAD
				END	
	END

	IF	@FLAG_LOAD = 1 
	-- приём-добавление
	BEGIN
		--	----------------------------------------------
		--	Вычисляем № п/п платежа
		--	----------------------------------------------
		SELECT	@NPP_OLD = MAX( NPP ) + 1 
		FROM	U_OPLATA (NOLOCK)
		WHERE	RESIDENT_ID	= 	@RESIDENT_ID	AND
				DEL_FLAG	IS NULL				

		SELECT 	@NPP_OLD	=  ISNULL( @NPP_OLD,  1 )
		
		EXECUTE U_OPLATA_INSERT
				@RESIDENT_ID	= @RESIDENT_ID,
				@NPP			= @NPP_OLD,
				@DIRECTION		= @DIRECTION,
				@BANK_ID		= @BANK_ID,
				@SCHET_ID		= @SCHET_ID_OLD,
				@KODOP			= @KODOP,
				@VALP			= @VALP,
				@SUMP			= @SUMP,
				@VALK			= @VALK,
				@SUMK			= @SUMK,
				@KKURS			= @KKURS,
				@KODS			= @KODS,
				@PS_ID			= @PS_ID_OLD,
				@N_PS_OLD		= @N_PS_OLD,
				@D_PLAT			= @D_PLAT,
				@N_PLAT			= @N_PLAT,
				@D_REFER		= @D_REFER,
				@N_REFER		= @N_REFER,
				@PRIZ_OUT		= @PRIZ_OUT,
				@N_KONTR		= @N_KONTR,
				@PRIM			= @PRIM,
				@USER_ID		= 'SYSTEM',
				@TYPE			= @TYPE,
				@TYPE_99010		= @TYPE_99010,
				@KODS_IN_BANK	= @KODS_IN_BANK,
				@PARTNER_ID		= @PARTNER_ID_OLD,
				@IN_PART_BANK_ID= @IN_PART_BANK_ID_OLD,
				@D_VAL			= @D_VAL,
				@KOD_VAL		= @KOD_VAL, 
				@SUM_VAL		= @SUM_VAL,
				@VID_USLUG		= @VID_USLUG, 
				@VID_DIRECTION	= @VID_DIRECTION,  
				@PRIM_USLUG		= @PRIM_USLUG, 
				@PRIM_BANK		= @PRIM_BANK, 
				@NPP_BANK		= @NPP,
				@UNI_ID			= @UNI_ID,
				@DOG_ID			= @DOG_ID_OLD,
				@DOG_NPP		= @DOG_NPP_OLD,
				@KONTR_SROK		= @KONTR_SROK,
				@DOG_ID_BANK	= @DOG_ID_BANK,
				@DOG_NPP_BANK	= @DOG_NPP_BANK,
				@D_LOAD			= @D_TODAY,  
				@SRC_LOAD		= 'АСВКБ',
				@OPL_ID			= @RC1 OUTPUT,
				@RC				= @RC2 OUTPUT 

			IF	NOT ( @RC2 = 0 AND @RC1 > 0 )	
				BEGIN
					SELECT	@RC = @RC2
					GOTO	EXIT_OPLATA_LOAD
				END
	END		

--
--	Возврат кода завершения и признака приёма
--
EXIT_OPLATA_LOAD:
	SELECT	RC = @RC, FLAG_LOAD = @FLAG_LOAD
GO

GRANT  EXECUTE  ON [dbo].[U_OPLATA_LOAD]  TO [OPERS]
GO

--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[U_OPLATA_LOAD_XML_VK_UVED]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[U_OPLATA_LOAD_XML_VK_UVED]
GO

CREATE PROCEDURE [dbo].[U_OPLATA_LOAD_XML_VK_UVED]
--	------------------------------------------------------------------------------------------------------------------------
--	Загрузка Платежа из XML-файла формата ВК УВЭД
--	------------------------------------------------------------------------------------------------------------------------
--
--	Возвращает:
--	1. RC 				
--	   RC =	0	- нормальное завершение		
--			2	- ПС не найден						
--			10	- ошибка при загрузке Платежа
--			15	- Платеж не найден (загрузка-обновление)
--			20	- ошибка при вычислении идентификатора Платежа
--			40	- код валюты Платежа отсутствует в справочнике
--			45	- код валюты цены контракта (договора) отсутствует в справочнике
--			46	- код валюты корреспондентского счёта отсутствует в справочнике
--			47	- Код валюты цены контракта (договора) не соответствует коду валюты, указанному в Паспорте сделки, и не найден среди кодов валют в предыдущих условиях контракта (договора)
--			50	- код операции отсутствует в справочнике
--			56	- ПС отсутствует в БД
--			71	- Код страны Иностранного контрагента отсутствует в справочнике
--			72	- Ошибка при вычислении идентификатора Иностранного контрагента
--			73	- Ошибка при добавлении Иностранного контрагента
--			74	- Код страны Банка иностранного контрагента отсутствует в справочнике
--			75	- Ошибка при вычислении идентификатора Банка иностранного контрагента
--			76	- Ошибка при добавлении Банка иностранного контрагента
--			80	- Ошибка при добавлении Счёта
--			81	- код валюты Счёта отсутствует в справочнике
--			82	- Тип Счёта отсутствует в справочнике
--			83	- Ошибка при вычислении идентификатора Счёта
--			90	- код страны банка - отправителя (получателя) платежа отсутствует в справочнике
--			95	- код страны банка - нерезидента отсутствует в справочнике
--			99	- Сумма в валюте цены контракта не может быть меньше распределённой суммы (загрузка-обновление)
--			100 - ошибка при регистрации события
--			130	- дублирование порядкового номера Платежа
--			201	- Платёж распределён: менять Паспорт сделки нельзя (загрузка-обновление)
--			202	- Платёж распределён: менять Код валюты цены контракта нельзя (загрузка-обновление)
--			203	- Платёж распределён: менять направление Платежа нельзя (загрузка-обновление)
--			204	- Платёж распределён: менять Код вида валютной операции нельзя (загрузка-обновление)
--			205	- Платёж распределён: менять Детализацию кода вида валютной операции нельзя (загрузка-обновление)
--			206	- Платёж распределён: менять Договор (контракт) нельзя (загрузка-обновление)
--
--	2.FLAG_LOAD = 	1 - загрузка-добавление,
--					2 - загрузка-обновление
--	------------------------------------------------------------------------------------------------------------------------
--	(Модификация	в версии 2.1.0)
--	------------------------------------------------------------------------------------------------------------------------
(
	@RESIDENT_ID			AS INTEGER,
	@BANK_ID				AS INTEGER,
	@GID					AS VARCHAR (50),
	@DIRECTION 				AS CHAR (1),
	@KODOP					AS CHAR (5),
	@TYPE					AS CHAR (1)	,
	@TYPE_99010				AS CHAR (1)	, 	 	
	@VALP					AS CHAR (3),
	@SUMP					AS DECIMAL (16, 2),
	@VALK					AS CHAR (3),
	@SUMK					AS DECIMAL (16, 2) ,
	@KKURS					AS DECIMAL (16,8),
	@PRIZ_OUT				AS CHAR (1)	,
	@KODS_IN_BANK			AS CHAR (3)	,
	@D_REFER				AS SMALLDATETIME,
	@N_REFER				AS VARCHAR (100),
	@KODS					AS CHAR (3),
	@D_PLAT					AS SMALLDATETIME,
	@N_PLAT					AS VARCHAR (100),
	@PRIM					AS VARCHAR (500),
	@PRIM_BANK				AS VARCHAR (500),
	@PS__N_PS				AS CHAR(22),
	@SCHET__N_SCHET			AS VARCHAR (50),
	@SCHET__KODV			AS CHAR (3),
	@SCHET__D_OPEN			AS SMALLDATETIME,
	@SCHET__TYPE_SCHET_ID	AS INTEGER,
	@SCHET__PRIM			AS VARCHAR (100),
	@IN_PART__NAMEP			AS VARCHAR (300),
	@IN_PART__KODS			AS CHAR (3),
	@IN_PART__INN			AS VARCHAR (12),
	@IN_PART__ADRES			AS VARCHAR (300),
	@IN_PART_BANKS__NAMEB 	AS VARCHAR (300),
	@IN_PART_BANKS__BIK		AS CHAR (9),
	@IN_PART_BANKS__SWIFT	AS VARCHAR (11),
	@IN_PART_BANKS__HP 		AS CHAR (2),
	@IN_PART_BANKS__KODS 	AS CHAR (3),
	@USER_ID				AS VARCHAR (30),
	@FLAG_LOAD				AS INTEGER OUTPUT,
	@RC 					AS INTEGER OUTPUT
)
AS
	SET NOCOUNT ON
	--
	--	Рабочие переменные
	--
	DECLARE	@RC1					AS INTEGER,
			@RC2					AS INTEGER,
			@OPL_ID_OLD				AS INTEGER,
			@NPP_OLD				AS INTEGER,
			@PS_ID_OLD				AS INTEGER,
			@SCHET_ID_OLD			AS INTEGER,
			@PARTNER_ID_OLD			AS INTEGER,
			@IN_PART_BANK_ID_OLD	AS INTEGER,
			@D_TODAY				AS SMALLDATETIME

	--
	--	Переменные для перезаписи полей при загрузке-обновлении
	--
	DECLARE	@N_KONTR			AS VARCHAR (100),
			@N_PS_OLD			AS CHAR (25),
			@D_VAL				AS SMALLDATETIME,
			@KOD_VAL			AS CHAR (3),
			@SUM_VAL			AS DECIMAL (16, 2),
			@VID_USLUG			AS VARCHAR (7),
			@VID_DIRECTION		AS CHAR (1),
			@PRIM_USLUG			AS VARCHAR (500),
			@KONTR_SROK			AS CHAR(4)
			
	--
	--	Начальные значения
	--
	SELECT	@FLAG_LOAD				= 1
	SELECT	@D_TODAY				= CONVERT(SMALLDATETIME,GETDATE())
	SELECT	@RC1 					= 0
	SELECT	@RC2 					= 0
	SELECT	@OPL_ID_OLD				= NULL
	SELECT	@NPP_OLD				= NULL
	SELECT	@PS_ID_OLD				= NULL
	SELECT	@SCHET_ID_OLD			= NULL
	SELECT	@PARTNER_ID_OLD			= NULL
	SELECT	@IN_PART_BANK_ID_OLD	= NULL

	IF @PS__N_PS IS NOT NULL
	BEGIN
		--
		--	Поиск ПС по Номеру ПС
		--
			SELECT	@PS_ID_OLD		= PS_ID
			FROM	U_PS (NOLOCK)
			WHERE	RESIDENT_ID	= @RESIDENT_ID	AND
					BANK_ID		= @BANK_ID		AND
					N_PS		= @PS__N_PS		AND
					DEL_FLAG	IS NULL 
		
			IF @PS_ID_OLD IS NULL 
			-- ПС НЕ найден по Номеру ПС -> завершаем загрузку 
			BEGIN
				SELECT	@RC = 2
				GOTO	EXIT_OPLATA_LOAD_XML_VK_UVED
			END
	END	

	IF @SCHET__N_SCHET	IS NOT NULL
	BEGIN
		--
		--	Поиск Счёта по переданным реквизитам
		--
		SELECT	@SCHET_ID_OLD	= SCHET_ID 	
		FROM	U_SCHET (NOLOCK)
		WHERE	RESIDENT_ID						= @RESIDENT_ID							AND
				BANK_ID							= @BANK_ID								AND
				UPPER(LTRIM(RTRIM(N_SCHET)))	= UPPER(LTRIM(RTRIM(@SCHET__N_SCHET)))	AND
				ISNULL(D_OPEN, CONVERT( SMALLDATETIME, '19370101'))	= ISNULL(@SCHET__D_OPEN, CONVERT( SMALLDATETIME, '19370101'))	AND 
				KODV							= @SCHET__KODV							AND	
				ISNULL(TYPE_SCHET_ID, 0)		= ISNULL(@SCHET__TYPE_SCHET_ID, 0)		AND
				DEL_FLAG						IS NULL
	
		IF ISNULL(@SCHET_ID_OLD, 0) = 0 
		-- Счёт не найден - будем добалять
		BEGIN
			--
			--	Проверка кода валюты Счёта
			--
			IF NOT EXISTS	(	SELECT	*
								FROM	VALW (NOLOCK)
								WHERE	KOD	=  @SCHET__KODV	
							)
				BEGIN
					SELECT	@RC		= 81
					GOTO	EXIT_OPLATA_LOAD_XML_VK_UVED
				END

			--
			--	Проверка вида Счёта
			--
			IF NOT EXISTS	(	SELECT	*
								FROM	TYPES_SCHETS (NOLOCK)
								WHERE	TYPE_SCHET_ID			=  @SCHET__TYPE_SCHET_ID	OR
										@SCHET__TYPE_SCHET_ID	IS NULL
							)
				BEGIN
					SELECT	@RC		= 82
					GOTO	EXIT_OPLATA_LOAD_XML_VK_UVED
				END

			--
			--	Определяем ID Счёта
			--
			SELECT	@SCHET_ID_OLD = MAX( SCHET_ID ) + 1
			FROM	U_SCHET (NOLOCK)
			WHERE	RESIDENT_ID	= @RESIDENT_ID
			IF	@@ERROR <> 0
				BEGIN	
					SELECT	@RC		= 83
					GOTO	EXIT_OPLATA_LOAD_XML_VK_UVED
				END
	
			SELECT	@SCHET_ID_OLD	= ISNULL( @SCHET_ID_OLD,  1 )
	
			--	
			--	Добавляем новую запись о Счёте
			--
			INSERT	INTO	U_SCHET  	
				( RESIDENT_ID, SCHET_ID, BANK_ID, N_SCHET, D_OPEN, KODV, TYPE_SCHET_ID, PRIM, DEL_FLAG )
			VALUES
				( @RESIDENT_ID, @SCHET_ID_OLD, @BANK_ID, @SCHET__N_SCHET, @SCHET__D_OPEN, @SCHET__KODV, @SCHET__TYPE_SCHET_ID, @SCHET__PRIM, NULL )
	
			IF	@@ERROR <> 0
				BEGIN	
					SELECT	@RC		= 80
					GOTO	EXIT_OPLATA_LOAD_XML_VK_UVED
				END
		END	-- добавления Счёта
	END

	IF	@IN_PART__NAMEP	IS NOT NULL
	BEGIN
		--
		--	Поиск Иностранного контрагента по переданным реквизитам
		--
		SELECT	@PARTNER_ID_OLD	= PARTNER_ID 	
		FROM	U_IN_PART (NOLOCK)
		WHERE	KODS						= @IN_PART__KODS												AND
				UPPER(LTRIM(RTRIM(NAMEP)))	= UPPER(LTRIM(RTRIM(@IN_PART__NAMEP)))							AND
				ISNULL(INN, '')				= ISNULL(@IN_PART__INN, '')										AND
				UPPER(LTRIM(RTRIM(ISNULL(ADRES, ''))))	= UPPER(LTRIM(RTRIM(ISNULL(@IN_PART__ADRES, ''))))	AND
				DEL_FLAG					IS NULL
	
		IF ISNULL(@PARTNER_ID_OLD, 0) = 0 
		-- Иностранный контрагент не найден - будем добалять
		BEGIN
			--
			--	Проверка кода страны
			--
			IF NOT EXISTS	(	SELECT	*
								FROM	OKSMT (NOLOCK)
								WHERE	KOD	=  @IN_PART__KODS	
							)
				BEGIN
					SELECT	@RC		= 71
					GOTO	EXIT_OPLATA_LOAD_XML_VK_UVED
				END
	
			--
			--	Определяем ID Иностранного контрагента
			--
			SELECT	@PARTNER_ID_OLD = MAX( PARTNER_ID ) + 1
			FROM	U_IN_PART (NOLOCK)
				
			IF	@@ERROR <> 0
				BEGIN	
					SELECT	@RC		= 72
					GOTO	EXIT_OPLATA_LOAD_XML_VK_UVED
				END
	
			SELECT	@PARTNER_ID_OLD	= ISNULL( @PARTNER_ID_OLD,  1 )
	
			--	
			--	Добавляем новую запись об Иностранном контрагенте
			--
			INSERT	INTO	U_IN_PART  	
					( PARTNER_ID, NAMEP,  KODS, INN, ADRES, TYPE, DEL_FLAG )
			VALUES
					( @PARTNER_ID_OLD, @IN_PART__NAMEP, @IN_PART__KODS, @IN_PART__INN, @IN_PART__ADRES, NULL, NULL )
	
			IF	@@ERROR <> 0
				BEGIN	
					SELECT	@RC		= 73
					GOTO	EXIT_OPLATA_LOAD_XML_VK_UVED
				END
		END	-- добавления Иностранного контрагента

		IF	@IN_PART_BANKS__NAMEB 	IS NOT NULL
		BEGIN
			--
			--	Поиск Банка иностранного контрагента по переданным реквизитам
			--
			SELECT	@IN_PART_BANK_ID_OLD = IN_PART_BANK_ID 	
			FROM	U_IN_PART_BANKS (NOLOCK)
			WHERE	PARTNER_ID					= @PARTNER_ID_OLD								AND
					UPPER(LTRIM(RTRIM(NAMEB)))	= UPPER(LTRIM(RTRIM(@IN_PART_BANKS__NAMEB 	)))	AND
					ISNULL( BIK, '')			= ISNULL( @IN_PART_BANKS__BIK, '')				AND
					ISNULL( SWIFT, '')			= ISNULL( @IN_PART_BANKS__SWIFT, '')			AND
					ISNULL( HP, '')				= ISNULL( @IN_PART_BANKS__HP, '')				AND
					ISNULL( KODS, '')			= ISNULL( @IN_PART_BANKS__KODS, '')				AND
					DEL_FLAG					IS NULL
		
			IF ISNULL(@IN_PART_BANK_ID_OLD, 0) = 0 
			-- Банк иностранного контрагента не найден - будем добалять
			BEGIN
				--
				--	Проверка кода страны
				--
				IF NOT EXISTS	(	SELECT	*
									FROM	OKSMT (NOLOCK)
									WHERE	KOD	=  @IN_PART_BANKS__KODS	
								)
					BEGIN
						SELECT	@RC		= 74
						GOTO	EXIT_OPLATA_LOAD_XML_VK_UVED
					END
		
				--
				--	Определяем ID Банка Иностранного контрагента
				--
				SELECT	@IN_PART_BANK_ID_OLD = MAX( IN_PART_BANK_ID ) + 1
				FROM	U_IN_PART_BANKS (NOLOCK)
				WHERE	PARTNER_ID	=	@PARTNER_ID_OLD
					
				IF	@@ERROR <> 0
					BEGIN	
						SELECT	@RC		= 75
						GOTO	EXIT_OPLATA_LOAD_XML_VK_UVED
					END
		
				SELECT	@IN_PART_BANK_ID_OLD	= ISNULL( @IN_PART_BANK_ID_OLD,  1 )
		
				--	
				--	Добавляем новую запись о Банке Иностранного контрагента
				--
				--	
				INSERT	INTO	U_IN_PART_BANKS  	
							(	PARTNER_ID, IN_PART_BANK_ID, NAMEB, BIK, SWIFT, HP, KODS, DEL_FLAG )
				VALUES
							(	@PARTNER_ID_OLD, @IN_PART_BANK_ID_OLD, @IN_PART_BANKS__NAMEB, @IN_PART_BANKS__BIK, @IN_PART_BANKS__SWIFT, @IN_PART_BANKS__HP, @IN_PART_BANKS__KODS, NULL )
		
				IF	@@ERROR <> 0
					BEGIN	
						SELECT	@RC		= 76
						GOTO	EXIT_OPLATA_LOAD_XML_VK_UVED
					END
			END	-- добавления Банка иностранного контрагента
		END
	END

	--
	--	Вычисление значения кросскурса, если таковое не передано на вход
	--
	IF	@KKURS IS NULL	AND @SUMP <> 0
		SELECT	@KKURS = @SUMK / @SUMP  

	--
	--	1. Поиск Платежа по GID
	--
	SELECT	@OPL_ID_OLD		= OPL_ID,
			@NPP_OLD		= NPP,
			@N_KONTR		= N_KONTR,
			@N_PS_OLD		= N_PS_OLD,
			@D_VAL			= D_VAL, 
			@KOD_VAL		= KOD_VAL,
			@SUM_VAL		= SUM_VAL, 
			@VID_USLUG		= VID_USLUG,  
			@VID_DIRECTION	= VID_DIRECTION, 
			@PRIM_USLUG		= PRIM_USLUG, 
			@KONTR_SROK		= KONTR_SROK
	FROM	U_OPLATA (NOLOCK)
	WHERE	GID		= @GID	AND
			DEL_FLAG	IS NULL 
	IF	@OPL_ID_OLD IS NOT NULL
	-- Платёж найден по GID -> загрузка-обновление
		SELECT	@FLAG_LOAD = 2
	ELSE
	BEGIN
		--
		--	2. Поиск Платежа по ключевым реквизитам 
		--
		SELECT	@OPL_ID_OLD		= OPL_ID,
				@NPP_OLD		= NPP,
				@N_KONTR		= N_KONTR,
				@N_PS_OLD		= N_PS_OLD,
				@D_VAL			= D_VAL, 
				@KOD_VAL		= KOD_VAL,
				@SUM_VAL		= SUM_VAL, 
				@VID_USLUG		= VID_USLUG,  
				@VID_DIRECTION	= VID_DIRECTION, 
				@PRIM_USLUG		= PRIM_USLUG, 
				@KONTR_SROK		= KONTR_SROK
		FROM	U_OPLATA	(NOLOCK)
		WHERE	RESIDENT_ID						= @RESIDENT_ID						AND
				BANK_ID							= @BANK_ID							AND
				KODOP							= @KODOP							AND
				ISNULL(D_REFER, CONVERT( SMALLDATETIME, '19370101'))	= ISNULL(@D_REFER, CONVERT( SMALLDATETIME, '19370101'))	AND
				ISNULL(DIRECTION , '')			= ISNULL(@DIRECTION , '')			AND
				ISNULL(VALP  , '')				= ISNULL(@VALP  , '')				AND
				ISNULL(VALK  , '')				= ISNULL(@VALK  , '')				AND
				SUMP 							= @SUMP				 				AND
				SUMK 							= @SUMK				 				AND
				ISNULL(SCHET_ID, 0)				= ISNULL(@SCHET_ID_OLD, 0)			AND
				DEL_FLAG			IS NULL 										AND
				GID					IS NULL
		IF	@OPL_ID_OLD IS NOT NULL
		-- Платёж найден по ключевым реквизитам -> загрузка-обновление
			SELECT	@FLAG_LOAD = 2
	END


	IF	@FLAG_LOAD = 2 
	-- загрузка-обновление
	BEGIN
		EXECUTE U_OPLATA_UPDATE
				@RESIDENT_ID	= @RESIDENT_ID,
				@OPL_ID			= @OPL_ID_OLD,
					@NPP			= @NPP_OLD,
				@DIRECTION		= @DIRECTION,
				@BANK_ID		= @BANK_ID,
				@KODOP			= @KODOP,
				@VALP			= @VALP,
				@SUMP			= @SUMP,
				@VALK			= @VALK,
				@SUMK			= @SUMK,
				@KODS			= @KODS,
				@USER_ID		= 'SYSTEM',
				@KODS_IN_BANK	= @KODS_IN_BANK,
				@SCHET_ID		= @SCHET_ID_OLD,
				@KKURS			= @KKURS,
				@PS_ID			= @PS_ID_OLD,
					@N_PS_OLD		= @N_PS_OLD,
				@D_PLAT			= @D_PLAT,
				@N_PLAT			= @N_PLAT,
				@D_REFER		= @D_REFER,
				@N_REFER		= @N_REFER,
				@PRIZ_OUT		= @PRIZ_OUT,
					@N_KONTR		= @N_KONTR,
				@PRIM			= @PRIM,
				@TYPE			= @TYPE,
				@TYPE_99010		= @TYPE_99010,
				@PARTNER_ID		= @PARTNER_ID_OLD,
				@IN_PART_BANK_ID= @IN_PART_BANK_ID_OLD,
					@D_VAL			= @D_VAL, 
					@KOD_VAL		= @KOD_VAL,
					@SUM_VAL		= @SUM_VAL, 
					@VID_USLUG		= @VID_USLUG,  
					@VID_DIRECTION	= @VID_DIRECTION, 
					@PRIM_USLUG		= @PRIM_USLUG, 
				@PRIM_BANK		= @PRIM_BANK,  
				@NPP_BANK		= NULL,
				@UNI_ID			= NULL,
				@GID			= @GID,
				@DOG_ID			= NULL,
				@DOG_NPP		= NULL,
					@KONTR_SROK		= @KONTR_SROK,
				@DOG_ID_BANK	= NULL,
				@DOG_NPP_BANK	= NULL,
				@D_LOAD			= @D_TODAY,
				@SRC_LOAD		= 'Формат ВК УВЭД',
				@RC				= @RC1 OUTPUT 

			IF	@RC1 > 0					
				BEGIN
					SELECT	@RC = @RC1
					GOTO	EXIT_OPLATA_LOAD_XML_VK_UVED
				END	
	END

	IF	@FLAG_LOAD = 1 
	-- загрузка-добавление
	BEGIN
		--	----------------------------------------------
		--	Вычисляем № п/п платежа
		--	----------------------------------------------
		SELECT	@NPP_OLD = MAX( NPP ) + 1 
		FROM	U_OPLATA (NOLOCK)
		WHERE	RESIDENT_ID	= 	@RESIDENT_ID	AND
				DEL_FLAG	IS NULL				

		SELECT 	@NPP_OLD	=  ISNULL( @NPP_OLD,  1 )
		
		EXECUTE U_OPLATA_INSERT
				@RESIDENT_ID	= @RESIDENT_ID,
					@NPP			= @NPP_OLD,
				@DIRECTION		= @DIRECTION,
				@BANK_ID		= @BANK_ID,
				@SCHET_ID		= @SCHET_ID_OLD,
				@KODOP			= @KODOP,
				@VALP			= @VALP,
				@SUMP			= @SUMP,
				@VALK			= @VALK,
				@SUMK			= @SUMK,
				@KKURS			= @KKURS,
				@KODS			= @KODS,
				@PS_ID			= @PS_ID_OLD,
					@N_PS_OLD		= @N_PS_OLD,
				@D_PLAT			= @D_PLAT,
				@N_PLAT			= @N_PLAT,
				@D_REFER		= @D_REFER,
				@N_REFER		= @N_REFER,
				@PRIZ_OUT		= @PRIZ_OUT,
					@N_KONTR		= @N_KONTR,
				@PRIM			= @PRIM,
				@USER_ID		= 'SYSTEM',
				@TYPE			= @TYPE,
				@TYPE_99010		= @TYPE_99010,
				@KODS_IN_BANK	= @KODS_IN_BANK,
				@PARTNER_ID		= @PARTNER_ID_OLD,
				@IN_PART_BANK_ID= @IN_PART_BANK_ID_OLD,
					@D_VAL			= @D_VAL,
					@KOD_VAL		= @KOD_VAL, 
					@SUM_VAL		= @SUM_VAL,
					@VID_USLUG		= @VID_USLUG, 
					@VID_DIRECTION	= @VID_DIRECTION,  
					@PRIM_USLUG		= @PRIM_USLUG, 
				@PRIM_BANK		= @PRIM_BANK, 
				@NPP_BANK		= NULL,
				@UNI_ID			= NULL,
				@GID			= @GID,
				@DOG_ID			= NULL,
				@DOG_NPP		= NULL,
					@KONTR_SROK		= @KONTR_SROK,
				@DOG_ID_BANK	= NULL,
				@DOG_NPP_BANK	= NULL,
				@D_LOAD			= @D_TODAY,  
				@SRC_LOAD		= 'Формат ВК УВЭД',
				@OPL_ID			= @RC1 OUTPUT,
				@RC				= @RC2 OUTPUT 

			IF	NOT ( @RC2 = 0 AND @RC1 > 0 )	
				BEGIN
					SELECT	@RC = @RC2
					GOTO	EXIT_OPLATA_LOAD_XML_VK_UVED
				END
	END		

--
--	Возврат кода завершения и признака загрузки
--
EXIT_OPLATA_LOAD_XML_VK_UVED:
	SELECT	RC = @RC, FLAG_LOAD = @FLAG_LOAD
GO

GRANT  EXECUTE  ON [dbo].[U_OPLATA_LOAD_XML_VK_UVED]  TO [OPERS]
GO

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

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

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

--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[U_SPR_CONFIRM_UPDATE]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[U_SPR_CONFIRM_UPDATE]
GO

CREATE PROCEDURE [dbo].[U_SPR_CONFIRM_UPDATE]
--	--------------------------------------------------------------------------------------------------------------------------------
--	Изменение подтверждающего документа (в справке о ПД или без)
--	--------------------------------------------------------------------------------------------------------------------------------
--	Возвращает @RC:	 				
--	   @RC =	0	- нормальное завершение							
--				10	- ошибка при редактировании записи
--				30	- отсутствует сумма в валюте цены контракта 
--				40	- код валюты документа отсутствует в справочнике
--				41	- код валюты цены контракта отсутствует в справочнике
--				47	- Код валюты цены контракта не соответствует коду валюты, указанному в Паспорте сделки, и не найден среди кодов валют в предыдущих условиях контракта
--				60	- код вида документа отсутствует в справочнике
--				65	- код вида подтверждающего документа не входит в перечень кодов действующих на дату заполнения справки
--				80	- ошибка добавления уполномоченного лица Участника ВЭД
--				90	- ошибка добавления уполномоченного лица Банка
--				99	- Сумма в валюте цены контракта не может быть меньше распределённой суммы
--				100 - ошибка при регистрации события
--				130	- дублирование порядковых номеров справки и записи в справке
--				201	- ПД распределён: менять Код валюты цены контракта нельзя
--				202	- ПД распределён: менять Код вида документа нельзя
--				203	- ПД распределён: менять Детализацию кода вида документа нельзя
--				204	- ПД распределён: нельзя поставить признак ''Не учитывать в расчёте сальдо, оборотов и не показывать в ВБК''
--				205	- ПД распределён: менять Договор (контракт) нельзя
--	--------------------------------------------------------------------------------------------------------------------------------
--	(Модификация	в версии 2.1.0)
--	--------------------------------------------------------------------------------------------------------------------------------
(
	@RESIDENT_ID		AS INTEGER,
	@PD_ID				AS INTEGER,
	@PS_ID				AS INTEGER,
	@SPR_ID				AS INTEGER,
	@NPP				AS INTEGER,
	@BANK_ID			AS INTEGER,
	@KODD				AS CHAR(2),
	@DIRECTION			AS CHAR(1),
	@D_PRED				AS SMALLDATETIME,
	@D_PRED_BANK		AS SMALLDATETIME,
	@D_DOC				AS SMALLDATETIME,
	@N_GTD				AS VARCHAR(100),
	@SUMP				AS DECIMAL(16,2),
	@VALP				AS CHAR(3),
	@VALK				AS CHAR(3),
	@SUMK				AS DECIMAL(16,2),
	@KOR				AS CHAR(1),
	@KKURS				AS DECIMAL(16,8),
	@USER_ID			AS VARCHAR(30),
	@TYPE				AS CHAR(1),
	@PRIM				AS VARCHAR (500),
	@SPR_ID_BANK		AS INTEGER			= NULL,
	@NPP_BANK			AS INTEGER			= NULL,
	@FLAG_READY_TO_BANK	AS CHAR(1)			= NULL,
	@FIO_UPOLNOMR1		AS VARCHAR(100),
	@DOL_UPOLNOMR1		AS VARCHAR(100),
	@FIO_UPOLNOMR2		AS VARCHAR(100),
	@DOL_UPOLNOMR2		AS VARCHAR(100),
	@FIO_UPOLNOMB		AS VARCHAR(100),
	@DOL_UPOLNOMB		AS VARCHAR(100),
	@UNI_ID				AS UNIQUEIDENTIFIER	= NULL,
	@GID				AS VARCHAR (50)		= NULL,
	@D_LOAD				AS SMALLDATETIME	= NULL,  
	@SRC_LOAD			AS VARCHAR (15)		= NULL,  
	@KONTR_SROK			AS CHAR(4) 			= NULL,
	@PR_NOT_CALC		AS CHAR(1) 			= NULL,
	@TYPE_DR_PS			AS CHAR(1) 			= NULL,
	@RC				AS INTEGER OUTPUT
)
AS
	SET NOCOUNT ON
	--
	-- 	Объявляем переменные
	--
	DECLARE	@OST_SPR_CONFIRM	AS DECIMAL(16,2),
			@KOL				AS INTEGER,
			@DOG_ID_OLD			AS INTEGER,
			@DOG_ID_NEW			AS INTEGER,
			@VALK_OLD			AS CHAR (3),
			@KODD_OLD			AS CHAR (2),
			@DIRECTION_OLD		AS CHAR (1),
			@RETURN_STATUS		AS INTEGER,
			@UPOLNOMR_ID1		AS INTEGER,
			@UPOLNOMR_ID2		AS INTEGER,
			@UPOLNOMB_ID		AS INTEGER		
	
	--
	--	Начальные значения для переменных
	--
	SELECT 	@OST_SPR_CONFIRM	= 0
	SELECT 	@RETURN_STATUS 		= 0
	SELECT	@KOL 				= 0
	SELECT	@DOG_ID_OLD			= 0
	SELECT	@DOG_ID_NEW			= 0
	SELECT	@VALK_OLD			= ''
	SELECT	@KODD_OLD			= ''
	SELECT	@DIRECTION_OLD		= ''

		--
	--	Сумма в валюте цены контракта - если не указана, то пробуем брать из суммы документа
	--
	IF	@SUMK	IS NULL					AND	
		(@VALK IS NULL OR @VALK = @VALP)
		BEGIN
			SELECT @SUMK = @SUMP
			SELECT @VALK = @VALP
		END
	IF	@SUMK	IS NULL
		BEGIN
			SELECT	@RC = 30
			GOTO	EXIT_SPR_CONFIRM_UPDATE
		END

	--
	--	Вычисляем кросскурс
	--
	IF	@KKURS	IS NULL	AND
		@SUMP	<> 0
		SELECT @KKURS = @SUMK / @SUMP

	--
	--	 Проверка дублирования порядкового номера строки в справке (если переданы идентификаторы справки)
	--
	IF	@SPR_ID	IS NOT NULL	AND
		@NPP	IS NOT NULL	AND
		EXISTS	(	SELECT	*
					FROM	U_SPR_CONFIRM (NOLOCK)
					WHERE	RESIDENT_ID = @RESIDENT_ID 		AND
							PS_ID		= @PS_ID			AND
							SPR_ID 		= @SPR_ID			AND
							NPP			= @NPP				AND
							PD_ID		<> @PD_ID			AND		
							DEL_FLAG 	IS NULL		
				)
		BEGIN
			SELECT	@RC = 130
			GOTO	EXIT_SPR_CONFIRM_UPDATE
		END

	--
	--  	Контроль информации по справочникам CONFIRM_DOC, CONFIRM_DOC_NAMES, VALW
	--
	IF	NOT EXISTS ( 
						SELECT	*
						FROM	CONFIRM_DOC (NOLOCK)
						WHERE	KOD = @KODD
					)
		BEGIN
			SELECT	@RC = 60
			GOTO   	EXIT_SPR_CONFIRM_UPDATE
		END

--	Контроль отменён после консультаций с ЦБ России
--	IF	NOT EXISTS ( 
--						SELECT	* 
--						FROM	CONFIRM_DOC_NAMES (NOLOCK) 
--						WHERE	KOD		= @KODD		AND
--								ISNULL(@D_PRED, @D_DOC) >= D_BEGIN	AND
--								ISNULL(@D_PRED, @D_DOC) <= D_END				 
--					)
--		BEGIN
--			SELECT	@RC = 65
--			GOTO	EXIT_SPR_CONFIRM_UPDATE	
--		END


	IF	NOT EXISTS ( 
						SELECT	*
						FROM	VALW (NOLOCK)
						WHERE	KOD = @VALP
					)
		BEGIN
			SELECT	@RC = 40
			GOTO	EXIT_SPR_CONFIRM_UPDATE	
		END


	IF	NOT EXISTS ( 
						SELECT	*
						FROM	VALW (NOLOCK)
						WHERE	KOD = @VALK
					)
		BEGIN
			SELECT	@RC = 41
			GOTO	EXIT_SPR_CONFIRM_UPDATE	
		END

	--
	--  	Контроль кода валюты цены контракта на допустимое значение
	--		
	IF	@PS_ID	IS NOT NULL	AND
		@VALK	NOT IN	( 
							SELECT	U_DOGOVOR.KVALK 
							FROM	U_PS (NOLOCK) 
							INNER	JOIN	U_DOGOVOR (NOLOCK) ON
									U_DOGOVOR.RESIDENT_ID	= U_PS.RESIDENT_ID	AND
									U_DOGOVOR.DOG_ID		= U_PS.DOG_ID		AND
									U_DOGOVOR.DEL_FLAG		IS NULL
							WHERE	U_PS.RESIDENT_ID	= @RESIDENT_ID	AND
									U_PS.PS_ID			= @PS_ID		AND
									U_PS.DEL_FLAG		IS NULL 
							
						)
		BEGIN
			SELECT	@RC	= 47
			GOTO  	EXIT_SPR_CONFIRM_UPDATE
		END


	--
	--	Проверка наличия Уполномоченного лица от Участника ВЭД
	--	с правом 1-ой подписи
	--	и определение его идентификатора
	--
	SELECT @UPOLNOMR_ID1 = NULL

	IF	@FIO_UPOLNOMR1 IS NOT NULL	AND @DOL_UPOLNOMR1 IS NOT NULL		
		BEGIN
			SELECT	@UPOLNOMR_ID1 = UPOLNOMR_ID 
			FROM	U_UPOLNOMR (NOLOCK)
			WHERE	RESIDENT_ID					= @RESIDENT_ID							AND
					UPPER(RTRIM(LTRIM(FIO)))	= UPPER(RTRIM(LTRIM(@FIO_UPOLNOMR1)))	AND	
					UPPER(RTRIM(LTRIM(DOL)))	= UPPER(RTRIM(LTRIM(@DOL_UPOLNOMR1)))	AND
					DEL_FLAG					IS NULL
	
			IF	@UPOLNOMR_ID1 IS NULL
				BEGIN
					--
					--	Добавление уполномоченного лица Участника ВЭД
					--
					SELECT	@UPOLNOMR_ID1 = MAX( UPOLNOMR_ID ) + 1
					FROM	U_UPOLNOMR (NOLOCK)
					WHERE	RESIDENT_ID	= @RESIDENT_ID			

					IF	@@ERROR <> 0
						BEGIN	
							SELECT	@RC	= 80
							GOTO	EXIT_SPR_CONFIRM_UPDATE	
						END
		
					SELECT	@UPOLNOMR_ID1	= ISNULL(@UPOLNOMR_ID1,  1 )

					INSERT	INTO	U_UPOLNOMR  	
							( RESIDENT_ID, UPOLNOMR_ID, FIO, DOL, PRIM, DEL_FLAG )
					VALUES
							( @RESIDENT_ID, @UPOLNOMR_ID1, @FIO_UPOLNOMR1, @DOL_UPOLNOMR1, NULL, NULL )

					IF	@@ERROR <> 0
						BEGIN	
							SELECT	@RC	= 80
							GOTO	EXIT_SPR_CONFIRM_UPDATE	
						END
				END
		END

	--
	--	Проверка наличия Уполномоченного лица от Участника ВЭД
	--	с правом 2-ой подписи
	--	и определение его идентификатора
	--
	SELECT @UPOLNOMR_ID2 = NULL		

	IF	@FIO_UPOLNOMR2 IS NOT NULL AND @DOL_UPOLNOMR2 IS NOT NULL
		BEGIN
			SELECT	@UPOLNOMR_ID2 = UPOLNOMR_ID 
			FROM	U_UPOLNOMR (NOLOCK)
			WHERE	RESIDENT_ID					= @RESIDENT_ID							AND
					UPPER(RTRIM(LTRIM(FIO)))	= UPPER(RTRIM(LTRIM(@FIO_UPOLNOMR2)))	AND	
					UPPER(RTRIM(LTRIM(DOL)))	= UPPER(RTRIM(LTRIM(@DOL_UPOLNOMR2)))	AND
					DEL_FLAG	IS NULL
	
			IF	@UPOLNOMR_ID2 IS NULL
				BEGIN
					--
					--	Добавление уполномоченного лица Участника ВЭД
					--
					SELECT	@UPOLNOMR_ID2 = MAX( UPOLNOMR_ID ) + 1
					FROM	U_UPOLNOMR (NOLOCK)
					WHERE	RESIDENT_ID	= @RESIDENT_ID			

					IF	@@ERROR <> 0
						BEGIN	
							SELECT	@RC	= 80
							GOTO	EXIT_SPR_CONFIRM_UPDATE	
						END
		
					SELECT	@UPOLNOMR_ID2	= ISNULL(@UPOLNOMR_ID2,  1 )

					INSERT	INTO	U_UPOLNOMR  	
							( RESIDENT_ID, UPOLNOMR_ID, FIO, DOL, PRIM, DEL_FLAG )
					VALUES
							( @RESIDENT_ID, @UPOLNOMR_ID2, @FIO_UPOLNOMR2, @DOL_UPOLNOMR2, NULL, NULL )

					IF	@@ERROR <> 0
						BEGIN	
							SELECT	@RC	= 80
							GOTO	EXIT_SPR_CONFIRM_UPDATE	
						END
				END
		END

	--
	--	Проверка наличия Уполномоченного лица Банка
	--	и определение его идентификатора
	--
	SELECT	@UPOLNOMB_ID =	NULL

	IF	@FIO_UPOLNOMB IS NOT NULL	AND	@DOL_UPOLNOMB IS NOT NULL 	
		BEGIN

			SELECT	@UPOLNOMB_ID = UPOLNOMB_ID 
			FROM	U_UPOLNOMB (NOLOCK)
			WHERE	BANK_ID						= @BANK_ID								AND
					UPPER(RTRIM(LTRIM(FIO)))	= UPPER(RTRIM(LTRIM(@FIO_UPOLNOMB)))	AND	
					UPPER(RTRIM(LTRIM(DOL)))	= UPPER(RTRIM(LTRIM(@DOL_UPOLNOMB)))	AND
					DEL_FLAG	IS NULL
	
			IF	@UPOLNOMB_ID IS NULL
				BEGIN
					--
					--	Добавление уполномоченного лица Банка
					--
					SELECT	@UPOLNOMB_ID = MAX( UPOLNOMB_ID ) + 1
					FROM	U_UPOLNOMB (NOLOCK)
					WHERE	BANK_ID	= @BANK_ID		

					IF	@@ERROR <> 0
						BEGIN	
							SELECT	@RC	= 90
							GOTO	EXIT_SPR_CONFIRM_UPDATE	
						END

					SELECT	@UPOLNOMB_ID	= ISNULL( @UPOLNOMB_ID,  1 )

					INSERT	INTO	U_UPOLNOMB  	
							( BANK_ID,  UPOLNOMB_ID, FIO, DOL, N_PECH, PRIM, DEL_FLAG )
					VALUES
							( @BANK_ID, @UPOLNOMB_ID, @FIO_UPOLNOMB, @DOL_UPOLNOMB, NULL, NULL, NULL )
		
					IF	@@ERROR <> 0
						BEGIN	
							SELECT	@RC	= 90
							GOTO	EXIT_SPR_CONFIRM_UPDATE	
						END
				END
		END

	--
	--  	Проверка наличия распределения у данного ПД
	--		
	SELECT	@KOL	= 0
	SELECT	@KOL = COUNT(*)
	FROM	U_RASPRED_OPLATA_SPR_CONFIRM (NOLOCK)
	WHERE	RESIDENT_ID	= @RESIDENT_ID	AND
			PD_ID		= @PD_ID

	IF	@KOL > 0
		--
		--	Распределение есть, нельзя менять Договор (контракт), КВЦ, код вида документа, детализацию кода вида документа и проставлять признак ''Не использовать в расчёте сальдо, оборотов и не показывать в ВБК''
		--
		BEGIN	
			SELECT	@DOG_ID_OLD		= ISNULL(U_SPR_CONFIRM.DOG_ID, U_PS.DOG_ID),
					@VALK_OLD		= U_SPR_CONFIRM.VALK,	
					@KODD_OLD		= U_SPR_CONFIRM.KODD,
					@DIRECTION_OLD	= U_SPR_CONFIRM.DIRECTION
			FROM	U_SPR_CONFIRM (NOLOCK)
			LEFT	OUTER JOIN	U_PS (NOLOCK) ON
					U_PS.RESIDENT_ID	= U_SPR_CONFIRM.RESIDENT_ID	AND
					U_PS.PS_ID			= U_SPR_CONFIRM.PS_ID		AND
					U_PS.DEL_FLAG		IS NULL			
			WHERE	U_SPR_CONFIRM.RESIDENT_ID	= @RESIDENT_ID	AND
					U_SPR_CONFIRM.PD_ID			= @PD_ID		AND
					U_SPR_CONFIRM.DEL_FLAG 		IS NULL		

			IF	@PS_ID	IS NOT NULL
				-- запоминаем новый идентификатор Договора (контракта) по новому ПС
				SELECT	@DOG_ID_NEW	= DOG_ID
				FROM	U_PS (NOLOCK)
				WHERE	RESIDENT_ID	= @RESIDENT_ID	AND
						PS_ID		= @PS_ID		AND
						DEL_FLAG	IS NULL
			
			--IF	@DOG_ID	IS NOT NULL
			--	-- запоминаем новый идентификатор Договора (контракта)
			--	SELECT	@DOG_ID_NEW	= @DOG_ID

			--	Нельзя менять Договор (контракт)
			IF	ISNULL(@DOG_ID_OLD, 0) <> ISNULL(@DOG_ID_NEW, 0) 
				BEGIN
					SELECT	@RC	= 205
					GOTO  	EXIT_SPR_CONFIRM_UPDATE
				END

			--	Нельзя менять КВЦ
			IF	ISNULL(@VALK_OLD, '') <> ISNULL(@VALK, '')
				BEGIN
					SELECT	@RC	= 201
					GOTO  	EXIT_SPR_CONFIRM_UPDATE
				END

			--	Нельзя менять код вида документа
			IF	ISNULL(@KODD_OLD, '') <> ISNULL(@KODD, '')
				BEGIN
					SELECT	@RC	= 202
					GOTO  	EXIT_SPR_CONFIRM_UPDATE
				END

			--	Нельзя менять детализацию кода вида документа
			IF	ISNULL(@DIRECTION_OLD, '') <> ISNULL(@DIRECTION, '')
				BEGIN
					SELECT	@RC	= 203
					GOTO  	EXIT_SPR_CONFIRM_UPDATE
				END

			--	Нельзя поставить признак ''Не использовать в расчёте сальдо, оборотов и не показывать в ВБК''
			IF	@PR_NOT_CALC IS NOT NULL
				BEGIN
					SELECT	@RC	= 204
					GOTO  	EXIT_SPR_CONFIRM_UPDATE
				END

		END

	--
	--	@GID, @UNI_ID, дата загрузки @D_LOAD, источник @SRC_LOAD, @SPR_ID_BANK и @NPP_BANK (если не переданы на вход, то берём значения из записи)
	--
	IF	@GID	IS	NULL 
		SELECT	@GID	= GID
		FROM	U_SPR_CONFIRM (NOLOCK)
		WHERE	RESIDENT_ID	= @RESIDENT_ID	AND
				PD_ID		= @PD_ID		AND
				DEL_FLAG	IS NULL			
	IF	@UNI_ID	IS	NULL 
		SELECT	@UNI_ID	= UNI_ID
		FROM	U_SPR_CONFIRM (NOLOCK)
		WHERE	RESIDENT_ID	= @RESIDENT_ID	AND
				PD_ID		= @PD_ID		AND
				DEL_FLAG	IS NULL			
	IF	@D_LOAD	IS	NULL 
		SELECT	@D_LOAD	= D_LOAD
		FROM	U_SPR_CONFIRM (NOLOCK)
		WHERE	RESIDENT_ID	= @RESIDENT_ID	AND
				PD_ID		= @PD_ID		AND
				DEL_FLAG	IS NULL		
	IF	@SRC_LOAD	IS	NULL 
		SELECT	@SRC_LOAD	= SRC_LOAD
		FROM	U_SPR_CONFIRM (NOLOCK)
		WHERE	RESIDENT_ID	= @RESIDENT_ID	AND
				PD_ID		= @PD_ID		AND
				DEL_FLAG	IS NULL		
	IF	@SPR_ID_BANK	IS	NULL 
		SELECT	@SPR_ID_BANK	= SPR_ID_BANK
		FROM	U_SPR_CONFIRM (NOLOCK)
		WHERE	RESIDENT_ID	= @RESIDENT_ID	AND
				PD_ID		= @PD_ID		AND
				DEL_FLAG	IS NULL		
	IF	@NPP_BANK	IS	NULL 
		SELECT	@NPP_BANK	= NPP_BANK
		FROM	U_SPR_CONFIRM (NOLOCK)
		WHERE	RESIDENT_ID	= @RESIDENT_ID	AND
				PD_ID		= @PD_ID		AND
				DEL_FLAG	IS NULL		


	BEGIN TRANSACTION
	--
	--	Обновление записи 	
	--
	UPDATE	U_SPR_CONFIRM
	SET		BANK_ID 	= @BANK_ID, 
			PS_ID 		= @PS_ID,
			SPR_ID 		= @SPR_ID,	
			NPP			= @NPP,
			KODD 		= @KODD,
			DIRECTION	= @DIRECTION,
			D_DOC 		= @D_DOC,
			N_GTD 		= @N_GTD,
			SUMP 		= @SUMP,
			SUMK 		= @SUMK,
			VALP 		= @VALP,
			VALK 		= @VALK,
			KKURS 		= @KKURS,
			KOR			= @KOR,
			DKOR		= CONVERT(SMALLDATETIME, GETDATE()),
			PRIM		= @PRIM,
			SPR_ID_BANK	= @SPR_ID_BANK,
			NPP_BANK	= @NPP_BANK,
			TYPE		= @TYPE,
			UNI_ID		= @UNI_ID,
			GID			= @GID,
			D_LOAD		= @D_LOAD,
			SRC_LOAD	= @SRC_LOAD,
			KONTR_SROK	= @KONTR_SROK,
			PR_NOT_CALC	= @PR_NOT_CALC,
			TYPE_DR_PS	= @TYPE_DR_PS
	WHERE	RESIDENT_ID = @RESIDENT_ID 	AND
			PD_ID 		= @PD_ID		AND
			DEL_FLAG	IS NULL	
		
	IF	@@ERROR <> 0
		BEGIN	
			ROLLBACK TRANSACTION
			SELECT	@RC		= 10
			GOTO	EXIT_SPR_CONFIRM_UPDATE
		END
	ELSE
		SELECT	@RC 	= 0

	
	IF	@SPR_ID	IS NOT NULL	
	--	Во всех записях в справке о ПД проставляем одинаковые:
	--	- дата заполнения справки;
	--	- дата представления справки в Банк;
	--	- уполномоченное лицо от Банка;
	--	- уполномоченное лицо от Участника ВЭД с правом 1-ой подписи;
	--	- уполномоченное лицо от Участника ВЭД с правом 2-ой подписи;
	--	- дату корректировки справки
	--	- признак Справка готова для передачи в банк
		UPDATE	U_SPR_CONFIRM
		SET		D_PRED				= @D_PRED,
				D_PRED_BANK			= @D_PRED_BANK,
				UPOLNOMB_ID			= @UPOLNOMB_ID,
				UPOLNOMR_ID1		= @UPOLNOMR_ID1, 
				UPOLNOMR_ID2		= @UPOLNOMR_ID2, 
				DKOR				= CONVERT(SMALLDATETIME, GETDATE()),
				FLAG_READY_TO_BANK	= @FLAG_READY_TO_BANK	
		WHERE	RESIDENT_ID 	= @RESIDENT_ID 	AND
				PS_ID 			= @PS_ID		AND
				SPR_ID 			= @SPR_ID		

	--
	--	Проверка нарушения баланса по ПД
	--
	SELECT	@OST_SPR_CONFIRM	= SUMK 	- 
					( SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = @RESIDENT_ID AND R.PD_ID = @PD_ID )
	FROM	U_SPR_CONFIRM (NOLOCK) 
	WHERE	RESIDENT_ID = @RESIDENT_ID	AND
			PD_ID		= @PD_ID		AND
			DEL_FLAG	IS NULL

	IF	@OST_SPR_CONFIRM	< 0
		BEGIN
			ROLLBACK TRANSACTION
			SELECT @RC = 99
			GOTO   EXIT_SPR_CONFIRM_UPDATE
		END

	--
	--	Добавление события в журнал событий
	--
	EXECUTE	@RETURN_STATUS	= U_EVENT_INSERT
			@EVENT_NAME		= 'EDIT_S_CONFIRM',
			@USER_ID		= @USER_ID,
			@BANK_ID		= @BANK_ID,
			@RESIDENT_ID	= @RESIDENT_ID,
			@PS_ID			= @PS_ID,
			@SPR_ID			= @PD_ID
			
	IF	@RETURN_STATUS <> 0
		ROLLBACK TRANSACTION
	ELSE
		COMMIT TRANSACTION
--
--	Возврат кода завершения
--
EXIT_SPR_CONFIRM_UPDATE:
	SELECT	RC = @RC + @RETURN_STATUS
GO

GRANT  EXECUTE  ON [dbo].[U_SPR_CONFIRM_UPDATE]  TO [OPERS]
GO

--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[U_SPR_CONFIRM_SELECT_BY_ID]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[U_SPR_CONFIRM_SELECT_BY_ID]
GO

CREATE PROCEDURE [dbo].[U_SPR_CONFIRM_SELECT_BY_ID]
--	----------------------------------------------------------------------------------
--	Выборка информации о подтверждающих документах
--	----------------------------------------------------------------------------------
--	Если @PS_ID  = 0 - выбирает подтверждающие документы по всем ПС
--	Если @SPR_ID = 0 - ПД по всем справкам
--	Если @SPR_ID > 0 - ПД по одной справке
--	Если @SPR_ID < 0 - все ПД, вне зависимости от включения в справку (для грида ПД)
--	Дополнительно используется в отчёте
--	----------------------------------------------------------------------------------
--	(Модификация	в версии 2.1.0)
--	----------------------------------------------------------------------------------
(
	@RESIDENT_ID	AS INTEGER,
	@PS_ID			AS INTEGER,
	@SPR_ID			AS INTEGER
)
AS
	SELECT	U_SPR_CONFIRM.*,
			ISNULL(U_DOGOVOR.VID_KONTR, DOG_PS.VID_KONTR)	AS VID_KONTR_DOG,
			U_PS.N_PS,
			U_UPOLNOMB.FIO		AS FIO_BANK,
			U_UPOLNOMB.DOL		AS DOL_BANK,
			U_UPOLNOMR.FIO		AS FIO_RES_1,
			U_UPOLNOMR.DOL		AS DOL_RES_1,
			U_UPOLNOMR_2.FIO	AS FIO_RES_2,
			U_UPOLNOMR_2.DOL	AS DOL_RES_2,
			U_BANKS.NAMEB,
			U_BANKS.NAMEB_S,
			U_PS.NAMER,
			(	SELECT	SUM(SUMK)	
				FROM	U_RASPRED_OPLATA_SPR_CONFIRM (NOLOCK) 
				WHERE	U_RASPRED_OPLATA_SPR_CONFIRM.RESIDENT_ID 	= U_SPR_CONFIRM.RESIDENT_ID	AND
						U_RASPRED_OPLATA_SPR_CONFIRM.PD_ID 			= U_SPR_CONFIRM.PD_ID
			)	
			AS SUMK_RASP,
			[dbo].[U_SPR_CONFIRM_CALC_DATE_CHECK](U_SPR_CONFIRM.RESIDENT_ID, U_SPR_CONFIRM.PD_ID)	
			AS DATE_CHECK,
			[dbo].[U_SPR_CONFIRM_CALC_DAYS_BEFORE_DATE_CHECK](U_SPR_CONFIRM.RESIDENT_ID, U_SPR_CONFIRM.PD_ID, DATEADD( dd, DATEDIFF(dd, 0, GETDATE()), 0))
			AS DAYS_BEFORE_DATE_CHECK,
			[dbo].[U_SPR_CONFIRM_CALC_DAYS_AFTER_DATE_CHECK](U_SPR_CONFIRM.RESIDENT_ID, U_SPR_CONFIRM.PD_ID, DATEADD( dd, DATEDIFF(dd, 0, GETDATE()), 0))
			AS DAYS_AFTER_DATE_CHECK
	FROM	U_SPR_CONFIRM (NOLOCK) 
	INNER	JOIN	U_BANKS	(NOLOCK) ON 
			U_BANKS.BANK_ID				= U_SPR_CONFIRM.BANK_ID			AND
			U_BANKS.DEL_FLAG			IS NULL
	LEFT	OUTER	JOIN 	U_PS	(NOLOCK) ON	
			U_PS.RESIDENT_ID			= U_SPR_CONFIRM.RESIDENT_ID		AND
			U_PS.PS_ID					= U_SPR_CONFIRM.PS_ID			AND
			U_PS.DEL_FLAG				IS NULL		
	LEFT	OUTER JOIN	U_DOGOVOR	(NOLOCK) ON
			U_DOGOVOR.RESIDENT_ID		= U_SPR_CONFIRM.RESIDENT_ID		AND
			U_DOGOVOR.DOG_ID			= U_SPR_CONFIRM.DOG_ID			AND
			U_DOGOVOR.DOG_NPP			= U_SPR_CONFIRM.DOG_NPP			AND
			U_DOGOVOR.DEL_FLAG			IS NULL
	LEFT	OUTER JOIN	U_DOGOVOR AS DOG_PS (NOLOCK) ON
			DOG_PS.RESIDENT_ID			= U_PS.RESIDENT_ID				AND
			DOG_PS.DOG_ID				= U_PS.DOG_ID					AND
			DOG_PS.DOG_NPP				= U_PS.DOG_NPP					AND
			DOG_PS.DEL_FLAG				IS NULL		
	LEFT	OUTER	JOIN U_UPOLNOMB	(NOLOCK) ON	
			U_UPOLNOMB.BANK_ID			= U_SPR_CONFIRM.BANK_ID			AND	
			U_UPOLNOMB.UPOLNOMB_ID		= U_SPR_CONFIRM.UPOLNOMB_ID		AND	
			U_UPOLNOMB.DEL_FLAG			IS NULL				
	LEFT	OUTER	JOIN U_UPOLNOMR	(NOLOCK) ON	
			U_UPOLNOMR.RESIDENT_ID		= U_SPR_CONFIRM.RESIDENT_ID 	AND
			U_UPOLNOMR.UPOLNOMR_ID		= U_SPR_CONFIRM.UPOLNOMR_ID1	AND	
			U_UPOLNOMR.DEL_FLAG			IS NULL				
	LEFT	OUTER	JOIN U_UPOLNOMR AS U_UPOLNOMR_2 (NOLOCK) ON	
			U_UPOLNOMR_2.RESIDENT_ID	= U_SPR_CONFIRM.RESIDENT_ID 	AND
			U_UPOLNOMR_2.UPOLNOMR_ID	= U_SPR_CONFIRM.UPOLNOMR_ID2	AND
			U_UPOLNOMR_2.DEL_FLAG		IS NULL				
	WHERE	U_SPR_CONFIRM.RESIDENT_ID 	= @RESIDENT_ID		AND
			(
				@PS_ID					= 0			OR	
				U_SPR_CONFIRM.PS_ID	= @PS_ID
			) 												AND
			(	
				-- ПД по всем справкам
				@SPR_ID					= 0	AND
				U_SPR_CONFIRM.SPR_ID	IS NOT NULL
													OR	
				-- ПД по одной справке
				@SPR_ID					> 0	AND
				U_SPR_CONFIRM.SPR_ID	= @SPR_ID
													OR	
				-- все ПД, вне зависимости от включения в справку
				@SPR_ID					< 0
			) 												AND
			U_SPR_CONFIRM.DEL_FLAG		IS NULL	
	ORDER	BY U_PS.N_PS, U_SPR_CONFIRM.SPR_ID, U_SPR_CONFIRM.NPP		
GO

GRANT  EXECUTE  ON [dbo].[U_SPR_CONFIRM_SELECT_BY_ID]  TO [OPERS], [AUDITS]
GO

--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[U_SPR_CONFIRM_SELECT_BY_NPP]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[U_SPR_CONFIRM_SELECT_BY_NPP]
GO

CREATE PROCEDURE [dbo].[U_SPR_CONFIRM_SELECT_BY_NPP]
--	---------------------------------------------------------------------------------
--	Выборка информации о подтверждающем документе
--	---------------------------------------------------------------------------------
--	(Модификация	в версии 2.1.0)
--	---------------------------------------------------------------------------------
(
	@RESIDENT_ID	AS INTEGER,
	@PD_ID			AS INTEGER
)
AS
	--
	--	Рабочие переменные
	--
	DECLARE	@SUMK_RASP 	AS DECIMAL(16,2)

	--
	--	Начальные значения
	--
	SELECT	@SUMK_RASP	= 0
	
	--
	--	Распределение на Платежи
	--
	SELECT	@SUMK_RASP	= ISNULL(SUM(SUMK), 0)
	FROM	U_RASPRED_OPLATA_SPR_CONFIRM (NOLOCK) 
	WHERE	RESIDENT_ID = @RESIDENT_ID	AND
			PD_ID 		= @PD_ID 	

	SELECT	U_SPR_CONFIRM.*,
			U_PS.DOG_ID							AS PS_DOG_ID,
			U_PS.DOG_NPP						AS PS_DOG_NPP,
			U_PS.N_PS,
			@SUMK_RASP							AS SUMK_RASP,
			(U_SPR_CONFIRM.SUMK - @SUMK_RASP) 	AS SUMK_OSTATOK,
			U_UPOLNOMB.FIO						AS FIO_BANK,
			U_UPOLNOMB.DOL						AS DOL_BANK,
			U_UPOLNOMR.FIO						AS FIO_RES_1,
			U_UPOLNOMR.DOL						AS DOL_RES_1,
			U_UPOLNOMR_2.FIO					AS FIO_RES_2,
			U_UPOLNOMR_2.DOL					AS DOL_RES_2
	FROM	U_SPR_CONFIRM (NOLOCK)
	LEFT	OUTER	JOIN	U_PS (NOLOCK)ON 
			U_PS.PS_ID					= U_SPR_CONFIRM.PS_ID			AND
			U_PS.RESIDENT_ID			= U_SPR_CONFIRM.RESIDENT_ID		AND
			U_PS.DEL_FLAG				IS NULL	
	LEFT	OUTER JOIN	U_DOGOVOR AS DOG_PS (NOLOCK) ON
			DOG_PS.RESIDENT_ID			= U_PS.RESIDENT_ID				AND
			DOG_PS.DOG_ID				= U_PS.DOG_ID					AND
			DOG_PS.DOG_NPP				= U_PS.DOG_NPP					AND
			DOG_PS.DEL_FLAG				IS NULL
--	INNER	JOIN	U_BANKS	(NOLOCK) ON 
--			U_BANKS.BANK_ID				= U_SPR_CONFIRM.BANK_ID			AND
--			U_BANKS.DEL_FLAG			IS NULL
	LEFT	OUTER	JOIN U_UPOLNOMB	(NOLOCK) ON	
			U_UPOLNOMB.BANK_ID			= U_SPR_CONFIRM.BANK_ID			AND	
			U_UPOLNOMB.UPOLNOMB_ID		= U_SPR_CONFIRM.UPOLNOMB_ID		AND	
			U_UPOLNOMB.DEL_FLAG			IS NULL				
	LEFT	OUTER	JOIN U_UPOLNOMR	(NOLOCK) ON	
			U_UPOLNOMR.RESIDENT_ID		= U_SPR_CONFIRM.RESIDENT_ID 	AND
			U_UPOLNOMR.UPOLNOMR_ID		= U_SPR_CONFIRM.UPOLNOMR_ID1	AND	
			U_UPOLNOMR.DEL_FLAG			IS NULL				
	LEFT	OUTER	JOIN U_UPOLNOMR AS U_UPOLNOMR_2 (NOLOCK) ON	
			U_UPOLNOMR_2.RESIDENT_ID	= U_SPR_CONFIRM.RESIDENT_ID 	AND
			U_UPOLNOMR_2.UPOLNOMR_ID	= U_SPR_CONFIRM.UPOLNOMR_ID2	AND
			U_UPOLNOMR_2.DEL_FLAG		IS NULL				
 	WHERE	U_SPR_CONFIRM.RESIDENT_ID	= @RESIDENT_ID					AND
			U_SPR_CONFIRM.PD_ID			= @PD_ID						AND
			U_SPR_CONFIRM.DEL_FLAG		IS NULL				
GO

GRANT  EXECUTE  ON [dbo].[U_SPR_CONFIRM_SELECT_BY_NPP]  TO [OPERS], [AUDITS]
GO

--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[U_SPR_CONFIRM_SELECT_RASPRED]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[U_SPR_CONFIRM_SELECT_RASPRED]
GO

CREATE PROCEDURE [dbo].[U_SPR_CONFIRM_SELECT_RASPRED]
--	----------------------------------------------------------
--	Выборка списка ПД, распределённых на данный Платёж
--	----------------------------------------------------------
--	(Модификация	в версии 2.1.0)
--	----------------------------------------------------------
(
	@RESIDENT_ID	AS INTEGER,
	@OPL_ID			AS INTEGER
)
AS
	SET NOCOUNT ON
	--
	--	Рабочие переменные
	--
	DECLARE	@PS_ID	AS INTEGER,
			@MARK	AS BIT

	--
	--	Начальные значения
	--
	SELECT	@PS_ID	= 0
	SELECT	@MARK	= 0

	--
	--	Запоминаем ПС данного Платежа (для признака Другой ПС - PRIZ_DR_PS)
	--
	SELECT	@PS_ID	= ISNULL(U_OPLATA.PS_ID, 0)
	FROM	U_OPLATA (NOLOCK) 
	WHERE	U_OPLATA.RESIDENT_ID 	= @RESIDENT_ID			AND
			U_OPLATA.OPL_ID 		= @OPL_ID 				AND
			U_OPLATA.DEL_FLAG 		IS NULL		

	SELECT	U_SPR_CONFIRM.RESIDENT_ID, 
			U_SPR_CONFIRM.PD_ID, 
			U_SPR_CONFIRM.PS_ID, 
			@MARK AS MARK,
			U_SPR_CONFIRM.SUMK - 
			( SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_SPR_CONFIRM.RESIDENT_ID AND R.PD_ID = U_SPR_CONFIRM.PD_ID) AS SUM_OST,
			U_PS.N_PS, 
			CASE
				WHEN	ISNULL(U_SPR_CONFIRM.PS_ID, 0) > 0			AND
						@PS_ID > 0									AND
						ISNULL(U_SPR_CONFIRM.PS_ID, 0) <> @PS_ID
				THEN	'*'
				ELSE	NULL
			END	AS	PRIZ_DR_PS,
			U_SPR_CONFIRM.N_GTD, 
			U_SPR_CONFIRM.KODD, 
			U_SPR_CONFIRM.DIRECTION, 
			U_SPR_CONFIRM.D_DOC, 
			U_SPR_CONFIRM.VALK,		
			U_SPR_CONFIRM.SUMK, 
			( SELECT SUM(SUMK) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_SPR_CONFIRM.RESIDENT_ID AND R.PD_ID = U_SPR_CONFIRM.PD_ID) AS SUM_RASPR,
			U_RASPRED_OPLATA_SPR_CONFIRM.SUMK		AS SUM_RASPR_THIS_OPLATA,
			U_RASPRED_OPLATA_SPR_CONFIRM.D_KOR		AS D_RASPR_THIS_OPLATA,
			U_SPR_CONFIRM.SPR_ID, 
			U_SPR_CONFIRM.NPP, 
			U_SPR_CONFIRM.D_PRED, 
			U_SPR_CONFIRM.D_PRED_BANK 
	FROM	U_SPR_CONFIRM (NOLOCK)
	INNER   JOIN U_RASPRED_OPLATA_SPR_CONFIRM (NOLOCK) ON
			U_RASPRED_OPLATA_SPR_CONFIRM.RESIDENT_ID	= @RESIDENT_ID				AND
			U_RASPRED_OPLATA_SPR_CONFIRM.PD_ID 			= U_SPR_CONFIRM.PD_ID		AND
			U_RASPRED_OPLATA_SPR_CONFIRM.OPL_ID			= @OPL_ID
	LEFT	OUTER JOIN	U_PS	(NOLOCK) ON
			U_PS.RESIDENT_ID							= U_SPR_CONFIRM.RESIDENT_ID	AND
			U_PS.PS_ID									= U_SPR_CONFIRM.PS_ID		AND
			U_PS.DEL_FLAG								IS NULL
	WHERE 	U_SPR_CONFIRM.RESIDENT_ID					= @RESIDENT_ID				AND
			U_SPR_CONFIRM.DEL_FLAG						IS NULL			
	ORDER	BY U_SPR_CONFIRM.D_DOC
GO

GRANT  EXECUTE  ON [dbo].[U_SPR_CONFIRM_SELECT_RASPRED]  TO [OPERS], [AUDITS]
GO

--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[U_SPR_CONFIRM_SELECT_NOTRASPRED]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[U_SPR_CONFIRM_SELECT_NOTRASPRED]
GO

CREATE PROCEDURE [dbo].[U_SPR_CONFIRM_SELECT_NOTRASPRED]
--	----------------------------------------------------------------------------
--	Выборка списка ПД с ненулевым остатком для распределения на данный Платёж
--	----------------------------------------------------------------------------
--	Параметр @FLAG_SELECT определяет набор ПД, 
--	ограниченный по кодам вида документа и детализации кода:
--		0 - все ПД
--		1 - ПД Экспорт товаров
--		2 - ПД Импорт товаров
--		3 - ПД Экспорт услуг
--		4 - ПД Импорт услуг
--	----------------------------------------------------------------------------
--	(Модификация	в версии 2.1.0)
--	----------------------------------------------------------------------------
(
	@RESIDENT_ID	AS INTEGER,
	@OPL_ID			AS INTEGER,
	@FLAG_SELECT	AS INTEGER 
)
AS
	SET NOCOUNT ON
	--
	--	Рабочие переменные
	--
	DECLARE	@DOG_ID	AS INTEGER,
			@PS_ID	AS INTEGER,
			@VALK	AS CHAR(3),
			@MARK	AS BIT

	--
	--	Начальные значения
	--
	SELECT	@DOG_ID	= 0
	SELECT	@PS_ID	= 0
	SELECT	@VALK	= ''
	SELECT	@MARK	= 0

	--
	--	Запоминаем Договор, ПС (для признака Другой ПС - PRIZ_DR_PS) и КВЦ данного Платежа
	--
	SELECT	@DOG_ID	= ISNULL(U_OPLATA.DOG_ID, ISNULL(DOG_PS.DOG_ID, 0)),
			@PS_ID	= ISNULL(U_OPLATA.PS_ID, 0),
			@VALK	= U_OPLATA.VALK
	FROM	U_OPLATA (NOLOCK) 
	LEFT	OUTER JOIN	U_PS	(NOLOCK) ON
			U_PS.RESIDENT_ID		= U_OPLATA.RESIDENT_ID	AND
			U_PS.PS_ID				= U_OPLATA.PS_ID		AND
			U_PS.DEL_FLAG			IS NULL
	LEFT	OUTER JOIN	U_DOGOVOR AS DOG_PS (NOLOCK) ON
			DOG_PS.RESIDENT_ID		= U_PS.RESIDENT_ID		AND
			DOG_PS.DOG_ID			= U_PS.DOG_ID			AND
			DOG_PS.DOG_NPP			= U_PS.DOG_NPP			AND
			DOG_PS.DEL_FLAG			IS NULL
	WHERE	U_OPLATA.RESIDENT_ID 	= @RESIDENT_ID			AND
			U_OPLATA.OPL_ID 		= @OPL_ID 				AND
			U_OPLATA.DEL_FLAG 		IS NULL			

	IF @FLAG_SELECT = 1
	--
	--	Выбираем ПД Экспорт товаров
	--
	SELECT	U_SPR_CONFIRM.RESIDENT_ID, U_SPR_CONFIRM.PD_ID, U_SPR_CONFIRM.PS_ID,
			ISNULL(U_SPR_CONFIRM.DOG_ID, DOG_PS.DOG_ID)			AS PD_DOG_ID,
			@MARK AS MARK,
			U_SPR_CONFIRM.SUMK - 
			( SELECT  ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_SPR_CONFIRM.RESIDENT_ID AND R.PD_ID = U_SPR_CONFIRM.PD_ID) AS SUM_OST,
			U_PS.N_PS,
			CASE
				WHEN	ISNULL(U_SPR_CONFIRM.PS_ID, 0) > 0			AND
						@PS_ID > 0									AND
						ISNULL(U_SPR_CONFIRM.PS_ID, 0) <> @PS_ID
				THEN	'*'
				ELSE	NULL
			END	AS	PRIZ_DR_PS,
			U_SPR_CONFIRM.N_GTD, 
			U_SPR_CONFIRM.KODD, 
			U_SPR_CONFIRM.DIRECTION, 
			U_SPR_CONFIRM.D_DOC, 
			U_SPR_CONFIRM.VALK,		
			U_SPR_CONFIRM.SUMK, 
			( SELECT SUM(SUMK) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_SPR_CONFIRM.RESIDENT_ID AND R.PD_ID = U_SPR_CONFIRM.PD_ID) AS SUM_RASPR,
			( SELECT SUM(SUMK) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_SPR_CONFIRM.RESIDENT_ID AND R.PD_ID = U_SPR_CONFIRM.PD_ID AND R.OPL_ID = @OPL_ID) AS SUM_RASPR_THIS_OPLATA,
			( SELECT MAX(D_KOR) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_SPR_CONFIRM.RESIDENT_ID AND R.PD_ID = U_SPR_CONFIRM.PD_ID AND R.OPL_ID = @OPL_ID) AS D_RASPR_THIS_OPLATA,
			U_SPR_CONFIRM.SPR_ID, 
			U_SPR_CONFIRM.NPP, 
			U_SPR_CONFIRM.D_PRED, 
			U_SPR_CONFIRM.D_PRED_BANK 
	FROM	U_SPR_CONFIRM (NOLOCK)
	LEFT	OUTER JOIN	U_PS	(NOLOCK) ON
			U_PS.RESIDENT_ID		= U_SPR_CONFIRM.RESIDENT_ID			AND
			U_PS.PS_ID				= U_SPR_CONFIRM.PS_ID				AND
			U_PS.DEL_FLAG			IS NULL
	LEFT	OUTER JOIN	U_DOGOVOR AS DOG_PS (NOLOCK) ON
			DOG_PS.RESIDENT_ID		= U_PS.RESIDENT_ID					AND
			DOG_PS.DOG_ID			= U_PS.DOG_ID						AND
			DOG_PS.DOG_NPP			= U_PS.DOG_NPP						AND
			DOG_PS.DEL_FLAG			IS NULL
	WHERE 	U_SPR_CONFIRM.RESIDENT_ID					= @RESIDENT_ID	AND
			ISNULL(U_SPR_CONFIRM.DOG_ID, DOG_PS.DOG_ID)	= @DOG_ID		AND
			U_SPR_CONFIRM.VALK							= @VALK			AND
			U_SPR_CONFIRM.PR_NOT_CALC					IS NULL			AND
			U_SPR_CONFIRM.DEL_FLAG						IS NULL			AND
			U_SPR_CONFIRM.SUMK - ( SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_SPR_CONFIRM.RESIDENT_ID AND R.PD_ID = U_SPR_CONFIRM.PD_ID) > 0 AND
			(
				U_SPR_CONFIRM.KODD >= '01' AND U_SPR_CONFIRM.KODD <= '02' AND U_SPR_CONFIRM.DIRECTION = '2' 
				OR 
				U_SPR_CONFIRM.KODD = '03'
			)
	ORDER	BY U_SPR_CONFIRM.D_DOC

	ELSE IF @FLAG_SELECT = 2
	--
	--	Выбираем ПД Импорт товаров
	--
	SELECT	U_SPR_CONFIRM.RESIDENT_ID, U_SPR_CONFIRM.PD_ID, U_SPR_CONFIRM.PS_ID, 
			ISNULL(U_SPR_CONFIRM.DOG_ID, DOG_PS.DOG_ID)			AS PD_DOG_ID,
			@MARK AS MARK,
			U_SPR_CONFIRM.SUMK - 
			( SELECT  ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_SPR_CONFIRM.RESIDENT_ID AND R.PD_ID = U_SPR_CONFIRM.PD_ID) AS SUM_OST,
			U_PS.N_PS, 
			CASE
				WHEN	ISNULL(U_SPR_CONFIRM.PS_ID, 0) > 0			AND
						@PS_ID > 0									AND
						ISNULL(U_SPR_CONFIRM.PS_ID, 0) <> @PS_ID
				THEN	'*'
				ELSE	NULL
			END	AS	PRIZ_DR_PS,
			U_SPR_CONFIRM.N_GTD, 
			U_SPR_CONFIRM.KODD, 
			U_SPR_CONFIRM.DIRECTION, 
			U_SPR_CONFIRM.D_DOC, 
			U_SPR_CONFIRM.VALK,		
			U_SPR_CONFIRM.SUMK, 
			( SELECT SUM(SUMK) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_SPR_CONFIRM.RESIDENT_ID AND R.PD_ID = U_SPR_CONFIRM.PD_ID) AS SUM_RASPR,
			( SELECT SUM(SUMK) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_SPR_CONFIRM.RESIDENT_ID AND R.PD_ID = U_SPR_CONFIRM.PD_ID AND R.OPL_ID = @OPL_ID) AS SUM_RASPR_THIS_OPLATA,
			( SELECT MAX(D_KOR) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_SPR_CONFIRM.RESIDENT_ID AND R.PD_ID = U_SPR_CONFIRM.PD_ID AND R.OPL_ID = @OPL_ID) AS D_RASPR_THIS_OPLATA,
			U_SPR_CONFIRM.SPR_ID, 
			U_SPR_CONFIRM.NPP, 
			U_SPR_CONFIRM.D_PRED, 
			U_SPR_CONFIRM.D_PRED_BANK 
	FROM	U_SPR_CONFIRM (NOLOCK)
	LEFT	OUTER JOIN	U_PS	(NOLOCK) ON
			U_PS.RESIDENT_ID		= U_SPR_CONFIRM.RESIDENT_ID			AND
			U_PS.PS_ID				= U_SPR_CONFIRM.PS_ID				AND
			U_PS.DEL_FLAG			IS NULL
	LEFT	OUTER JOIN	U_DOGOVOR AS DOG_PS (NOLOCK) ON
			DOG_PS.RESIDENT_ID		= U_PS.RESIDENT_ID					AND
			DOG_PS.DOG_ID			= U_PS.DOG_ID						AND
			DOG_PS.DOG_NPP			= U_PS.DOG_NPP						AND
			DOG_PS.DEL_FLAG			IS NULL
	WHERE 	U_SPR_CONFIRM.RESIDENT_ID					= @RESIDENT_ID	AND
			ISNULL(U_SPR_CONFIRM.DOG_ID, DOG_PS.DOG_ID)	= @DOG_ID		AND
			U_SPR_CONFIRM.VALK							= @VALK			AND
			U_SPR_CONFIRM.PR_NOT_CALC					IS NULL			AND
			U_SPR_CONFIRM.DEL_FLAG						IS NULL			AND
			U_SPR_CONFIRM.SUMK - ( SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_SPR_CONFIRM.RESIDENT_ID AND R.PD_ID = U_SPR_CONFIRM.PD_ID) > 0 AND
			U_SPR_CONFIRM.KODD >= '01' AND U_SPR_CONFIRM.KODD <= '02' AND U_SPR_CONFIRM.DIRECTION = '1'
	ORDER	BY U_SPR_CONFIRM.D_DOC

	ELSE IF @FLAG_SELECT = 3
	--
	--	Выбираем ПД Экспорт услуг
	--
	SELECT	U_SPR_CONFIRM.RESIDENT_ID, U_SPR_CONFIRM.PD_ID, U_SPR_CONFIRM.PS_ID,
			ISNULL(U_SPR_CONFIRM.DOG_ID, DOG_PS.DOG_ID)			AS PD_DOG_ID,
			@MARK AS MARK,
			U_SPR_CONFIRM.SUMK - 
			( SELECT  ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_SPR_CONFIRM.RESIDENT_ID AND R.PD_ID = U_SPR_CONFIRM.PD_ID) AS SUM_OST,
			U_PS.N_PS, 
			CASE
				WHEN	ISNULL(U_SPR_CONFIRM.PS_ID, 0) > 0			AND
						@PS_ID > 0									AND
						ISNULL(U_SPR_CONFIRM.PS_ID, 0) <> @PS_ID
				THEN	'*'
				ELSE	NULL
			END	AS	PRIZ_DR_PS,
			U_SPR_CONFIRM.N_GTD, 
			U_SPR_CONFIRM.KODD, 
			U_SPR_CONFIRM.DIRECTION, 
			U_SPR_CONFIRM.D_DOC, 
			U_SPR_CONFIRM.VALK,		
			U_SPR_CONFIRM.SUMK, 
			( SELECT SUM(SUMK) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_SPR_CONFIRM.RESIDENT_ID AND R.PD_ID = U_SPR_CONFIRM.PD_ID) AS SUM_RASPR,
			( SELECT SUM(SUMK) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_SPR_CONFIRM.RESIDENT_ID AND R.PD_ID = U_SPR_CONFIRM.PD_ID AND R.OPL_ID = @OPL_ID) AS SUM_RASPR_THIS_OPLATA,
			( SELECT MAX(D_KOR) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_SPR_CONFIRM.RESIDENT_ID AND R.PD_ID = U_SPR_CONFIRM.PD_ID AND R.OPL_ID = @OPL_ID) AS D_RASPR_THIS_OPLATA,
			U_SPR_CONFIRM.SPR_ID, 
			U_SPR_CONFIRM.NPP, 
			U_SPR_CONFIRM.D_PRED, 
			U_SPR_CONFIRM.D_PRED_BANK 
	FROM	U_SPR_CONFIRM (NOLOCK)
	LEFT	OUTER JOIN	U_PS	(NOLOCK) ON
			U_PS.RESIDENT_ID		= U_SPR_CONFIRM.RESIDENT_ID			AND
			U_PS.PS_ID				= U_SPR_CONFIRM.PS_ID				AND
			U_PS.DEL_FLAG			IS NULL
	LEFT	OUTER JOIN	U_DOGOVOR AS DOG_PS (NOLOCK) ON
			DOG_PS.RESIDENT_ID		= U_PS.RESIDENT_ID					AND
			DOG_PS.DOG_ID			= U_PS.DOG_ID						AND
			DOG_PS.DOG_NPP			= U_PS.DOG_NPP						AND
			DOG_PS.DEL_FLAG			IS NULL
	WHERE 	U_SPR_CONFIRM.RESIDENT_ID					= @RESIDENT_ID	AND
			ISNULL(U_SPR_CONFIRM.DOG_ID, DOG_PS.DOG_ID)	= @DOG_ID		AND
			U_SPR_CONFIRM.VALK							= @VALK			AND
			U_SPR_CONFIRM.PR_NOT_CALC					IS NULL			AND
			U_SPR_CONFIRM.DEL_FLAG						IS NULL			AND
			U_SPR_CONFIRM.SUMK - ( SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_SPR_CONFIRM.RESIDENT_ID AND R.PD_ID = U_SPR_CONFIRM.PD_ID) > 0 AND
			(
			U_SPR_CONFIRM.KODD = '04' AND U_SPR_CONFIRM.DIRECTION = '2' 
			OR 
			U_SPR_CONFIRM.KODD = '05'
			)
	ORDER	BY U_SPR_CONFIRM.D_DOC

	ELSE IF @FLAG_SELECT = 4
	--
	--	Выбираем ПД Импорт услуг
	--
	SELECT	U_SPR_CONFIRM.RESIDENT_ID, U_SPR_CONFIRM.PD_ID,  U_SPR_CONFIRM.PS_ID,
			ISNULL(U_SPR_CONFIRM.DOG_ID, DOG_PS.DOG_ID)			AS PD_DOG_ID,
			@MARK AS MARK,
			U_SPR_CONFIRM.SUMK - 
			( SELECT  ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_SPR_CONFIRM.RESIDENT_ID AND R.PD_ID = U_SPR_CONFIRM.PD_ID) AS SUM_OST,
			U_PS.N_PS, 
			CASE
				WHEN	ISNULL(U_SPR_CONFIRM.PS_ID, 0) > 0			AND
						@PS_ID > 0									AND
						ISNULL(U_SPR_CONFIRM.PS_ID, 0) <> @PS_ID
				THEN	'*'
				ELSE	NULL
			END	AS	PRIZ_DR_PS,
			U_SPR_CONFIRM.N_GTD, 
			U_SPR_CONFIRM.KODD, 
			U_SPR_CONFIRM.DIRECTION, 
			U_SPR_CONFIRM.D_DOC, 
			U_SPR_CONFIRM.VALK,		
			U_SPR_CONFIRM.SUMK, 
			( SELECT SUM(SUMK) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_SPR_CONFIRM.RESIDENT_ID AND R.PD_ID = U_SPR_CONFIRM.PD_ID) AS SUM_RASPR,
			( SELECT SUM(SUMK) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_SPR_CONFIRM.RESIDENT_ID AND R.PD_ID = U_SPR_CONFIRM.PD_ID AND R.OPL_ID = @OPL_ID) AS SUM_RASPR_THIS_OPLATA,
			( SELECT MAX(D_KOR) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_SPR_CONFIRM.RESIDENT_ID AND R.PD_ID = U_SPR_CONFIRM.PD_ID AND R.OPL_ID = @OPL_ID) AS D_RASPR_THIS_OPLATA,
			U_SPR_CONFIRM.SPR_ID, 
			U_SPR_CONFIRM.NPP, 
			U_SPR_CONFIRM.D_PRED, 
			U_SPR_CONFIRM.D_PRED_BANK 
	FROM	U_SPR_CONFIRM (NOLOCK)
	LEFT	OUTER JOIN	U_PS	(NOLOCK) ON
			U_PS.RESIDENT_ID		= U_SPR_CONFIRM.RESIDENT_ID			AND
			U_PS.PS_ID				= U_SPR_CONFIRM.PS_ID				AND
			U_PS.DEL_FLAG			IS NULL
	LEFT	OUTER JOIN	U_DOGOVOR AS DOG_PS (NOLOCK) ON
			DOG_PS.RESIDENT_ID		= U_PS.RESIDENT_ID					AND
			DOG_PS.DOG_ID			= U_PS.DOG_ID						AND
			DOG_PS.DOG_NPP			= U_PS.DOG_NPP						AND
			DOG_PS.DEL_FLAG			IS NULL
	WHERE 	U_SPR_CONFIRM.RESIDENT_ID					= @RESIDENT_ID	AND
			ISNULL(U_SPR_CONFIRM.DOG_ID, DOG_PS.DOG_ID)	= @DOG_ID		AND
			U_SPR_CONFIRM.VALK							= @VALK			AND
			U_SPR_CONFIRM.PR_NOT_CALC					IS NULL			AND
			U_SPR_CONFIRM.DEL_FLAG						IS NULL			AND
			U_SPR_CONFIRM.SUMK - ( SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_SPR_CONFIRM.RESIDENT_ID AND R.PD_ID = U_SPR_CONFIRM.PD_ID) > 0 AND
			U_SPR_CONFIRM.KODD = '04' AND U_SPR_CONFIRM.DIRECTION = '1'
	ORDER	BY U_SPR_CONFIRM.D_DOC

	ELSE IF @FLAG_SELECT = 0 OR 1 = 1
	--
	--	Выбираем все ПД по Договору с ненулевым остатком
	--
	SELECT	U_SPR_CONFIRM.RESIDENT_ID, U_SPR_CONFIRM.PD_ID, U_SPR_CONFIRM.PS_ID, 
			ISNULL(U_SPR_CONFIRM.DOG_ID, DOG_PS.DOG_ID)			AS PD_DOG_ID,
			@MARK AS MARK,
			U_SPR_CONFIRM.SUMK - 
			( SELECT  ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_SPR_CONFIRM.RESIDENT_ID AND R.PD_ID = U_SPR_CONFIRM.PD_ID) AS SUM_OST,
			U_PS.N_PS, 
			CASE
				WHEN	ISNULL(U_SPR_CONFIRM.PS_ID, 0) > 0			AND
						@PS_ID > 0									AND
						ISNULL(U_SPR_CONFIRM.PS_ID, 0) <> @PS_ID
				THEN	'*'
				ELSE	NULL
			END	AS	PRIZ_DR_PS,
			U_SPR_CONFIRM.N_GTD, 
			U_SPR_CONFIRM.KODD, 
			U_SPR_CONFIRM.DIRECTION, 
			U_SPR_CONFIRM.D_DOC, 
			U_SPR_CONFIRM.VALK,		
			U_SPR_CONFIRM.SUMK, 
			( SELECT SUM(SUMK) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_SPR_CONFIRM.RESIDENT_ID AND R.PD_ID = U_SPR_CONFIRM.PD_ID) AS SUM_RASPR,
			( SELECT SUM(SUMK) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_SPR_CONFIRM.RESIDENT_ID AND R.PD_ID = U_SPR_CONFIRM.PD_ID AND R.OPL_ID = @OPL_ID) AS SUM_RASPR_THIS_OPLATA,
			( SELECT MAX(D_KOR) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_SPR_CONFIRM.RESIDENT_ID AND R.PD_ID = U_SPR_CONFIRM.PD_ID AND R.OPL_ID = @OPL_ID) AS D_RASPR_THIS_OPLATA,
			U_SPR_CONFIRM.SPR_ID, 
			U_SPR_CONFIRM.NPP, 
			U_SPR_CONFIRM.D_PRED, 
			U_SPR_CONFIRM.D_PRED_BANK 
	FROM	U_SPR_CONFIRM (NOLOCK)
	LEFT	OUTER JOIN	U_PS	(NOLOCK) ON
			U_PS.RESIDENT_ID		= U_SPR_CONFIRM.RESIDENT_ID			AND
			U_PS.PS_ID				= U_SPR_CONFIRM.PS_ID				AND
			U_PS.DEL_FLAG			IS NULL
	LEFT	OUTER JOIN	U_DOGOVOR AS DOG_PS (NOLOCK) ON
			DOG_PS.RESIDENT_ID		= U_PS.RESIDENT_ID					AND
			DOG_PS.DOG_ID			= U_PS.DOG_ID						AND
			DOG_PS.DOG_NPP			= U_PS.DOG_NPP						AND
			DOG_PS.DEL_FLAG			IS NULL
	WHERE 	U_SPR_CONFIRM.RESIDENT_ID					= @RESIDENT_ID	AND
			ISNULL(U_SPR_CONFIRM.DOG_ID, DOG_PS.DOG_ID)	= @DOG_ID		AND
			U_SPR_CONFIRM.VALK							= @VALK			AND
			U_SPR_CONFIRM.PR_NOT_CALC					IS NULL			AND
			U_SPR_CONFIRM.DEL_FLAG						IS NULL			AND
			U_SPR_CONFIRM.SUMK - ( SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_SPR_CONFIRM.RESIDENT_ID AND R.PD_ID = U_SPR_CONFIRM.PD_ID) > 0
	ORDER	BY U_SPR_CONFIRM.D_DOC
GO

GRANT  EXECUTE  ON [dbo].[U_SPR_CONFIRM_SELECT_NOTRASPRED]  TO [OPERS], [AUDITS]
GO

--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[U_SPR_CONFIRM_LOAD]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[U_SPR_CONFIRM_LOAD]
GO

CREATE PROCEDURE [dbo].[U_SPR_CONFIRM_LOAD]
--	---------------------------------------------------------------------------------------------------------------------
--	Приём подтверждающего документа из файла обмена с АСВКБ
--	---------------------------------------------------------------------------------------------------------------------
--	Возвращает @RC:	 				
--	 1.RC =	0	- нормальное завершение		
--			2	- ПС не найден						
--			10	- ошибка при приёме ПД
--			20 	- ошибка при вычислении идентификатора ПД
--			30	- отсутствует сумма в валюте цены контракта 
--			40	- код валюты документа отсутствует в справочнике
--			41	- код валюты цены контракта отсутствует в справочнике
--			47	- код валюты цены контракта не соответствует коду валюты, указанному в Паспорте сделки, и не найден среди кодов валют в предыдущих условиях контракта
--			60	- код вида документа отсутствует в справочнике
--			65	- код вида подтверждающего документа не входит в перечень кодов действующих на дату заполнения справки
--			80	- ошибка при добавлении уполномоченного лица Участника ВЭД
--			90	- ошибка при добавлении уполномоченного лица Банка
--			99	- Сумма в валюте цены контракта не может быть меньше распределённой суммы (приём-обновление)
--			100	- ошибка регистрации события
--			130	- дублирование порядковых номеров справки и записи в справке
--			201	- ПД распределён: менять Код валюты цены контракта нельзя (приём-обновление)
--			202	- ПД распределён: менять Код вида документа нельзя (приём-обновление)
--			203	- ПД распределён: менять Детализацию кода вида документа нельзя (приём-обновление)
--			204	- ПД распределён: нельзя поставить признак ''Не учитывать в расчёте сальдо, оборотов и не показывать в ВБК'' (приём-обновление)
--			205	- ПД распределён: менять Договор (контракт) нельзя (приём-обновление)
--
--	2.FLAG_LOAD = 	1 - приём-добавление,
--					2 - приём-обновление
--	---------------------------------------------------------------------------------------------------------------------
--	(Модификация	в версии 2.1.0)
--	---------------------------------------------------------------------------------------------------------------------
(
	@RESIDENT_ID	AS INTEGER,
	@BANK_ID		AS INTEGER,
	@PS__N_PS		AS CHAR(22),
	@PS__UNI_ID		AS UNIQUEIDENTIFIER,	
	@SPR_ID			AS INTEGER,
	@NPP			AS INTEGER,
	@KODD			AS CHAR(2),
	@DIRECTION		AS CHAR(1),
	@D_PRED			AS SMALLDATETIME,
	@D_PRED_BANK	AS SMALLDATETIME,
	@D_DOC			AS SMALLDATETIME,
	@N_GTD			AS VARCHAR(100),
	@SUMP			AS DECIMAL(16,2),
	@VALP			AS CHAR(3),
	@VALK			AS CHAR(3),
	@SUMK			AS DECIMAL(16,2),
	@KOR			AS CHAR(1),
	@KKURS			AS DECIMAL(16,8),
	@TYPE			AS CHAR(1),
	@PRIM			AS VARCHAR (500),
	@FIO_UPOLNOMR1	AS VARCHAR(100),
	@DOL_UPOLNOMR1	AS VARCHAR(100),
	@FIO_UPOLNOMR2	AS VARCHAR(100),
	@DOL_UPOLNOMR2	AS VARCHAR(100),
	@FIO_UPOLNOMB	AS VARCHAR(100),
	@DOL_UPOLNOMB	AS VARCHAR(100),
	@KONTR_SROK		AS CHAR(4) 			= NULL,
	@PR_NOT_CALC	AS CHAR(1) 			= NULL,
	@TYPE_DR_PS		AS CHAR(1) 			= NULL,
	@USER_ID		AS VARCHAR(30),
	@UNI_ID			AS UNIQUEIDENTIFIER,
	@FLAG_LOAD		AS INTEGER OUTPUT,
	@RC 			AS INTEGER OUTPUT
)
AS
	SET NOCOUNT ON

	--
	-- 	Объявляем переменные
	--
	DECLARE	@RC1		AS INTEGER,
			@PD_ID_OLD	AS INTEGER,
			@PS_ID_OLD	AS INTEGER,
			@SPR_ID_OLD	AS INTEGER,
			@NPP_OLD	AS INTEGER,
			@D_TODAY	AS SMALLDATETIME
			
	--
	--	Начальные значения
	--
	SELECT	@FLAG_LOAD	= 1
	SELECT	@D_TODAY	= CONVERT(SMALLDATETIME,GETDATE())
	SELECT	@RC1 		= 0
	SELECT	@PD_ID_OLD	= NULL
	SELECT	@PS_ID_OLD	= NULL
	SELECT	@SPR_ID_OLD	= NULL
	SELECT	@NPP_OLD	= NULL

	--	Если дата представления справки в банк пустая, заполняем её из даты справки
	IF	@D_PRED_BANK	IS NULL
		SELECT	@D_PRED_BANK	= @D_PRED
		
	--
	--	1. Поиск ПС по UNI_ID
	--
	SELECT	@PS_ID_OLD	= PS_ID
	FROM	U_PS (NOLOCK)
	WHERE	UNI_ID		= @PS__UNI_ID	AND
			DEL_FLAG	IS NULL 
			
	IF @PS_ID_OLD IS NULL 
	-- ПС НЕ найден по UNI_ID 
	BEGIN
		--
		--	2. Поиск ПС по Номеру ПС
		--
		SELECT	@PS_ID_OLD	= PS_ID
		FROM	U_PS (NOLOCK)
		WHERE	RESIDENT_ID	= @RESIDENT_ID	AND
				BANK_ID		= @BANK_ID		AND
				N_PS		= @PS__N_PS		AND
				DEL_FLAG	IS NULL 
	
		IF @PS_ID_OLD IS NULL 
		-- ПС НЕ найден по Номеру ПС -> завершаем приём 
		BEGIN
			SELECT	@RC = 2
			GOTO	EXIT_SPR_CONFIRM_LOAD
		END
	END	

	--
	--	3. Поиск ПД по UNI_ID
	--
	SELECT	@PD_ID_OLD	= PD_ID,
			@SPR_ID_OLD	= SPR_ID,
			@NPP_OLD	= NPP
	FROM	U_SPR_CONFIRM (NOLOCK)
	WHERE	UNI_ID		= @UNI_ID	AND
			DEL_FLAG	IS NULL 
	IF	@PD_ID_OLD IS NOT NULL
	-- ПД найден по UNI_ID -> приём-обновление
		SELECT	@FLAG_LOAD = 2
	ELSE
	BEGIN
		--
		--	4. Поиск ПД по ключевым реквизитам 
		--
		SELECT	@PD_ID_OLD	= PD_ID,
				@SPR_ID_OLD	= SPR_ID,
				@NPP_OLD	= NPP
		FROM	U_SPR_CONFIRM	(NOLOCK)
		WHERE	RESIDENT_ID				= @RESIDENT_ID												AND
				PS_ID					= @PS_ID_OLD												AND
				D_PRED					= @D_PRED													AND
				D_DOC					= @D_DOC													AND
				KODD					= @KODD														AND
				UPPER(LTRIM(RTRIM(ISNULL(N_GTD, ''))))	= UPPER(LTRIM(RTRIM(ISNULL(@N_GTD, ''))))	AND
				SUMP					= @SUMP														AND
				VALP					= @VALP														AND
				SUMK					= @SUMK														AND
				VALK					= @VALK														AND
				ISNULL(TYPE, '')		= ISNULL(@TYPE, '')											AND
				ISNULL(DIRECTION, '')	= ISNULL(@DIRECTION, '')									AND
				ISNULL(KOR, '')			= ISNULL(@KOR, '')											AND
				DEL_FLAG				IS NULL 													AND
				UNI_ID					IS NULL
		IF	@PD_ID_OLD IS NOT NULL
		-- ПД найден по ключевым реквизитам -> приём-обновление
			SELECT	@FLAG_LOAD = 2
	END

	IF	@FLAG_LOAD = 2 
	-- приём-обновление
	BEGIN
		EXECUTE U_SPR_CONFIRM_UPDATE
				@RESIDENT_ID		= @RESIDENT_ID,
				@PD_ID				= @PD_ID_OLD,
				@PS_ID				= @PS_ID_OLD,
				@SPR_ID				= @SPR_ID_OLD,
				@NPP				= @NPP_OLD,
				@BANK_ID			= @BANK_ID, 
				@KODD				= @KODD,
				@DIRECTION			= @DIRECTION,
				@D_PRED				= @D_PRED,
				@D_PRED_BANK		= @D_PRED_BANK,
				@D_DOC				= @D_DOC,
				@N_GTD				= @N_GTD,
				@SUMP				= @SUMP,
				@VALP				= @VALP,
				@VALK				= @VALK, 
				@SUMK				= @SUMK,
				@KOR				= @KOR, 
				@KKURS				= @KKURS,
				@USER_ID			= 'SYSTEM',
				@TYPE				= @TYPE,
				@PRIM				= @PRIM,
				@SPR_ID_BANK		= @SPR_ID,
				@NPP_BANK			= @NPP,
				@FLAG_READY_TO_BANK	= NULL,
				@FIO_UPOLNOMR1		= @FIO_UPOLNOMR1,
				@DOL_UPOLNOMR1		= @DOL_UPOLNOMR1,
				@FIO_UPOLNOMR2		= @FIO_UPOLNOMR2,
				@DOL_UPOLNOMR2		= @DOL_UPOLNOMR2,
				@FIO_UPOLNOMB		= @FIO_UPOLNOMB,
				@DOL_UPOLNOMB		= @DOL_UPOLNOMB,
				@UNI_ID				= @UNI_ID,
				@D_LOAD				= @D_TODAY,
				@SRC_LOAD			= 'АСВКБ',
				@KONTR_SROK			= @KONTR_SROK,
				@PR_NOT_CALC		= @PR_NOT_CALC,
				@TYPE_DR_PS			= @TYPE_DR_PS,
				@RC					= @RC1 OUTPUT 

			IF	@RC1 > 0					
				BEGIN
					SELECT	@RC = @RC1
					GOTO	EXIT_SPR_CONFIRM_LOAD
				END	
	END

	IF	@FLAG_LOAD = 1 
	-- приём-добавление
	BEGIN
		--	----------------------------------------------
		--	Поиск справки, в которую будем добавлять ПД	
		--	----------------------------------------------
		SELECT	@SPR_ID_OLD	= SPR_ID
		FROM	U_SPR_CONFIRM	(NOLOCK)
		WHERE	RESIDENT_ID			= @RESIDENT_ID									AND
				PS_ID				= @PS_ID_OLD									AND
				SPR_ID_BANK			= @SPR_ID										AND
				D_PRED				= @D_PRED										AND
				ISNULL(D_PRED_BANK, CONVERT( SMALLDATETIME, '19370101')) = ISNULL(@D_PRED_BANK, CONVERT( SMALLDATETIME, '19370101'))	AND
				DEL_FLAG			IS NULL
		IF	@SPR_ID_OLD IS NULL
		-- Справка не найдена, будем формировать новую справку
		BEGIN
			SELECT	@SPR_ID_OLD	= MAX(SPR_ID) + 1 
			FROM	U_SPR_CONFIRM (NOLOCK)
			WHERE	RESIDENT_ID	=  @RESIDENT_ID	AND
					PS_ID 		=  @PS_ID_OLD	AND
					DEL_FLAG	IS NULL				

			SELECT 	@SPR_ID_OLD	=  ISNULL(@SPR_ID_OLD, 1)
		END

		--	----------------------------------------------
		--	Вычисляем номер строки справки
		--	----------------------------------------------
		SELECT	@NPP_OLD	= MAX( NPP ) + 1 
		FROM	U_SPR_CONFIRM (NOLOCK)
		WHERE	RESIDENT_ID	=  @RESIDENT_ID	AND
				PS_ID		=  @PS_ID_OLD	AND
				SPR_ID		=  @SPR_ID_OLD 	AND
				DEL_FLAG	IS NULL				

		SELECT 	@NPP_OLD	=  ISNULL(@NPP_OLD, 1)


		EXECUTE U_SPR_CONFIRM_INSERT
				@RESIDENT_ID		= @RESIDENT_ID,
				@PS_ID				= @PS_ID_OLD,
				@SPR_ID				= @SPR_ID_OLD,
				@NPP				= @NPP_OLD,
				@BANK_ID			= @BANK_ID,
				@KODD				= @KODD,
				@DIRECTION			= @DIRECTION,
				@D_PRED				= @D_PRED,
				@D_PRED_BANK		= @D_PRED_BANK,
				@D_DOC				= @D_DOC,
				@N_GTD				= @N_GTD,
				@SUMP				= @SUMP, 
				@VALP				= @VALP,
				@VALK				= @VALK, 
				@SUMK				= @SUMK,
				@KOR				= @KOR,
				@KKURS				= @KKURS,
				@USER_ID			= 'SYSTEM',
				@TYPE				= @TYPE,
				@PRIM				= @PRIM,
				@SPR_ID_BANK		= @SPR_ID,
				@NPP_BANK			= @NPP,
				@FLAG_READY_TO_BANK	= NULL,
				@FIO_UPOLNOMR1		= @FIO_UPOLNOMR1,
				@DOL_UPOLNOMR1		= @DOL_UPOLNOMR1,
				@FIO_UPOLNOMR2		= @FIO_UPOLNOMR2,
				@DOL_UPOLNOMR2		= @DOL_UPOLNOMR2,
				@FIO_UPOLNOMB		= @FIO_UPOLNOMB,
				@DOL_UPOLNOMB		= @DOL_UPOLNOMB,
				@UNI_ID				= @UNI_ID,
				@D_LOAD				= @D_TODAY,
				@SRC_LOAD			= 'АСВКБ',
				@KONTR_SROK			= @KONTR_SROK,
				@PR_NOT_CALC		= @PR_NOT_CALC,
				@TYPE_DR_PS			= @TYPE_DR_PS,
				@PD_ID				= @PD_ID_OLD OUTPUT,
				@RC					= @RC1 OUTPUT 

			IF	NOT	(@RC1 = 0 AND @PD_ID_OLD > 0)
				BEGIN
					SELECT	@RC = @RC1
					GOTO	EXIT_SPR_CONFIRM_LOAD
				END
	END		

--
--	Возврат кода завершения и признака приёма
--
EXIT_SPR_CONFIRM_LOAD:
	SELECT	RC = @RC, FLAG_LOAD = @FLAG_LOAD
GO

GRANT  EXECUTE  ON [dbo].[U_SPR_CONFIRM_LOAD]  TO [OPERS]
GO

--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[U_SPR_CONFIRM_LOAD_XML_VK_UVED]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[U_SPR_CONFIRM_LOAD_XML_VK_UVED]
GO

CREATE PROCEDURE [dbo].[U_SPR_CONFIRM_LOAD_XML_VK_UVED]
--	---------------------------------------------------------------------------------------------------------------------
--	Загрузка ПД из XML-файла формата ВК УВЭД
--	---------------------------------------------------------------------------------------------------------------------
--	Возвращает @RC:	 				
--	 1.RC =	0	- нормальное завершение		
--			2	- ПС не найден						
--			10	- ошибка при загрузке ПД
--			20 	- ошибка при вычислении идентификатора ПД
--			30	- отсутствует сумма в валюте цены контракта 
--			40	- код валюты документа отсутствует в справочнике
--			41	- код валюты цены контракта отсутствует в справочнике
--			47	- Код валюты цены контракта не соответствует коду валюты, указанному в Паспорте сделки, и не найден среди кодов валют в предыдущих условиях контракта
--			60	- код вида документа отсутствует в справочнике
--			65	- код вида подтверждающего документа не входит в перечень кодов действующих на дату заполнения справки
--			80	- ошибка при добавлении уполномоченного лица Участника ВЭД
--			90	- ошибка при добавлении уполномоченного лица Банка
--			99	- Сумма в валюте цены контракта не может быть меньше распределённой суммы (загрузка-обновление)
--			100	- ошибка регистрации события
--			130	- дублирование порядковых номеров справки и записи в справке
--			201	- ПД распределён: менять Код валюты цены контракта нельзя (загрузка-обновление)
--			202	- ПД распределён: менять Код вида документа нельзя (загрузка-обновление)
--			203	- ПД распределён: менять Детализацию кода вида документа нельзя (загрузка-обновление)
--			204	- ПД распределён: нельзя поставить признак ''Не учитывать в расчёте сальдо, оборотов и не показывать в ВБК'' (загрузка-обновление)
--			205	- ПД распределён: менять Договор (контракт) нельзя (загрузка-обновление)
--
--	2.FLAG_LOAD = 	1 - загрузка-добавление,
--					2 - загрузка-обновление
--	---------------------------------------------------------------------------------------------------------------------
--	(Модификация	в версии 2.1.0)
--	---------------------------------------------------------------------------------------------------------------------
(
	@RESIDENT_ID	AS INTEGER,
	@BANK_ID		AS INTEGER,
	@GID			AS VARCHAR (50),
	@D_DOC			AS SMALLDATETIME,
	@KODD			AS CHAR(2),
	@DIRECTION		AS CHAR(1),
	@N_GTD			AS VARCHAR(100),
	@VALP			AS CHAR(3),
	@SUMP			AS DECIMAL(16,2),
	@VALK			AS CHAR(3),
	@SUMK			AS DECIMAL(16,2),
	@KKURS			AS DECIMAL(16,8),
	@KOR			AS CHAR(1),
	@PR_NOT_CALC	AS CHAR(1),
	@PRIM			AS VARCHAR (500),
	@PS__N_PS		AS CHAR(22),
	@USER_ID		AS VARCHAR(30),
	@FLAG_LOAD		AS INTEGER OUTPUT,
	@RC 			AS INTEGER OUTPUT
)
AS
	SET NOCOUNT ON

	--
	-- 	Объявляем переменные
	--
	DECLARE	@RC1		AS INTEGER,
			@PD_ID_OLD	AS INTEGER,
			@PS_ID_OLD	AS INTEGER,
			@D_TODAY	AS SMALLDATETIME

	--
	--	Переменные для перезаписи полей при загрузке-обновлении
	--
	DECLARE	@SPR_ID				AS INTEGER,
			@NPP				AS INTEGER,
			@D_PRED				AS SMALLDATETIME,
			@D_PRED_BANK		AS SMALLDATETIME,
			@FLAG_READY_TO_BANK	AS CHAR(1),
			@UPOLNOMR_ID1		AS INTEGER,
			@UPOLNOMR_ID2		AS INTEGER,
			@UPOLNOMB_ID		AS INTEGER,
			@FIO_UPOLNOMR1		AS VARCHAR(100),
			@DOL_UPOLNOMR1		AS VARCHAR(100),
			@FIO_UPOLNOMR2		AS VARCHAR(100),
			@DOL_UPOLNOMR2		AS VARCHAR(100),
			@FIO_UPOLNOMB		AS VARCHAR(100),
			@DOL_UPOLNOMB		AS VARCHAR(100),
			@TYPE				AS CHAR(1),
			@KONTR_SROK			AS CHAR(4),
			@TYPE_DR_PS			AS CHAR(1)
			
	--
	--	Начальные значения
	--
	SELECT	@FLAG_LOAD	= 1
	SELECT	@D_TODAY	= CONVERT(SMALLDATETIME,GETDATE())
	SELECT	@RC1 		= 0
	SELECT	@PD_ID_OLD	= NULL
	SELECT	@PS_ID_OLD	= NULL

	--
	--	Поиск ПС по Номеру ПС
	--
	SELECT	@PS_ID_OLD	= PS_ID
	FROM	U_PS (NOLOCK)
	WHERE	RESIDENT_ID	= @RESIDENT_ID	AND
			BANK_ID		= @BANK_ID		AND
			N_PS		= @PS__N_PS		AND
			DEL_FLAG	IS NULL 
	
	IF @PS_ID_OLD IS NULL 
	-- ПС НЕ найден по Номеру ПС -> завершаем загрузку 
	BEGIN
		SELECT	@RC = 2
		GOTO	EXIT_SPR_CONFIRM_LOAD_XML_VK_UVED
	END

	--
	--	Вычисление значения кросскурса, если таковое не передано на вход
	--
	IF	@KKURS IS NULL	AND @SUMP <> 0
		SELECT	@KKURS = @SUMK / @SUMP  

	--
	--	1. Поиск ПД по GID
	--
	SELECT	@PD_ID_OLD			= PD_ID,
			@SPR_ID				= SPR_ID,
			@NPP				= NPP,
			@D_PRED				= D_PRED,
			@D_PRED_BANK		= D_PRED_BANK,
			@FLAG_READY_TO_BANK	= FLAG_READY_TO_BANK,
			@UPOLNOMR_ID1		= UPOLNOMR_ID1,
			@UPOLNOMR_ID2		= UPOLNOMR_ID2,
			@UPOLNOMB_ID		= UPOLNOMB_ID,
			@TYPE				= TYPE,
			@KONTR_SROK			= KONTR_SROK,
			@TYPE_DR_PS			= TYPE_DR_PS
	FROM	U_SPR_CONFIRM (NOLOCK)
	WHERE	GID			= @GID	AND
			DEL_FLAG	IS NULL 
	IF	@PD_ID_OLD IS NOT NULL
	-- ПД найден по GID -> загрузка-обновление
		SELECT	@FLAG_LOAD = 2
	ELSE
	BEGIN
		--
		--	4. Поиск ПД по ключевым реквизитам 
		--
		SELECT	@PD_ID_OLD			= PD_ID,
				@SPR_ID				= SPR_ID,
				@NPP				= NPP,
				@D_PRED				= D_PRED,
				@D_PRED_BANK		= D_PRED_BANK,
				@FLAG_READY_TO_BANK	= FLAG_READY_TO_BANK,
				@UPOLNOMR_ID1		= UPOLNOMR_ID1,
				@UPOLNOMR_ID2		= UPOLNOMR_ID2,
				@UPOLNOMB_ID		= UPOLNOMB_ID,
				@TYPE				= TYPE,
				@KONTR_SROK			= KONTR_SROK,
				@TYPE_DR_PS			= TYPE_DR_PS
		FROM	U_SPR_CONFIRM	(NOLOCK)
		WHERE	RESIDENT_ID				= @RESIDENT_ID												AND
				PS_ID					= @PS_ID_OLD												AND
				D_DOC					= @D_DOC													AND
				KODD					= @KODD														AND
				UPPER(LTRIM(RTRIM(ISNULL(N_GTD, ''))))	= UPPER(LTRIM(RTRIM(ISNULL(@N_GTD, ''))))	AND
				SUMP					= @SUMP														AND
				VALP					= @VALP														AND
				SUMK					= @SUMK														AND
				VALK					= @VALK														AND
				ISNULL(DIRECTION, '')	= ISNULL(@DIRECTION, '')									AND
				ISNULL(KOR, '')			= ISNULL(@KOR, '')											AND
				DEL_FLAG				IS NULL 													AND
				GID						IS NULL
		IF	@PD_ID_OLD IS NOT NULL
		-- ПД найден по ключевым реквизитам -> загрузка-обновление
			SELECT	@FLAG_LOAD = 2
	END

	IF	@FLAG_LOAD = 2 
	-- загрузка-обновление
	BEGIN
		--
		--	Забираем ФИО и должности уполномоченных лиц
		--
		SELECT	@FIO_UPOLNOMR1	= FIO,
				@DOL_UPOLNOMR1	= DOL
		FROM	U_UPOLNOMR (NOLOCK)
		WHERE	RESIDENT_ID		= @RESIDENT_ID	AND
				UPOLNOMR_ID		= @UPOLNOMR_ID1	AND	
				DEL_FLAG		IS NULL
		SELECT	@FIO_UPOLNOMR2	= FIO,
				@DOL_UPOLNOMR2	= DOL
		FROM	U_UPOLNOMR (NOLOCK)
		WHERE	RESIDENT_ID		= @RESIDENT_ID	AND
				UPOLNOMR_ID		= @UPOLNOMR_ID2	AND	
				DEL_FLAG		IS NULL
		SELECT	@FIO_UPOLNOMB	= FIO,
				@DOL_UPOLNOMB	= DOL
		FROM	U_UPOLNOMB (NOLOCK)
		WHERE	BANK_ID		= @BANK_ID		AND
				UPOLNOMB_ID	= @UPOLNOMB_ID	AND	
				DEL_FLAG	IS NULL


		EXECUTE U_SPR_CONFIRM_UPDATE
				@RESIDENT_ID		= @RESIDENT_ID,
				@PD_ID				= @PD_ID_OLD,
				@PS_ID				= @PS_ID_OLD,
					@SPR_ID				= @SPR_ID,
					@NPP				= @NPP,
				@BANK_ID			= @BANK_ID, 
				@KODD				= @KODD,
				@DIRECTION			= @DIRECTION,
					@D_PRED				= @D_PRED,
					@D_PRED_BANK		= @D_PRED_BANK,
				@D_DOC				= @D_DOC,
				@N_GTD				= @N_GTD,
				@SUMP				= @SUMP,
				@VALP				= @VALP,
				@VALK				= @VALK, 
				@SUMK				= @SUMK,
				@KOR				= @KOR, 
				@KKURS				= @KKURS,
				@USER_ID			= 'SYSTEM',
					@TYPE				= @TYPE,
				@PRIM				= @PRIM,
				@SPR_ID_BANK		= NULL,
				@NPP_BANK			= NULL,
					@FLAG_READY_TO_BANK	= @FLAG_READY_TO_BANK,
					@FIO_UPOLNOMR1		= @FIO_UPOLNOMR1,
					@DOL_UPOLNOMR1		= @DOL_UPOLNOMR1,
					@FIO_UPOLNOMR2		= @FIO_UPOLNOMR2,
					@DOL_UPOLNOMR2		= @DOL_UPOLNOMR2,
					@FIO_UPOLNOMB		= @FIO_UPOLNOMB,
					@DOL_UPOLNOMB		= @DOL_UPOLNOMB,
				@UNI_ID				= NULL,
				@GID				= @GID,
				@D_LOAD				= @D_TODAY,
				@SRC_LOAD			= 'Формат ВК УВЭД',
					@KONTR_SROK			= @KONTR_SROK,
				@PR_NOT_CALC		= @PR_NOT_CALC,
					@TYPE_DR_PS			= @TYPE_DR_PS,
				@RC					= @RC1 OUTPUT 

			IF	@RC1 > 0					
				BEGIN
					SELECT	@RC = @RC1
					GOTO	EXIT_SPR_CONFIRM_LOAD_XML_VK_UVED
				END	
	END

	IF	@FLAG_LOAD = 1 
	-- загрузка-добавление
	BEGIN
		EXECUTE U_SPR_CONFIRM_INSERT
				@RESIDENT_ID		= @RESIDENT_ID,
				@PS_ID				= @PS_ID_OLD,
					@SPR_ID				= @SPR_ID,
					@NPP				= @NPP,
				@BANK_ID			= @BANK_ID,
				@KODD				= @KODD,
				@DIRECTION			= @DIRECTION,
					@D_PRED				= @D_PRED,
					@D_PRED_BANK		= @D_PRED_BANK,
				@D_DOC				= @D_DOC,
				@N_GTD				= @N_GTD,
				@SUMP				= @SUMP, 
				@VALP				= @VALP,
				@VALK				= @VALK, 
				@SUMK				= @SUMK,
				@KOR				= @KOR,
				@KKURS				= @KKURS,
				@USER_ID			= 'SYSTEM',
					@TYPE				= @TYPE,
				@PRIM				= @PRIM,
				@SPR_ID_BANK		= NULL,
				@NPP_BANK			= NULL,
					@FLAG_READY_TO_BANK	= NULL,
					@FIO_UPOLNOMR1		= NULL,
					@DOL_UPOLNOMR1		= NULL,
					@FIO_UPOLNOMR2		= NULL,
					@DOL_UPOLNOMR2		= NULL,
					@FIO_UPOLNOMB		= NULL,
					@DOL_UPOLNOMB		= NULL,
				@UNI_ID				= NULL,
				@D_LOAD				= @D_TODAY,
				@SRC_LOAD			= 'Формат ВК УВЭД',
					@KONTR_SROK			= NULL,
				@PR_NOT_CALC		= @PR_NOT_CALC,
					@TYPE_DR_PS			= NULL,
				@PD_ID				= @PD_ID_OLD OUTPUT,
				@RC					= @RC1 OUTPUT 

			IF	NOT	(@RC1 = 0 AND @PD_ID_OLD > 0)
				BEGIN
					SELECT	@RC = @RC1
					GOTO	EXIT_SPR_CONFIRM_LOAD_XML_VK_UVED
				END
	END		

--
--	Возврат кода завершения и признака загрузки
--
EXIT_SPR_CONFIRM_LOAD_XML_VK_UVED:
	SELECT	RC = @RC, FLAG_LOAD = @FLAG_LOAD
GO

GRANT  EXECUTE  ON [dbo].[U_SPR_CONFIRM_LOAD_XML_VK_UVED]  TO [OPERS]
GO

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

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

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

--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[U_EXPORT_TO_ASVKB]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[U_EXPORT_TO_ASVKB]
GO

CREATE  PROCEDURE [dbo].[U_EXPORT_TO_ASVKB]
---------------------------------------------------------------------------------------
-- 	Отбор информации для формирования Xml-файла для передачи в Банк 
---------------------------------------------------------------------------------------
--	(Модификация	в версии 2.1.0)
--	-----------------------------------------------------------------------------------
(
	@BANK_ID						AS INTEGER,
	@RESIDENT_ID					AS INTEGER,
	@FLAG_PS						AS INTEGER,
	@FLAG_SPR_CONFIRM				AS INTEGER,
	@FLAG_SPR_VAL_OPR				AS INTEGER,
	@FLAG_SPR_RUB					AS INTEGER,
	@FLAG_D_PRED_BANK_SPR_CONFIRM	AS INTEGER	= 0,
	@FLAG_D_PRED_BANK_SPR_VAL_OPR	AS INTEGER	= 0,
	@FLAG_D_PRED_BANK_SPR_RUB		AS INTEGER	= 0
)
AS
	SET NOCOUNT ON
	--
	--	Рабочие переменные
	--
	DECLARE	@D_TODAY	AS SMALLDATETIME,
			@SELECT_NO	AS BIT
			
	--
	--	Начальные значения
	--
	SELECT	@D_TODAY	= CONVERT(SMALLDATETIME,GETDATE())
	SELECT	@SELECT_NO	= 0


	IF	@FLAG_PS = 1
		BEGIN
		--	---------------------------------------------------		
		--	1. Отбор информации Проектов Паспортов сделок 
		--	---------------------------------------------------
			--	Проставляем UNI_ID тем документам для передачи, у которых он отсутствует
			UPDATE	U_PS	
			SET		U_PS.UNI_ID = NEWID()
			WHERE	U_PS.BANK_ID		= @BANK_ID		AND
					U_PS.RESIDENT_ID	= @RESIDENT_ID	AND
					U_PS.UNI_ID			IS NULL			AND
					U_PS.PRIZ_PROJECT	IS NOT NULL		AND
					U_PS.D_UNLOAD		IS NULL			AND
					U_PS.DEL_FLAG		IS NULL	

			UPDATE	U_DOGOVOR	
			SET		U_DOGOVOR.UNI_ID = NEWID()
			WHERE	EXISTS	(	SELECT	* 
								FROM	U_PS (NOLOCK)
								WHERE	U_PS.BANK_ID		= @BANK_ID				AND
										U_PS.RESIDENT_ID	= @RESIDENT_ID			AND
										U_PS.PRIZ_PROJECT	IS NOT NULL				AND
										U_PS.D_UNLOAD		IS NULL					AND
										U_PS.DEL_FLAG		IS NULL					AND
										U_PS.RESIDENT_ID	= U_DOGOVOR.RESIDENT_ID	AND
										U_PS.DOG_ID			= U_DOGOVOR.DOG_ID		AND
										U_PS.DOG_NPP		= U_DOGOVOR.DOG_NPP				
							)							AND
					U_DOGOVOR.UNI_ID	IS NULL			AND											
					U_DOGOVOR.DEL_FLAG	IS NULL	

			UPDATE	U_RAZRESH	
			SET		U_RAZRESH.UNI_ID = NEWID()
			WHERE	EXISTS	(	SELECT	* 
								FROM	U_PS (NOLOCK)
								WHERE	U_PS.BANK_ID		= @BANK_ID				AND
										U_PS.RESIDENT_ID	= @RESIDENT_ID			AND
										U_PS.PRIZ_PROJECT	IS NOT NULL				AND
										U_PS.D_UNLOAD		IS NULL					AND
										U_PS.DEL_FLAG		IS NULL					AND
										U_PS.RESIDENT_ID	= U_RAZRESH.RESIDENT_ID	AND
										U_PS.PS_ID			= U_RAZRESH.PS_ID			
							)							AND
					U_RAZRESH.UNI_ID	IS NULL			AND											
					U_RAZRESH.DEL_FLAG	IS NULL	

			UPDATE	U_ZAIM	
			SET		U_ZAIM.UNI_ID = NEWID()
			WHERE	EXISTS	(	SELECT	* 
								FROM	U_PS (NOLOCK)
								WHERE	U_PS.BANK_ID		= @BANK_ID				AND
										U_PS.RESIDENT_ID	= @RESIDENT_ID			AND
										U_PS.PRIZ_PROJECT	IS NOT NULL				AND
										U_PS.D_UNLOAD		IS NULL					AND
										U_PS.DEL_FLAG		IS NULL					AND
										U_PS.RESIDENT_ID	= U_ZAIM.RESIDENT_ID	AND
										U_PS.PS_ID			= U_ZAIM.PS_ID			
							)							AND
					U_ZAIM.UNI_ID		IS NULL			AND											
					U_ZAIM.DEL_FLAG		IS NULL	

			UPDATE	U_TRANSH	
			SET		U_TRANSH.UNI_ID = NEWID()
			WHERE	EXISTS	(	SELECT	* 
								FROM	U_PS (NOLOCK)
								WHERE	U_PS.BANK_ID		= @BANK_ID				AND
										U_PS.RESIDENT_ID	= @RESIDENT_ID			AND
										U_PS.PRIZ_PROJECT	IS NOT NULL				AND
										U_PS.D_UNLOAD		IS NULL					AND
										U_PS.DEL_FLAG		IS NULL					AND
										U_PS.RESIDENT_ID	= U_TRANSH.RESIDENT_ID	AND
										U_PS.PS_ID			= U_TRANSH.PS_ID			
							)							AND
					U_TRANSH.UNI_ID		IS NULL			AND											
					U_TRANSH.DEL_FLAG	IS NULL	

			UPDATE	U_GRAF_PLAT	
			SET		U_GRAF_PLAT.UNI_ID = NEWID()
			WHERE	EXISTS	(	SELECT	* 
								FROM	U_PS (NOLOCK)
								WHERE	U_PS.BANK_ID		= @BANK_ID					AND
										U_PS.RESIDENT_ID	= @RESIDENT_ID				AND
										U_PS.PRIZ_PROJECT	IS NOT NULL					AND
										U_PS.D_UNLOAD		IS NULL						AND
										U_PS.DEL_FLAG		IS NULL						AND
										U_PS.RESIDENT_ID	= U_GRAF_PLAT.RESIDENT_ID	AND
										U_PS.PS_ID			= U_GRAF_PLAT.PS_ID			
							)							AND
					U_GRAF_PLAT.UNI_ID		IS NULL		AND											
					U_GRAF_PLAT.DEL_FLAG	IS NULL	

			UPDATE	U_GRAF_VOZVR	
			SET		U_GRAF_VOZVR.UNI_ID = NEWID()
			WHERE	EXISTS	(	SELECT	* 
								FROM	U_PS (NOLOCK)
								WHERE	U_PS.BANK_ID		= @BANK_ID					AND
										U_PS.RESIDENT_ID	= @RESIDENT_ID				AND
										U_PS.PRIZ_PROJECT	IS NOT NULL					AND
										U_PS.D_UNLOAD		IS NULL						AND
										U_PS.DEL_FLAG		IS NULL						AND
										U_PS.RESIDENT_ID	= U_GRAF_VOZVR.RESIDENT_ID	AND
										U_PS.PS_ID			= U_GRAF_VOZVR.PS_ID			
							)							AND
					U_GRAF_VOZVR.UNI_ID		IS NULL		AND											
					U_GRAF_VOZVR.DEL_FLAG	IS NULL	
	
			--	Возвращаем данные по U_PS
			SELECT	@SELECT_NO	AS SELECT_FLAG,
					--	----------------
					--	Реквизиты из ПС
					--	----------------
					U_PS.PS_ID,
					U_PS.N_PS,
					U_PS.D_PS,
					U_PS.D_CLOSE,
					U_PS.O_CLOSE,
					U_PS.DKOR,
					U_PS.N_PS_OLD,
					U_PS.N_PS_DR,
					U_PS.D_PS_MOD,
					U_PS.N_PS_MOD,
					U_PS.F2_R61_G1,
					U_PS.F2_R61_G2,
					U_PS.F2_R61_G3,
					U_PS.F2_R61_G4,
					U_PS.F2_R62_G1,
					U_PS.F2_R62_G2,
					U_PS.F2_R62_G3_DATE,
					U_PS.F2_R63_USL,
					U_PS.F2_R64_USL,
					U_PS.F2_R65_MFK,
					U_PS.F2_R65_EBRR,
					U_PS.F2_R65_MB,
					U_PS.F2_R65_DMFO,
					U_PS.F2_R65_KRED,
					U_PS.F2_R66_INVEST,
					U_PS.F2_R67_SUM,
					U_PS.F1_R61_USL,
					U_PS.F1_R62_SROK,
					U_PS.F1_R63_D_LIST2,
					U_PS.NAMER,
					U_PS.INN,
					U_PS.KPP,
					U_PS.OGRN,
					U_PS.DGR,
					U_PS.SUB,
					U_PS.REGION,
					U_PS.CITY,
					U_PS.PUNKT,
					U_PS.STREET,
					U_PS.HOUSE,
					U_PS.KORPUS,
					U_PS.OFFICE,
					U_PS.PRIM,
					U_PS.D_PRED,  
					U_PS.D_PRED_PEREOF,

					--	----------------------
					--	Реквизиты из Договора
					--	----------------------
					U_DOGOVOR.VID_KONTR,
					U_DOGOVOR.DESCR_VID_KONTR,
					U_DOGOVOR.N_KONTR,
					U_DOGOVOR.D_KONTR,
					U_DOGOVOR.N_DOPSOGL, 
					U_DOGOVOR.D_DOPSOGL,
					U_DOGOVOR.KVALK,
					VALW.NAMEV			AS VALW__NAMEV,
					U_DOGOVOR.SUMK,
					U_DOGOVOR.D_BEGIN,
					U_DOGOVOR.D_END,
					U_DOGOVOR.R3_G7,
					U_DOGOVOR.F1_R3_G8,
					U_DOGOVOR.F1_R3_G9,
					U_DOGOVOR.F1_R3_G10,
					U_DOGOVOR.F2_R3_G8,
					U_DOGOVOR.F2_R3_G9,
					U_DOGOVOR.F2_R3_G10,
					U_DOGOVOR.VID_USLUG, 
					U_DOGOVOR.KONTR_SROK, 
					U_DOGOVOR.PRIM, 
					U_DOGOVOR.PRIM_PREDMET, 
					U_DOGOVOR.PRIM_FIO_OTV, 
					
					--	Данные об Иностранном контрагенте (из Договора)
					U_IN_PART.NAMEP		AS	IN_PART__NAMEP,
					U_IN_PART.KODS		AS	IN_PART__KODS,
					OKSMT.NAMES			AS	OKSMT__NAMES,
					U_IN_PART.INN		AS	IN_PART__INN,
					U_IN_PART.ADRES		AS	IN_PART__ADRES,
					U_IN_PART.TYPE		AS	IN_PART__TYPE,
					--	Данные о втором Иностранном контрагенте (из Договора)
					U_IN_PART1.NAMEP	AS	IN_PART__NAMEP2,
					U_IN_PART1.KODS		AS	IN_PART__KODS2,
					OKSMT1.NAMES		AS	OKSMT__NAMES2,
					U_IN_PART1.INN		AS	IN_PART__INN2,
					U_IN_PART1.ADRES	AS	IN_PART__ADRES2,
					U_IN_PART1.TYPE		AS	IN_PART__TYPE2,
					--	Данные об Уполномоченном лице от Участника ВЭД с правом 1-ой подписи 
					U_PS.D_UPOLNOMR1,
					U_UPOLNOMR.FIO		AS	UPOLNOMR__FIO_R1,
					U_UPOLNOMR.DOL		AS	UPOLNOMR__DOL_R1,
					U_UPOLNOMR.PRIM		AS	UPOLNOMR__PRIM_R1,
					--	Данные об Уполномоченном лице от Участника ВЭД с правом 2-ой подписи 
					U_PS.D_UPOLNOMR2,
					U_UPOLNOMR1.FIO		AS	UPOLNOMR__FIO_R2,
					U_UPOLNOMR1.DOL		AS	UPOLNOMR__DOL_R2,
					U_UPOLNOMR1.PRIM	AS	UPOLNOMR__PRIM_R2,
					--	Данные об Уполномоченном лице от Банка
					U_PS.D_UPOLNOMB,
					U_UPOLNOMB.FIO		AS	UPOLNOMB__FIO,
					U_UPOLNOMB.DOL		AS	UPOLNOMB__DOL,
					U_UPOLNOMB.N_PECH	AS	UPOLNOMB__N_PECH,
					U_UPOLNOMB.PRIM		AS	UPOLNOMB__PRIM,
					--	Уникальные идентификаторы Паспорта сделки и Договора в ВК УВЭД
					U_PS.UNI_ID,
					U_DOGOVOR.UNI_ID	AS	DOGOVOR__UNI_ID
			FROM	U_PS (NOLOCK)
			INNER	JOIN	U_DOGOVOR (NOLOCK) ON
					U_DOGOVOR.RESIDENT_ID	= U_PS.RESIDENT_ID	AND
					U_DOGOVOR.DOG_ID		= U_PS.DOG_ID		AND
					U_DOGOVOR.DOG_NPP		= U_PS.DOG_NPP		AND
					U_DOGOVOR.DEL_FLAG		IS NULL
			INNER	JOIN	VALW (NOLOCK) ON
					VALW.KOD				= U_DOGOVOR.KVALK
			INNER 	JOIN	U_IN_PART (NOLOCK) ON
					U_IN_PART.PARTNER_ID	= U_DOGOVOR.PARTNER_ID	AND
					U_IN_PART.DEL_FLAG		IS NULL
			INNER	JOIN	OKSMT (NOLOCK) ON
					OKSMT.KOD				= U_IN_PART.KODS	
			LEFT	OUTER JOIN	U_IN_PART AS U_IN_PART1 (NOLOCK) ON
					U_IN_PART1.PARTNER_ID	= U_DOGOVOR.PARTNER_ID	AND
					U_IN_PART1.DEL_FLAG		IS NULL	
			INNER	JOIN	OKSMT AS OKSMT1 (NOLOCK) ON
					OKSMT1.KOD				= U_IN_PART1.KODS	
			LEFT	OUTER JOIN	U_UPOLNOMR (NOLOCK) ON
					U_UPOLNOMR.RESIDENT_ID	= U_PS.RESIDENT_ID	AND	
					U_UPOLNOMR.UPOLNOMR_ID	= U_PS.UPOLNOMR_ID1	AND
					U_UPOLNOMR.DEL_FLAG		IS NULL	
			LEFT	OUTER JOIN	U_UPOLNOMR AS U_UPOLNOMR1 (NOLOCK) ON
					U_UPOLNOMR1.RESIDENT_ID	= U_PS.RESIDENT_ID	AND
					U_UPOLNOMR1.UPOLNOMR_ID	= U_PS.UPOLNOMR_ID2	AND
					U_UPOLNOMR1.DEL_FLAG	IS NULL
			LEFT	OUTER JOIN	U_UPOLNOMB (NOLOCK) ON
					U_UPOLNOMB.BANK_ID		= U_PS.BANK_ID		AND
					U_UPOLNOMB.UPOLNOMB_ID	= U_PS.UPOLNOMB_ID	AND
					U_UPOLNOMB.DEL_FLAG		IS NULL
			WHERE	U_PS.BANK_ID		= @BANK_ID		AND
					U_PS.RESIDENT_ID	= @RESIDENT_ID	AND
					U_PS.PRIZ_PROJECT	IS NOT NULL		AND
					U_PS.D_UNLOAD		IS NULL			AND
					U_PS.DEL_FLAG		IS NULL			
	
			--	Возвращаем данные по U_RAZRESH
			SELECT	--	Номер ПС
					U_PS.N_PS			AS PS__N_PS, 
					U_RAZRESH.PS_ID,
					--	Реквизиты Разрешения
					U_RAZRESH.N_RAZR,
					U_RAZRESH.D_RAZR,
					U_RAZRESH.VALK, 
					U_RAZRESH.SUM_RAZR,
					U_RAZRESH.KODS,
					U_RAZRESH.D_END,
					--	Уникальные идентификаторы Разрешения и ПС в ВК УВЭД
					U_RAZRESH.UNI_ID	AS UNI_ID,  
					U_PS.UNI_ID			AS PS__UNI_ID  				
			FROM	U_RAZRESH (NOLOCK)
			INNER	JOIN	U_PS (NOLOCK) ON	
					U_PS.RESIDENT_ID	= U_RAZRESH.RESIDENT_ID	AND	
					U_PS.PS_ID			= U_RAZRESH.PS_ID		AND	
					U_PS.DEL_FLAG		IS NULL					AND
					U_PS.BANK_ID		= @BANK_ID				AND
					U_PS.RESIDENT_ID	= @RESIDENT_ID			AND
					U_PS.PRIZ_PROJECT	IS NOT NULL				AND
					U_PS.D_UNLOAD		IS NULL	
			WHERE	U_RAZRESH.DEL_FLAG	IS NULL	
			
			--	Возвращаем данные по U_ZAIM
			SELECT	--	Номер ПС
					U_PS.N_PS			AS	PS__N_PS, 
					U_ZAIM.PS_ID,
					--	Реквизиты Займа
					U_ZAIM.ZAIM_ID,
					U_ZAIM.SUMP,
					U_ZAIM.SUM_PROC,
					U_ZAIM.VALK, 
					--	Данные об Иностранном контрагенте
					U_IN_PART.NAMEP		AS	IN_PART__NAMEP,
					U_IN_PART.KODS		AS	IN_PART__KODS,
					U_IN_PART.INN		AS	IN_PART__INN,
					U_IN_PART.ADRES		AS	IN_PART__ADRES,
					U_IN_PART.TYPE		AS	IN_PART__TYPE,
					--	Уникальные идентификаторы Займа и ПС в ВК УВЭД
					U_ZAIM.UNI_ID		AS	UNI_ID,  
					U_PS.UNI_ID			AS	PS__UNI_ID  
			FROM	U_ZAIM (NOLOCK)
			INNER	JOIN	U_PS (NOLOCK) ON	
					U_PS.RESIDENT_ID	= U_ZAIM.RESIDENT_ID	AND	
					U_PS.PS_ID			= U_ZAIM.PS_ID			AND	
					U_PS.DEL_FLAG		IS NULL					AND
					U_PS.BANK_ID		= @BANK_ID				AND
					U_PS.RESIDENT_ID	= @RESIDENT_ID			AND
					U_PS.PRIZ_PROJECT	IS NOT NULL				AND
					U_PS.D_UNLOAD		IS NULL	
			INNER	JOIN	U_IN_PART (NOLOCK) ON
					U_IN_PART.PARTNER_ID	= U_ZAIM.PARTNER_ID	AND
					U_IN_PART.DEL_FLAG		IS NULL	
			WHERE	U_ZAIM.DEL_FLAG		IS NULL	

			--	Возвращаем данные по U_TRANSH
			SELECT	--	Номер ПС
					U_PS.N_PS			AS	PS__N_PS,
					U_TRANSH.PS_ID, 
					--	Реквизиты Транша
					U_TRANSH.SUM_TR,
					U_TRANSH.KODP,
					U_TRANSH.VALK, 
					--	Уникальные идентификаторы Исполнения и ПС в ВК УВЭД
					U_TRANSH.UNI_ID		AS	UNI_ID,  
					U_PS.UNI_ID			AS	PS__UNI_ID  				
			FROM	U_TRANSH (NOLOCK)
			INNER	JOIN	U_PS (NOLOCK) ON	
					U_PS.RESIDENT_ID	= U_TRANSH.RESIDENT_ID	AND	
					U_PS.PS_ID			= U_TRANSH.PS_ID		AND	
					U_PS.DEL_FLAG		IS NULL					AND
					U_PS.BANK_ID		= @BANK_ID				AND
					U_PS.RESIDENT_ID	= @RESIDENT_ID			AND
					U_PS.PRIZ_PROJECT	IS NOT NULL				AND
					U_PS.D_UNLOAD		IS NULL	
			WHERE	U_TRANSH.DEL_FLAG	IS NULL	

			--	Возвращаем данные по U_GRAF_PLAT
			SELECT	--	Номер ПС
					U_PS.N_PS			AS	PS__N_PS, 
					U_GRAF_PLAT.PS_ID, 
					--	Реквизиты Графика платежа
					U_GRAF_PLAT.D_PLAT,
					U_GRAF_PLAT.SUMP,
					U_GRAF_PLAT.VALP, 
					--	Уникальные идентификаторы Графика платежа и ПС в ВК УВЭД
					U_GRAF_PLAT.UNI_ID	AS	UNI_ID,  
					U_PS.UNI_ID			AS	PS__UNI_ID  		
			FROM	U_GRAF_PLAT (NOLOCK)
			INNER	JOIN	U_PS (NOLOCK) ON	
					U_PS.RESIDENT_ID	= U_GRAF_PLAT.RESIDENT_ID	AND	
					U_PS.PS_ID			= U_GRAF_PLAT.PS_ID			AND	
					U_PS.DEL_FLAG		IS NULL						AND
					U_PS.BANK_ID		= @BANK_ID					AND
					U_PS.RESIDENT_ID	= @RESIDENT_ID				AND
					U_PS.PRIZ_PROJECT	IS NOT NULL					AND
					U_PS.D_UNLOAD		IS NULL	
			WHERE	U_GRAF_PLAT.DEL_FLAG	IS NULL	

			--	Возвращаем данные по U_GRAF_VOZVR
			SELECT	--	Номер ПС
					U_PS.N_PS			AS	PS__N_PS, 
					U_GRAF_VOZVR.PS_ID, 
					--	Реквизиты Графика возвратов
					U_GRAF_VOZVR.D_VOZV,
					U_GRAF_VOZVR.SUM_VOZV,
					U_GRAF_VOZVR.D_PROC,
					U_GRAF_VOZVR.SUM_PROC,
					U_GRAF_VOZVR.VALK, 
					--	Уникальные идентификаторы Графиков возвратов и ПС в ВК УВЭД
					U_GRAF_VOZVR.UNI_ID	AS	UNI_ID,  
					U_PS.UNI_ID			AS	PS__UNI_ID  		
			FROM	U_GRAF_VOZVR (NOLOCK)
			INNER	JOIN	U_PS (NOLOCK) ON	
					U_PS.RESIDENT_ID	= U_GRAF_VOZVR.RESIDENT_ID	AND	
					U_PS.PS_ID			= U_GRAF_VOZVR.PS_ID		AND	
					U_PS.DEL_FLAG		IS NULL						AND
					U_PS.BANK_ID		= @BANK_ID					AND
					U_PS.RESIDENT_ID	= @RESIDENT_ID				AND
					U_PS.PRIZ_PROJECT	IS NOT NULL					AND
					U_PS.D_UNLOAD		IS NULL	
			WHERE	U_GRAF_VOZVR.DEL_FLAG	IS NULL	

			--	Проставляем D_UNLOAD в U_DOGOVOR
			UPDATE	U_DOGOVOR	
			SET		U_DOGOVOR.D_UNLOAD = @D_TODAY
			WHERE	EXISTS	(	SELECT	* 
								FROM	U_PS (NOLOCK)
								WHERE	U_PS.BANK_ID		= @BANK_ID				AND
										U_PS.RESIDENT_ID	= @RESIDENT_ID			AND
										U_PS.PRIZ_PROJECT	IS NOT NULL				AND
										U_PS.D_UNLOAD		IS NULL					AND
										U_PS.DEL_FLAG		IS NULL					AND
										U_PS.RESIDENT_ID	= U_DOGOVOR.RESIDENT_ID	AND
										U_PS.DOG_ID			= U_DOGOVOR.DOG_ID		AND
										U_PS.DOG_NPP		= U_DOGOVOR.DOG_NPP				
					)								AND
					U_DOGOVOR.DEL_FLAG	IS NULL	

			--	Проставляем D_UNLOAD в U_PS (должно быть в конце)
			UPDATE	U_PS	
			SET		U_PS.D_UNLOAD 		= @D_TODAY
			WHERE	U_PS.BANK_ID		= @BANK_ID		AND
					U_PS.RESIDENT_ID	= @RESIDENT_ID	AND
					U_PS.PRIZ_PROJECT	IS NOT NULL		AND
					U_PS.D_UNLOAD		IS NULL			AND
					U_PS.DEL_FLAG		IS NULL			
		END
	ELSE	--@FLAG_PS = 1
		BEGIN
			--	Отбор без данных (для верной нумерации таблиц в датасете)
			SELECT	U_PS.PS_ID
			FROM	U_PS (NOLOCK)
			WHERE	1=2
	
			SELECT	U_RAZRESH.PS_ID
			FROM	U_RAZRESH (NOLOCK)
			WHERE	1=2
			
			SELECT	U_ZAIM.PS_ID
			FROM	U_ZAIM (NOLOCK)
			WHERE	1=2
	
			SELECT	U_TRANSH.PS_ID
			FROM	U_TRANSH (NOLOCK)
			WHERE	1=2
	
			SELECT	U_GRAF_PLAT.PS_ID
			FROM	U_GRAF_PLAT (NOLOCK)
			WHERE	1=2
	
			SELECT	U_GRAF_VOZVR.PS_ID
			FROM	U_GRAF_VOZVR (NOLOCK)
			WHERE	1=2
		END		
	


	IF	@FLAG_SPR_CONFIRM = 1
		BEGIN
		--	---------------------------------------------------------		
		--	2. Отбор информации Справок о Подтверждающих документах 
		--	---------------------------------------------------------
			--	Проставляем UNI_ID тем документам для передачи, у которых он отсутствует
			UPDATE	U_SPR_CONFIRM	
			SET		U_SPR_CONFIRM.UNI_ID = NEWID()
			WHERE	U_SPR_CONFIRM.BANK_ID				= @BANK_ID		AND
					U_SPR_CONFIRM.RESIDENT_ID			= @RESIDENT_ID	AND
					U_SPR_CONFIRM.UNI_ID				IS NULL			AND
					U_SPR_CONFIRM.D_PRED_BANK			IS NULL			AND
					U_SPR_CONFIRM.D_UNLOAD				IS NULL			AND
					U_SPR_CONFIRM.FLAG_READY_TO_BANK	IS NOT NULL		AND
					U_SPR_CONFIRM.SPR_ID				IS NOT NULL		AND
					U_SPR_CONFIRM.DEL_FLAG				IS NULL			
	
			--	Возвращаем данные по U_SPR_CONFIRM
			SELECT	@SELECT_NO			AS SELECT_FLAG,
					U_SPR_CONFIRM.PS_ID,		-- для протокола передачи
					U_SPR_CONFIRM.SPR_ID,
					U_SPR_CONFIRM.D_PRED,
					U_SPR_CONFIRM.NPP,
					U_SPR_CONFIRM.KODD,
					U_SPR_CONFIRM.DIRECTION,
					U_SPR_CONFIRM.D_DOC,
					U_SPR_CONFIRM.N_GTD,
					U_SPR_CONFIRM.VALP,
					U_SPR_CONFIRM.SUMP,
					U_SPR_CONFIRM.VALK,
					U_SPR_CONFIRM.SUMK,
					U_SPR_CONFIRM.D_PRED_BANK,
					U_PS.N_PS			AS	PS__N_PS,
					U_SPR_CONFIRM.KOR,			
					U_SPR_CONFIRM.KKURS,			
					U_SPR_CONFIRM.DKOR,
					U_SPR_CONFIRM.TYPE,
					U_SPR_CONFIRM.PRIM,
					U_SPR_CONFIRM.KONTR_SROK,
					U_SPR_CONFIRM.PR_NOT_CALC,
					U_SPR_CONFIRM.TYPE_DR_PS,
					--	Данные об Уполномоченном лице от Участника ВЭД с правом 1-ой подписи 
					U_UPOLNOMR.FIO		AS	UPOLNOMR__FIO_R1,
					U_UPOLNOMR.DOL		AS	UPOLNOMR__DOL_R1,
					U_UPOLNOMR.PRIM		AS	UPOLNOMR__PRIM_R1,
					--	Данные об Уполномоченном лице от Участника ВЭД с правом 2-ой подписи 
					U_UPOLNOMR1.FIO		AS	UPOLNOMR__FIO_R2,
					U_UPOLNOMR1.DOL		AS	UPOLNOMR__DOL_R2,
					U_UPOLNOMR1.PRIM	AS	UPOLNOMR__PRIM_R2,
					--	Данные об Уполномоченном лице от Банка
					U_UPOLNOMB.FIO		AS	UPOLNOMB__FIO,
					U_UPOLNOMB.DOL		AS	UPOLNOMB__DOL,
					U_UPOLNOMB.N_PECH	AS	UPOLNOMB__N_PECH,
					U_UPOLNOMB.PRIM		AS	UPOLNOMB__PRIM,
					--	Уникальные идентификаторы строки из СПД и ПС в ВК УВЭД
					U_SPR_CONFIRM.UNI_ID	AS	UNI_ID,  
					U_PS.UNI_ID				AS	PS__UNI_ID  				
			FROM	U_SPR_CONFIRM (NOLOCK)
			INNER	JOIN	U_PS (NOLOCK) ON	
					U_PS.RESIDENT_ID	= U_SPR_CONFIRM.RESIDENT_ID	AND	
					U_PS.PS_ID			= U_SPR_CONFIRM.PS_ID		AND	
					U_PS.DEL_FLAG		IS NULL
			LEFT	OUTER JOIN	U_UPOLNOMR (NOLOCK) ON
					U_UPOLNOMR.RESIDENT_ID	= U_SPR_CONFIRM.RESIDENT_ID		AND	
					U_UPOLNOMR.UPOLNOMR_ID	= U_SPR_CONFIRM.UPOLNOMR_ID1	AND
					U_UPOLNOMR.DEL_FLAG		IS NULL	
			LEFT	OUTER JOIN	U_UPOLNOMR AS U_UPOLNOMR1 (NOLOCK) ON
					U_UPOLNOMR1.RESIDENT_ID	= U_SPR_CONFIRM.RESIDENT_ID		AND
					U_UPOLNOMR1.UPOLNOMR_ID	= U_SPR_CONFIRM.UPOLNOMR_ID2	AND
					U_UPOLNOMR1.DEL_FLAG	IS NULL
			LEFT	OUTER JOIN	U_UPOLNOMB (NOLOCK) ON
					U_UPOLNOMB.BANK_ID		= U_SPR_CONFIRM.BANK_ID		AND
					U_UPOLNOMB.UPOLNOMB_ID	= U_SPR_CONFIRM.UPOLNOMB_ID	AND
					U_UPOLNOMB.DEL_FLAG		IS NULL
			WHERE	U_SPR_CONFIRM.BANK_ID			= @BANK_ID		AND
					U_SPR_CONFIRM.RESIDENT_ID		= @RESIDENT_ID	AND
					U_SPR_CONFIRM.D_PRED_BANK		IS NULL			AND
					U_SPR_CONFIRM.D_UNLOAD			IS NULL			AND
					U_SPR_CONFIRM.FLAG_READY_TO_BANK	IS NOT NULL	AND
					U_SPR_CONFIRM.SPR_ID			IS NOT NULL	AND
					U_SPR_CONFIRM.DEL_FLAG			IS NULL	
			ORDER	BY U_SPR_CONFIRM.PS_ID, U_SPR_CONFIRM.SPR_ID, U_SPR_CONFIRM.NPP

			--	Возвращаем сводные данные по U_SPR_CONFIRM как U_SPR_CONFIRM_ALL
			SELECT	DISTINCT @SELECT_NO	AS SELECT_FLAG,
					U_SPR_CONFIRM_ALL.PS_ID,		
					U_SPR_CONFIRM_ALL.SPR_ID,
					U_SPR_CONFIRM_ALL.D_PRED,
					U_PS.N_PS	AS	PS__N_PS,
					(	SELECT	COUNT(*) 
						FROM	U_SPR_CONFIRM AS U (NOLOCK)
						WHERE	U.BANK_ID				= @BANK_ID			AND
								U.RESIDENT_ID			= @RESIDENT_ID		AND
								U.D_PRED_BANK			IS NULL				AND
								U.D_UNLOAD				IS NULL				AND
								U.FLAG_READY_TO_BANK	IS NOT NULL			AND
								U.SPR_ID				IS NOT NULL			AND
								U.DEL_FLAG				IS NULL				AND
								U.SPR_ID				= U_SPR_CONFIRM_ALL.SPR_ID
					)		AS NPP_COUNT
			FROM	U_SPR_CONFIRM AS U_SPR_CONFIRM_ALL (NOLOCK)
			INNER	JOIN	U_PS (NOLOCK) ON	
					U_PS.RESIDENT_ID	= U_SPR_CONFIRM_ALL.RESIDENT_ID	AND	
					U_PS.PS_ID			= U_SPR_CONFIRM_ALL.PS_ID		AND	
					U_PS.DEL_FLAG		IS NULL
			WHERE	U_SPR_CONFIRM_ALL.BANK_ID				= @BANK_ID		AND
					U_SPR_CONFIRM_ALL.RESIDENT_ID			= @RESIDENT_ID	AND
					U_SPR_CONFIRM_ALL.D_PRED_BANK			IS NULL			AND
					U_SPR_CONFIRM_ALL.D_UNLOAD				IS NULL			AND
					U_SPR_CONFIRM_ALL.FLAG_READY_TO_BANK	IS NOT NULL		AND
					U_SPR_CONFIRM_ALL.SPR_ID				IS NOT NULL		AND
					U_SPR_CONFIRM_ALL.DEL_FLAG				IS NULL	
			ORDER	BY U_SPR_CONFIRM_ALL.PS_ID, U_SPR_CONFIRM_ALL.SPR_ID
	
			--	Проставляем D_UNLOAD в U_SPR_CONFIRM (должно быть в конце)
			UPDATE	U_SPR_CONFIRM	
			SET		U_SPR_CONFIRM.D_UNLOAD				= @D_TODAY
			WHERE	U_SPR_CONFIRM.BANK_ID				= @BANK_ID		AND
					U_SPR_CONFIRM.RESIDENT_ID			= @RESIDENT_ID	AND
					U_SPR_CONFIRM.D_PRED_BANK			IS NULL			AND
					U_SPR_CONFIRM.D_UNLOAD				IS NULL			AND
					U_SPR_CONFIRM.FLAG_READY_TO_BANK	IS NOT NULL		AND
					U_SPR_CONFIRM.DEL_FLAG				IS NULL		

			--	Проставляем D_PRED_BANK и очищаем FLAG_READY_TO_BANK в U_SPR_CONFIRM (должно быть в самом конце)
			IF	@FLAG_D_PRED_BANK_SPR_CONFIRM	= 1
				UPDATE	U_SPR_CONFIRM	
				SET		U_SPR_CONFIRM.D_PRED_BANK			= @D_TODAY,
						U_SPR_CONFIRM.FLAG_READY_TO_BANK	= NULL
				WHERE	U_SPR_CONFIRM.BANK_ID				= @BANK_ID		AND
						U_SPR_CONFIRM.RESIDENT_ID			= @RESIDENT_ID	AND
						U_SPR_CONFIRM.D_PRED_BANK			IS NULL			AND
						U_SPR_CONFIRM.D_UNLOAD				= @D_TODAY		AND
						U_SPR_CONFIRM.FLAG_READY_TO_BANK	IS NOT NULL		AND
						U_SPR_CONFIRM.DEL_FLAG				IS NULL		
		END	
	ELSE	--@FLAG_SPR_CONFIRM = 1	
		BEGIN
			--	Отбор без данных (для верной нумерации таблиц в датасете)
			SELECT	U_SPR_CONFIRM.PS_ID
			FROM	U_SPR_CONFIRM (NOLOCK)
			WHERE	1=2
	
			SELECT	U_SPR_CONFIRM_ALL.PS_ID
			FROM	U_SPR_CONFIRM AS U_SPR_CONFIRM_ALL (NOLOCK)
			WHERE	1=2
		END

	IF	@FLAG_SPR_VAL_OPR = 1
		BEGIN
		--	---------------------------------------------------		
		--	3. Отбор информации Справок о валютных операциях 
		--	---------------------------------------------------
			--	Проставляем UNI_ID тем документам для передачи, у которых он отсутствует
			UPDATE	U_SPR_VAL_OPR	
			SET		U_SPR_VAL_OPR.UNI_ID = NEWID()
			WHERE	U_SPR_VAL_OPR.BANK_ID				= @BANK_ID		AND
					U_SPR_VAL_OPR.RESIDENT_ID			= @RESIDENT_ID	AND
					U_SPR_VAL_OPR.UNI_ID				IS NULL			AND
					U_SPR_VAL_OPR.D_PRED_BANK			IS NULL			AND
					U_SPR_VAL_OPR.D_UNLOAD				IS NULL			AND
					U_SPR_VAL_OPR.FLAG_READY_TO_BANK	IS NOT NULL		AND
					U_SPR_VAL_OPR.DEL_FLAG				IS NULL			
	
			--	Возвращаем данные по U_SPR_VAL_OPR
			SELECT	@SELECT_NO				AS SELECT_FLAG,
					U_SPR_VAL_OPR.SPR_ID,
					U_SPR_VAL_OPR.D_PRED,
					U_SPR_VAL_OPR.NPP,
					U_SPR_VAL_OPR.N_UVED,
					U_SCHET.N_SCHET			AS	SCHET__N_SCHET,
					U_SPR_VAL_OPR.D_SPR,
					U_SPR_VAL_OPR.DIRECTION,
					U_SPR_VAL_OPR.KODOP,
					U_SPR_VAL_OPR.VALP,
					U_SPR_VAL_OPR.SUMP,
					U_SPR_VAL_OPR.VALK,
					U_SPR_VAL_OPR.SUMK,
					U_SPR_VAL_OPR.D_PRED_BANK,
					U_PS.N_PS				AS PS__N_PS,
					U_SPR_VAL_OPR.D_ZA,
					U_SPR_VAL_OPR.N_ZA,
					U_SPR_VAL_OPR.KKURS,
					U_SPR_VAL_OPR.DKOR,
					U_SPR_VAL_OPR.PRIM,
					--	Данные о Счёте
					U_SCHET.KODV			AS	SCHET__KODV,
					U_SCHET.D_OPEN			AS	SCHET__D_OPEN,
					U_SCHET.PRIM			AS	SCHET__PRIM,
					U_SCHET.TYPE_SCHET_ID	AS	SCHET__TYPE_SCHET_ID,
					--	Данные об Уполномоченном лице от Участника ВЭД с правом 1-ой подписи 
					U_UPOLNOMR.FIO			AS	UPOLNOMR__FIO_R1,
					U_UPOLNOMR.DOL			AS	UPOLNOMR__DOL_R1,
					U_UPOLNOMR.PRIM			AS	UPOLNOMR__PRIM_R1,
					--	Данные об Уполномоченном лице от Участника ВЭД с правом 2-ой подписи 
					U_UPOLNOMR1.FIO			AS	UPOLNOMR__FIO_R2,
					U_UPOLNOMR1.DOL			AS	UPOLNOMR__DOL_R2,
					U_UPOLNOMR1.PRIM		AS	UPOLNOMR__PRIM_R2,
					--	Данные об Уполномоченном лице от Банка
					U_UPOLNOMB.FIO			AS	UPOLNOMB__FIO,
					U_UPOLNOMB.DOL			AS	UPOLNOMB__DOL,
					U_UPOLNOMB.N_PECH		AS	UPOLNOMB__N_PECH,
					U_UPOLNOMB.PRIM			AS	UPOLNOMB__PRIM,
					--	Уникальные идентификаторы строки из СВО и ПС в ВК УВЭД
					U_SPR_VAL_OPR.UNI_ID	AS	UNI_ID,  
					U_PS.UNI_ID				AS	PS__UNI_ID  	
			FROM	U_SPR_VAL_OPR (NOLOCK)
			INNER	JOIN	U_SCHET (NOLOCK) ON	
					U_SCHET.RESIDENT_ID	= U_SPR_VAL_OPR.RESIDENT_ID	AND	
					U_SCHET.SCHET_ID	= U_SPR_VAL_OPR.SCHET_ID	AND	
					U_SCHET.DEL_FLAG	IS NULL
			LEFT	OUTER JOIN	U_PS (NOLOCK) ON	
					U_PS.RESIDENT_ID	= U_SPR_VAL_OPR.RESIDENT_ID	AND	
					U_PS.PS_ID			= U_SPR_VAL_OPR.PS_ID		AND	
					U_PS.DEL_FLAG		IS NULL
			LEFT	OUTER JOIN	U_UPOLNOMR (NOLOCK) ON
					U_UPOLNOMR.RESIDENT_ID	= U_SPR_VAL_OPR.RESIDENT_ID		AND	
					U_UPOLNOMR.UPOLNOMR_ID	= U_SPR_VAL_OPR.UPOLNOMR_ID1	AND
					U_UPOLNOMR.DEL_FLAG		IS NULL	
			LEFT	OUTER JOIN	U_UPOLNOMR AS U_UPOLNOMR1 (NOLOCK) ON
					U_UPOLNOMR1.RESIDENT_ID	= U_SPR_VAL_OPR.RESIDENT_ID		AND
					U_UPOLNOMR1.UPOLNOMR_ID	= U_SPR_VAL_OPR.UPOLNOMR_ID2	AND
					U_UPOLNOMR1.DEL_FLAG	IS NULL
			LEFT	OUTER JOIN	U_UPOLNOMB (NOLOCK) ON
					U_UPOLNOMB.BANK_ID		= U_SPR_VAL_OPR.BANK_ID			AND
					U_UPOLNOMB.UPOLNOMB_ID	= U_SPR_VAL_OPR.UPOLNOMB_ID		AND
					U_UPOLNOMB.DEL_FLAG		IS NULL
			WHERE	U_SPR_VAL_OPR.BANK_ID				= @BANK_ID		AND
					U_SPR_VAL_OPR.RESIDENT_ID			= @RESIDENT_ID	AND
					U_SPR_VAL_OPR.D_PRED_BANK			IS NULL			AND
					U_SPR_VAL_OPR.D_UNLOAD				IS NULL			AND
					U_SPR_VAL_OPR.FLAG_READY_TO_BANK	IS NOT NULL		AND
					U_SPR_VAL_OPR.DEL_FLAG				IS NULL	
			ORDER	BY U_SPR_VAL_OPR.SPR_ID, U_SPR_VAL_OPR.NPP

			--	Возвращаем сводные данные по U_SPR_VAL_OPR как U_SPR_VAL_OPR_ALL
			SELECT	DISTINCT @SELECT_NO		AS SELECT_FLAG,
					U_SPR_VAL_OPR_ALL.SPR_ID,
					U_SPR_VAL_OPR_ALL.D_PRED,
					(	SELECT	COUNT(*)
						FROM 	U_SPR_VAL_OPR AS U (NOLOCK)
						WHERE	U.BANK_ID				= @BANK_ID			AND
								U.RESIDENT_ID			= @RESIDENT_ID		AND
								U.D_PRED_BANK			IS NULL				AND
								U.D_UNLOAD				IS NULL				AND
								U.FLAG_READY_TO_BANK	IS NOT NULL			AND
								U.DEL_FLAG		IS NULL						AND
								U.SPR_ID		= U_SPR_VAL_OPR_ALL.SPR_ID
					)	AS NPP_COUNT
			FROM	U_SPR_VAL_OPR AS U_SPR_VAL_OPR_ALL (NOLOCK)
			WHERE	U_SPR_VAL_OPR_ALL.BANK_ID				= @BANK_ID		AND
					U_SPR_VAL_OPR_ALL.RESIDENT_ID			= @RESIDENT_ID	AND
					U_SPR_VAL_OPR_ALL.D_PRED_BANK			IS NULL			AND
					U_SPR_VAL_OPR_ALL.D_UNLOAD				IS NULL			AND
					U_SPR_VAL_OPR_ALL.FLAG_READY_TO_BANK	IS NOT NULL		AND
					U_SPR_VAL_OPR_ALL.DEL_FLAG				IS NULL	
			ORDER	BY U_SPR_VAL_OPR_ALL.SPR_ID
	
			--	Проставляем D_UNLOAD в U_SPR_VAL_OPR (должно быть в конце)
			UPDATE	U_SPR_VAL_OPR	
			SET		U_SPR_VAL_OPR.D_UNLOAD				= @D_TODAY
			WHERE	U_SPR_VAL_OPR.BANK_ID				= @BANK_ID		AND
					U_SPR_VAL_OPR.RESIDENT_ID			= @RESIDENT_ID	AND
					U_SPR_VAL_OPR.D_PRED_BANK			IS NULL			AND
					U_SPR_VAL_OPR.D_UNLOAD				IS NULL			AND
					U_SPR_VAL_OPR.FLAG_READY_TO_BANK	IS NOT NULL		AND
					U_SPR_VAL_OPR.DEL_FLAG				IS NULL		

			--	Проставляем D_PRED_BANK и очищаем FLAG_READY_TO_BANK в U_SPR_VAL_OPR (должно быть в самом конце)
			IF	@FLAG_D_PRED_BANK_SPR_VAL_OPR	= 1
				UPDATE	U_SPR_VAL_OPR	
				SET		U_SPR_VAL_OPR.D_PRED_BANK			= @D_TODAY,
						U_SPR_VAL_OPR.FLAG_READY_TO_BANK	= NULL
				WHERE	U_SPR_VAL_OPR.BANK_ID				= @BANK_ID		AND
						U_SPR_VAL_OPR.RESIDENT_ID			= @RESIDENT_ID	AND
						U_SPR_VAL_OPR.D_PRED_BANK			IS NULL			AND
						U_SPR_VAL_OPR.D_UNLOAD				= @D_TODAY		AND
						U_SPR_VAL_OPR.FLAG_READY_TO_BANK	IS NOT NULL		AND
						U_SPR_VAL_OPR.DEL_FLAG				IS NULL		
		END			
	ELSE	--@FLAG_SPR_VAL_OPR	= 1
		BEGIN
		--	Отбор без данных (для верной нумерации таблиц в датасете)
			SELECT	U_SPR_VAL_OPR.PS_ID
			FROM	U_SPR_VAL_OPR (NOLOCK)
			WHERE	1=2
	
			SELECT	U_SPR_VAL_OPR_ALL.PS_ID
			FROM	U_SPR_VAL_OPR AS U_SPR_VAL_OPR_ALL (NOLOCK)
			WHERE	1=2
		END

	IF	@FLAG_SPR_RUB = 1
		BEGIN
		--	---------------------------------------------------		
		--	4. Отбор информации Справок о поступлении валюты РФ 
		--	---------------------------------------------------
			--	Проставляем UNI_ID тем документам для передачи, у которых он отсутствует
			UPDATE	U_SPR_RUB	
			SET		U_SPR_RUB.UNI_ID = NEWID()
			WHERE	U_SPR_RUB.BANK_ID				= @BANK_ID		AND
					U_SPR_RUB.RESIDENT_ID			= @RESIDENT_ID	AND
					U_SPR_RUB.UNI_ID				IS NULL			AND
					U_SPR_RUB.D_PRED_BANK			IS NULL			AND
					U_SPR_RUB.D_UNLOAD				IS NULL			AND
					U_SPR_RUB.FLAG_READY_TO_BANK	IS NOT NULL		AND
					U_SPR_RUB.DEL_FLAG				IS NULL		
				
			--	Возвращаем данные по U_SPR_RUB
			SELECT	@SELECT_NO				AS SELECT_FLAG,
					U_SPR_RUB.SCHET_ID,		-- для протокола передачи
					U_SPR_RUB.SPR_ID,
					U_SPR_RUB.D_PRED,
					U_SPR_RUB.NPP,
					U_SPR_RUB.D_ZACH,
					U_SCHET.N_SCHET			AS	SCHET__N_SCHET,
					U_SPR_RUB.KODOP,
					U_SPR_RUB.SUM_RUB,
					U_SPR_RUB.VALK,
					U_SPR_RUB.SUM_VALK,
					U_SPR_RUB.D_PRED_BANK,
					U_PS.N_PS				AS	PS__N_PS,
					U_SPR_RUB.KKURS,
					U_SPR_RUB.DKOR,
					U_SPR_RUB.PRIM,
					--	Данные о Счете
					U_SCHET.KODV			AS	SCHET__KODV,
					U_SCHET.D_OPEN			AS	SCHET__D_OPEN,
					U_SCHET.PRIM			AS	SCHET__PRIM,
					U_SCHET.TYPE_SCHET_ID		AS	SCHET__TYPE_SCHET_ID,
					--	Данные об Уполномоченном лице от Участника ВЭД с правом 1-ой подписи 
					U_UPOLNOMR.FIO			AS	UPOLNOMR__FIO_R1,
					U_UPOLNOMR.DOL			AS	UPOLNOMR__DOL_R1,
					U_UPOLNOMR.PRIM			AS	UPOLNOMR__PRIM_R1,
					--	Данные об Уполномоченном лице от Участника ВЭД с правом 2-ой подписи 
					U_UPOLNOMR1.FIO			AS	UPOLNOMR__FIO_R2,
					U_UPOLNOMR1.DOL			AS	UPOLNOMR__DOL_R2,
					U_UPOLNOMR1.PRIM		AS	UPOLNOMR__PRIM_R2,
					--	Данные об Уполномоченном лице от Банка
					U_UPOLNOMB.FIO			AS	UPOLNOMB__FIO,
					U_UPOLNOMB.DOL			AS	UPOLNOMB__DOL,
					U_UPOLNOMB.N_PECH		AS	UPOLNOMB__N_PECH,
					U_UPOLNOMB.PRIM			AS	UPOLNOMB__PRIM,
					--	Уникальные идентификаторы строки из СПВРФ и ПС в ВК УВЭД
					U_SPR_RUB.UNI_ID		AS	UNI_ID,  
					U_PS.UNI_ID				AS	PS__UNI_ID  		
			FROM	U_SPR_RUB (NOLOCK)
			INNER	JOIN	U_PS (NOLOCK) ON	
					U_PS.RESIDENT_ID	= U_SPR_RUB.RESIDENT_ID	AND	
					U_PS.PS_ID			= U_SPR_RUB.PS_ID		AND	
					U_PS.DEL_FLAG		IS NULL
			INNER	JOIN	U_SCHET (NOLOCK) ON	
					U_SPR_RUB.RESIDENT_ID	= U_SCHET.RESIDENT_ID	AND	
					U_SPR_RUB.SCHET_ID		= U_SCHET.SCHET_ID		AND	
					U_SCHET.DEL_FLAG		IS NULL
			LEFT	OUTER JOIN	U_UPOLNOMR (NOLOCK) ON
					U_UPOLNOMR.RESIDENT_ID	= U_SPR_RUB.RESIDENT_ID		AND	
					U_UPOLNOMR.UPOLNOMR_ID	= U_SPR_RUB.UPOLNOMR_ID1	AND
					U_UPOLNOMR.DEL_FLAG		IS NULL	
			LEFT	OUTER JOIN	U_UPOLNOMR AS U_UPOLNOMR1 (NOLOCK) ON
					U_UPOLNOMR1.RESIDENT_ID	= U_SPR_RUB.RESIDENT_ID		AND
					U_UPOLNOMR1.UPOLNOMR_ID	= U_SPR_RUB.UPOLNOMR_ID2	AND
					U_UPOLNOMR1.DEL_FLAG	IS NULL
			LEFT	OUTER JOIN	U_UPOLNOMB (NOLOCK) ON
					U_UPOLNOMB.BANK_ID		= U_SPR_RUB.BANK_ID			AND
					U_UPOLNOMB.UPOLNOMB_ID	= U_SPR_RUB.UPOLNOMB_ID		AND
					U_UPOLNOMB.DEL_FLAG		IS NULL
			WHERE	U_SPR_RUB.BANK_ID				=	@BANK_ID		AND
					U_SPR_RUB.RESIDENT_ID			=	@RESIDENT_ID	AND
					U_SPR_RUB.D_PRED_BANK			IS	NULL			AND
					U_SPR_RUB.D_UNLOAD				IS	NULL			AND
					U_SPR_RUB.FLAG_READY_TO_BANK	IS	NOT NULL		AND
					U_SPR_RUB.DEL_FLAG				IS	NULL	
			ORDER	BY U_SPR_RUB.SPR_ID, U_SPR_RUB.NPP

			--	Возвращаем сводные данные по U_SPR_RUB как U_SPR_RUB_ALL
			SELECT	DISTINCT @SELECT_NO			AS SELECT_FLAG,
					U_SPR_RUB_ALL.SPR_ID,
					U_SPR_RUB_ALL.D_PRED,
					U_SCHET.N_SCHET				AS	SCHET__N_SCHET,
					(	SELECT	COUNT(*)
						FROM	U_SPR_RUB AS U (NOLOCK)
						WHERE	U.BANK_ID				= @BANK_ID		AND
								U.RESIDENT_ID			= @RESIDENT_ID	AND
								U.D_PRED_BANK			IS NULL			AND
								U.D_UNLOAD				IS NULL			AND
								U.FLAG_READY_TO_BANK	IS NOT NULL		AND
								U.DEL_FLAG				IS NULL			AND
								U.SPR_ID				= U_SPR_RUB_ALL.SPR_ID
					)	AS NPP_COUNT
			FROM	U_SPR_RUB AS U_SPR_RUB_ALL (NOLOCK)
			INNER	JOIN	U_SCHET (NOLOCK) ON	
					U_SCHET.RESIDENT_ID	= U_SPR_RUB_ALL.RESIDENT_ID		AND	
					U_SCHET.SCHET_ID	= U_SPR_RUB_ALL.SCHET_ID		AND	
					U_SCHET.DEL_FLAG	IS NULL
			WHERE	U_SPR_RUB_ALL.BANK_ID				= @BANK_ID		AND
					U_SPR_RUB_ALL.RESIDENT_ID			= @RESIDENT_ID	AND
					U_SPR_RUB_ALL.D_PRED_BANK			IS NULL			AND
					U_SPR_RUB_ALL.D_UNLOAD				IS NULL			AND
					U_SPR_RUB_ALL.FLAG_READY_TO_BANK	IS NOT NULL		AND
					U_SPR_RUB_ALL.DEL_FLAG				IS NULL	
			ORDER	BY U_SPR_RUB_ALL.SPR_ID
	
			--	Проставляем D_UNLOAD в U_SPR_RUB (должно быть в конце)
			UPDATE	U_SPR_RUB	
			SET		U_SPR_RUB.D_UNLOAD				= @D_TODAY
			WHERE	U_SPR_RUB.BANK_ID				= @BANK_ID			AND
					U_SPR_RUB.RESIDENT_ID			= @RESIDENT_ID		AND
					U_SPR_RUB.D_PRED_BANK			IS NULL				AND
					U_SPR_RUB.D_UNLOAD				IS NULL				AND
					U_SPR_RUB.FLAG_READY_TO_BANK	IS NOT NULL			AND
					U_SPR_RUB.DEL_FLAG				IS NULL		

			--	Проставляем D_PRED_BANK и очищаем FLAG_READY_TO_BANK в U_SPR_RUB (должно быть в самом конце)
			IF	@FLAG_D_PRED_BANK_SPR_RUB	= 1
				UPDATE	U_SPR_RUB	
				SET		U_SPR_RUB.D_PRED_BANK			= @D_TODAY,
						U_SPR_RUB.FLAG_READY_TO_BANK	= NULL
				WHERE	U_SPR_RUB.BANK_ID				= @BANK_ID		AND
						U_SPR_RUB.RESIDENT_ID			= @RESIDENT_ID	AND
						U_SPR_RUB.D_PRED_BANK			IS NULL			AND
						U_SPR_RUB.D_UNLOAD				= @D_TODAY		AND
						U_SPR_RUB.FLAG_READY_TO_BANK	IS NOT NULL		AND
						U_SPR_RUB.DEL_FLAG				IS NULL		
		END			
	ELSE	--@FLAG_SPR_RUB	= 1
		BEGIN
		--	Отбор без данных (для верной нумерации таблиц в датасете)
			SELECT	U_SPR_RUB.PS_ID
			FROM	U_SPR_RUB (NOLOCK)
			WHERE	1=2
	
			SELECT	U_SPR_RUB_ALL.PS_ID
			FROM	U_SPR_RUB AS U_SPR_RUB_ALL (NOLOCK)
			WHERE	1=2
		END
GO

GRANT  EXECUTE  ON [dbo].[U_EXPORT_TO_ASVKB]  TO [OPERS]
GO

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

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

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

--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[U_CRP_OPLATA_SELECT_ALL]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[U_CRP_OPLATA_SELECT_ALL]
GO

CREATE  PROCEDURE [dbo].[U_CRP_OPLATA_SELECT_ALL]
-- -----------------------------------------------------------------------------------------------------------------------------------------------
-- 	Список Платежей, доступных пользователю 
--	(для отчётов Список Платежей и Список Платежей (дополнительная форма), в паре с процедурой U_CRP_ITOGI_OPLATA)
-- -----------------------------------------------------------------------------------------------------------------------------------------------
--	@USER_ID 		-	идентификатор пользователя
--	@RESIDENT_ID 	-	идентификатор Участника ВЭД, если передан NULL - по всем Участникам ВЭД
--	@BANK_ID 		-	идентификатор Банка, если передан NULL - по всем Банкам
--	@TYPE_PS	 	-	тип ПС, если передан NULL - по всем типам ПС
--	@PS_ID 			-	идентификатор ПС, если передан NULL - по всем ПС
--	@DIRECTION		-	направление платежа, если передан NULL - по всем направлениям платежа
--	@VALP 			-	код валюты платежа, если передан NULL - по всем кодам валют платежа
--	@KODOP_S		-	код вида валютной операции С, если передан NULL - нижняя граница интервала не задана
--	@KODOP_PO		-	код вида валютной операции ПО, если передан NULL - верхняя граница интервала не задана
--	@TYPE_35		-	детализация для кодов 35010 и 35020, если передан NULL - по всем значениям детализации
--	@TYPE_99010		-	детализация для кода 99010, если передан NULL - по всем значениям детализации
--	@NPP_S			-	номер п\п С, если передан NULL - нижняя граница интервала не задана
--	@NPP_PO			-	номер п\п ПО, если передан NULL - верхняя граница интервала не задана
--	@D_REFER_S		-	дата платежа С, если передан NULL - нижняя граница интервала не задана
--	@D_REFER_PO		-	дата платежа ПО, если передан NULL - верхняя граница интервала не задана
--	@KODS			-	код страны банка получателя (отправителя) платежа, если передан NULL - по всем кодам
--	@KODS_IN_BANK	-	код страны банка-нерезидента, если передан NULL - по всем кодам
--	@FLAG_BANK		-	признак проведения расчетов через счета, '0' - в любых банках, '1' - в банках ПС, '2' - в банках за пределами территории РФ
--	@FLAG_PS		-	признак отбора платежей, '0' - все платежи, '1' - платежи с ПС, '2' - платежи без ПС
-- -------------------------------------------------------------------------------------------------------------------------------------------------
--	(Модификация	в версии 2.1.0)
--	------------------------------------------------------------------------------------------------------------------------------------------------
(
	@USER_ID		AS VARCHAR(30),		
	@RESIDENT_ID 	AS INTEGER 			= NULL,
	@BANK_ID 		AS INTEGER 			= NULL,
	@TYPE_PS	    AS CHAR(1) 			= NULL,
	@PS_ID 			AS INTEGER			= NULL,
	@DIRECTION      AS CHAR(1) 			= NULL,
	@VALP			AS CHAR(3) 			= NULL,
	@KODOP_S		AS CHAR(5) 			= NULL,
	@KODOP_PO		AS CHAR(5) 			= NULL,
	@TYPE_35		AS CHAR(1) 			= NULL,
	@TYPE_99010		AS CHAR(1) 			= NULL,
	@NPP_S 			AS INTEGER 			= NULL, 
	@NPP_PO			AS INTEGER 			= NULL,
	@D_REFER_S		AS SMALLDATETIME	= NULL,
	@D_REFER_PO		AS SMALLDATETIME	= NULL,
	@KODS			AS CHAR(3) 			= NULL,
	@KODS_IN_BANK	AS CHAR(3) 			= NULL,
	@FLAG_BANK 		AS CHAR(1),
	@FLAG_PS 		AS CHAR(1)
)
AS
	SET NOCOUNT ON

	SELECT	ISNULL(U_RESIDENTS.NAMER_S, U_RESIDENTS.NAMER)	AS NAMER_MAIN,
			U_PS.N_PS, 
			ISNULL(U_DOGOVOR.N_DOPSOGL, U_DOGOVOR.N_KONTR)	AS N_KONTR_FROM_PS,
			U_SCHET.N_SCHET,
			U_OPLATA.*
	FROM	U_OPLATA (NOLOCK) 
	INNER	JOIN 	U_USERS_RESIDENTS (NOLOCK) ON 
			U_USERS_RESIDENTS.RESIDENT_ID	= U_OPLATA.RESIDENT_ID	AND
			U_USERS_RESIDENTS.USER_ID		= @USER_ID
	INNER	JOIN	U_RESIDENTS (NOLOCK) ON	
			U_RESIDENTS.RESIDENT_ID			= U_OPLATA.RESIDENT_ID	AND
			U_RESIDENTS.DEL_FLAG 			IS NULL		
	LEFT	OUTER JOIN	U_PS (NOLOCK) ON
			U_PS.RESIDENT_ID				= U_OPLATA.RESIDENT_ID	AND
			U_PS.PS_ID						= U_OPLATA.PS_ID		AND
			U_PS.DEL_FLAG					IS NULL
	LEFT	OUTER JOIN	U_DOGOVOR (NOLOCK)ON
			U_DOGOVOR.RESIDENT_ID			= U_PS.RESIDENT_ID		AND
			U_DOGOVOR.DOG_ID				= U_PS.DOG_ID			AND
			U_DOGOVOR.DOG_NPP				= U_PS.DOG_NPP			AND
			U_DOGOVOR.DEL_FLAG				IS NULL
	LEFT	OUTER JOIN	U_SCHET	(NOLOCK) ON	
			U_SCHET.RESIDENT_ID				= U_OPLATA.RESIDENT_ID	AND
			U_SCHET.SCHET_ID				= U_OPLATA.SCHET_ID		AND
			U_SCHET.DEL_FLAG				IS NULL
	WHERE	U_OPLATA.DEL_FLAG				IS NULL	 				AND
			(
				@RESIDENT_ID 				IS NULL			OR
				U_OPLATA.RESIDENT_ID		= @RESIDENT_ID
			)														AND
			(
				@BANK_ID 					IS NULL			OR
				U_OPLATA.BANK_ID			= @BANK_ID
			)														AND
(
				@TYPE_PS 					IS NULL			OR
				SUBSTRING(U_PS.N_PS, 20, 1) = @TYPE_PS
			)														AND
			(
			 	@PS_ID				IS NULL					OR	
			 	ISNULL(@PS_ID, 0)	= ISNULL(U_OPLATA.PS_ID, 0)
			)														AND
			(
			 @FLAG_PS = '0'										OR
			 ( @FLAG_PS = '1' AND U_OPLATA.PS_ID IS NOT NULL)	OR
			 ( @FLAG_PS = '2' AND U_OPLATA.PS_ID IS NULL ) 
			)														AND
			(
			 @FLAG_BANK = '0'	OR
			 ( @FLAG_BANK = '1' AND U_OPLATA.PRIZ_OUT IS NULL) OR
			 ( @FLAG_BANK = '2' AND U_OPLATA.PRIZ_OUT = 'N' ) 
			)														AND
			(
			 @DIRECTION			IS NULL		OR	
			 U_OPLATA.DIRECTION	= @DIRECTION		
			)														AND
			(
			 @VALP				IS NULL		OR
			 U_OPLATA.VALP 		= @VALP 
			)														AND
			(
			 @KODOP_S			IS NULL		OR	
			 U_OPLATA.KODOP 	>= @KODOP_S 
			)														AND
			(
			 @KODOP_PO			IS NULL		OR
			 U_OPLATA.KODOP 	<= @KODOP_PO 
			)														AND
			(
			 @TYPE_35		IS NULL		OR
			 (
			  ( 
			    U_OPLATA.KODOP	<> '35010'	AND		
			    U_OPLATA.KODOP	<> '35020'
			  )					OR
			  (	
			    (
			     U_OPLATA.KODOP	= '35010'	OR		
			     U_OPLATA.KODOP	= '35020'			
			    )					AND	
			    U_OPLATA.TYPE 	= @TYPE_35 
			  )
			 )
			)														AND
			(
			 @TYPE_99010		IS NULL		OR
			 ( 
			   U_OPLATA.KODOP		<> '99010'      OR  
			   ( 
			     U_OPLATA.KODOP	=  '99010'	AND
			     U_OPLATA.TYPE_99010 = @TYPE_99010 
			   )	
			 )							
			)														AND
			(
			 @NPP_S 			IS NULL		OR
			 U_OPLATA.NPP 		>= @NPP_S 
			)														AND
			(
			 @NPP_PO			IS NULL		OR
			 U_OPLATA.NPP 		<= @NPP_PO 
			)														AND
			(
			 @D_REFER_S			IS NULL		OR
			 U_OPLATA.D_REFER 	>= @D_REFER_S 
			)														AND
			(
			 @D_REFER_PO		IS NULL		OR
			 U_OPLATA.D_REFER 	<= @D_REFER_PO 
			)														AND
			(
			 @KODS				IS NULL		OR
			 U_OPLATA.KODS 		= @KODS 
			)														AND			
			(
			 @KODS_IN_BANK			IS NULL		OR
			 U_OPLATA.KODS_IN_BANK	= @KODS_IN_BANK 
			)				
	ORDER	BY U_RESIDENTS.NAMER, U_PS.N_PS
GO

GRANT  EXECUTE  ON [dbo].[U_CRP_OPLATA_SELECT_ALL]  TO [OPERS], [AUDITS]
GO

--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[U_CRP_ITOGI_OPLATA]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[U_CRP_ITOGI_OPLATA]
GO

CREATE PROCEDURE [dbo].[U_CRP_ITOGI_OPLATA]
--	--------------------------------------------------------------------------------------------------------------------------------------------------
--	Возвращает итоги по платежам по заданным критериям 
--	(для отчётов Список Платежей и Список Платежей (дополнительная форма) (подотчёт Итоги по Платежам), в паре с процедурой U_CRP_OPLATA_SELECT_ALL)
--	--------------------------------------------------------------------------------------------------------------------------------------------------
--	@USER_ID 		-	идентификатор пользователя
--	@RESIDENT_ID 	-	идентификатор Участника ВЭД, если передан NULL - по всем Участникам ВЭД
--	@BANK_ID 		-	идентификатор Банка, если передан NULL - по всем Банкам
--	@TYPE_PS	 	-	тип ПС, если передан NULL - по всем типам ПС
--	@PS_ID 			-	идентификатор ПС, если передан NULL - по всем ПС
--	@DIRECTION		-	направление платежа, если передан NULL - по всем направлениям платежа
--	@VALP 			-	код валюты платежа, если передан NULL - по всем кодам валют платежа
--	@KODOP_S		-	код вида валютной операции С, если передан NULL - нижняя граница интервала не задана
--	@KODOP_PO		-	код вида валютной операции ПО, если передан NULL - верхняя граница интервала не задана
--	@TYPE_35		-	детализация для кодов 35010 и 35020, если передан NULL - по всем значениям детализации
--	@TYPE_99010		-	детализация для кода 99010, если передан NULL - по всем значениям детализации
--	@NPP_S			-	номер п\п С, если передан NULL - нижняя граница интервала не задана
--	@NPP_PO			-	номер п\п ПО, если передан NULL - верхняя граница интервала не задана
--	@D_REFER_S		-	дата платежа С, если передан NULL - нижняя граница интервала не задана
--	@D_REFER_PO		-	дата платежа ПО, если передан NULL - верхняя граница интервала не задана
--	@KODS			-	код страны банка получателя (отправителя) платежа, если передан NULL - по всем кодам
--	@KODS_IN_BANK	-	код страны банка-нерезидента, если передан NULL - по всем кодам
--	@FLAG_BANK		-	признак проведения расчетов через счета, '0' - в любых банках, '1' - в банках ПС, '2' - в банках за пределами территории РФ
--	@FLAG_PS		-	признак отбора платежей, '0' - все платежи, '1' - платежи с ПС, '2' - платежи без ПС
--	--------------------------------------------------------------------------------------------------------------------------------------------------
--	(Модификация	в версии 2.1.0)
--	------------------------------------------------------------------------------------------------------------------------------------------------
(
	@USER_ID 		AS VARCHAR(30),
	@RESIDENT_ID 	AS INTEGER			= NULL,
	@BANK_ID 		AS INTEGER 			= NULL,
	@TYPE_PS	    AS CHAR(1) 			= NULL,
	@PS_ID 			AS INTEGER 			= NULL,
	@DIRECTION      AS CHAR(1) 			= NULL,
	@VALP			AS CHAR(3) 			= NULL,
	@KODOP_S		AS CHAR(5) 			= NULL,
	@KODOP_PO		AS CHAR(5) 			= NULL,
	@TYPE_35		AS CHAR(1) 			= NULL,
	@TYPE_99010		AS CHAR(1) 			= NULL,
	@NPP_S 			AS INTEGER 			= NULL,
	@NPP_PO			AS INTEGER 			= NULL,
	@D_REFER_S		AS SMALLDATETIME	= NULL,
	@D_REFER_PO		AS SMALLDATETIME	= NULL,
	@KODS			AS CHAR(3) 			= NULL,
	@KODS_IN_BANK	AS CHAR(3) 			= NULL,
	@FLAG_BANK 		AS CHAR(1),
	@FLAG_PS 		AS CHAR(1)
)
AS
	SELECT 
		KODVAL,
		SUM(NACH_P) AS NACH_VALP,
		SUM(SPIS_P) AS SPIS_VALP,
		ABS(SUM(NACH_P) - SUM(SPIS_P)) AS RAZN_VALP,
		SUM(NACH_K) AS NACH_VALK,
		SUM(SPIS_K) AS SPIS_VALK,
		ABS(SUM(NACH_K) - SUM(SPIS_K)) AS RAZN_VALK
	FROM 
	(
		SELECT	U_OPLATA.VALP AS KODVAL,
				ISNULL(SUM( CASE U_OPLATA.DIRECTION WHEN '1' THEN ISNULL(U_OPLATA.SUMP, 0) END ), 0) AS NACH_P,
				ISNULL(SUM( CASE U_OPLATA.DIRECTION WHEN '2' THEN ISNULL(U_OPLATA.SUMP, 0) END ), 0) AS SPIS_P,
				0 AS NACH_K,
				0 AS SPIS_K
		FROM	U_OPLATA (NOLOCK)
		INNER	JOIN U_USERS_RESIDENTS (NOLOCK) ON 
				U_USERS_RESIDENTS.RESIDENT_ID	= U_OPLATA.RESIDENT_ID	AND
				U_USERS_RESIDENTS.USER_ID		= @USER_ID
		INNER	JOIN U_RESIDENTS (NOLOCK)	ON	
				U_RESIDENTS.RESIDENT_ID		= U_OPLATA.RESIDENT_ID	AND
				U_RESIDENTS.DEL_FLAG 		IS NULL		
		LEFT	OUTER JOIN	U_PS	(NOLOCK) ON
				U_PS.RESIDENT_ID	= U_OPLATA.RESIDENT_ID	AND
				U_PS.PS_ID			= U_OPLATA.PS_ID		AND
				U_PS.DEL_FLAG		IS NULL
		WHERE	U_OPLATA.DEL_FLAG	IS NULL	 							AND
				(
					@RESIDENT_ID 			IS NULL			OR
					U_OPLATA.RESIDENT_ID	= @RESIDENT_ID
				)														AND
				(
					@BANK_ID 				IS NULL			OR
					U_OPLATA.BANK_ID		= @BANK_ID
				)														AND
				(
					@TYPE_PS 					IS NULL			OR
					SUBSTRING(U_PS.N_PS, 20, 1) = @TYPE_PS
				)														AND
				(
					@PS_ID			IS NULL			OR	
					ISNULL(@PS_ID, 0)	= ISNULL(U_OPLATA.PS_ID, 0)
				)														AND
				(
					@FLAG_PS		= '0'							OR
				 	( @FLAG_PS = '1' AND U_OPLATA.PS_ID IS NOT NULL) OR
				 	( @FLAG_PS = '2' AND U_OPLATA.PS_ID IS NULL ) 
				)														AND
				(
				 @FLAG_BANK		= '0'			OR
				 ( @FLAG_BANK = '1' AND U_OPLATA.PRIZ_OUT IS NULL) OR
				 ( @FLAG_BANK = '2' AND U_OPLATA.PRIZ_OUT = 'N' ) 
				)														AND
				(
				 @DIRECTION			IS NULL		OR	
				 U_OPLATA.DIRECTION	= @DIRECTION		
				)														AND
				(
				 @VALP				IS NULL		OR
				 U_OPLATA.VALP 		= @VALP 
				)														AND
				(
				 @KODOP_S			IS NULL		OR	
				 U_OPLATA.KODOP 	>= @KODOP_S 
				)														AND
				(
				 @KODOP_PO			IS NULL		OR
				 U_OPLATA.KODOP 	<= @KODOP_PO 
				)														AND
				(
				 @TYPE_35		IS NULL		OR
				 (
				  ( 
				    U_OPLATA.KODOP	<> '35010'	AND		
				    U_OPLATA.KODOP	<> '35020'
				  )					OR
				  (	
				    (
				     U_OPLATA.KODOP	= '35010'	OR		
				     U_OPLATA.KODOP	= '35020'			
				    )					AND	
				    U_OPLATA.TYPE 	= @TYPE_35 
				  )
				 )
				)														AND
				(
				 @TYPE_99010		IS NULL		OR
				 ( 
				   U_OPLATA.KODOP	<> '99010'      OR  
				   ( 
				     U_OPLATA.KODOP	=  '99010'	AND
				     U_OPLATA.TYPE_99010 = @TYPE_99010 
	
				   )	
				 )							
				)														AND
				(
				 @NPP_S 			IS NULL		OR
				 U_OPLATA.NPP 		>= @NPP_S 
				)														AND
				(
				 @NPP_PO			IS NULL		OR
				 U_OPLATA.NPP 		<= @NPP_PO 
				)														AND
				(
				 @D_REFER_S			IS NULL		OR
				 U_OPLATA.D_REFER 	>= @D_REFER_S 
				)														AND
				(
				 @D_REFER_PO		IS NULL		OR
				 U_OPLATA.D_REFER 	<= @D_REFER_PO 
				)														AND
				(
				 @KODS				IS NULL		OR
				 U_OPLATA.KODS 		= @KODS 
				)														AND			
				(
				 @KODS_IN_BANK			IS NULL		OR
				 U_OPLATA.KODS_IN_BANK	= @KODS_IN_BANK 
				)				
		GROUP	BY VALP 
		UNION	ALL
		SELECT 	U_OPLATA.VALK AS KODVAL,
				0 AS NACH_P,
				0 AS SPIS_P,
				ISNULL(SUM( CASE U_OPLATA.DIRECTION WHEN '1' THEN ISNULL(U_OPLATA.SUMK, 0) END ), 0) AS NACH_K, 
				ISNULL(SUM( CASE U_OPLATA.DIRECTION WHEN '2' THEN ISNULL(U_OPLATA.SUMK, 0) END ), 0) AS SPIS_K 
		FROM	U_OPLATA (NOLOCK)
		INNER	JOIN U_USERS_RESIDENTS (NOLOCK) ON 
				U_USERS_RESIDENTS.RESIDENT_ID	= U_OPLATA.RESIDENT_ID	AND
				U_USERS_RESIDENTS.USER_ID		= @USER_ID
		INNER	JOIN U_RESIDENTS (NOLOCK)	ON	
				U_RESIDENTS.RESIDENT_ID		= U_OPLATA.RESIDENT_ID	AND
				U_RESIDENTS.DEL_FLAG 		IS NULL		
		LEFT	OUTER JOIN	U_PS	(NOLOCK) ON
				U_PS.RESIDENT_ID	= U_OPLATA.RESIDENT_ID	AND
				U_PS.PS_ID			= U_OPLATA.PS_ID		AND
				U_PS.DEL_FLAG		IS NULL
		WHERE	U_OPLATA.DEL_FLAG	IS NULL	 			AND
				(
					@RESIDENT_ID 				IS NULL			OR
					U_OPLATA.RESIDENT_ID		= @RESIDENT_ID
				)														AND
				(
					@BANK_ID 					IS NULL			OR
					U_OPLATA.BANK_ID			= @BANK_ID
				)														AND
				(
					@TYPE_PS 					IS NULL			OR
					SUBSTRING(U_PS.N_PS, 20, 1) = @TYPE_PS
				)														AND
				(
					@PS_ID				IS NULL			OR	
				 	ISNULL(@PS_ID, 0)	= ISNULL(U_OPLATA.PS_ID, 0)
				)														AND
				(
				 @FLAG_PS		= '0'			OR
				 ( @FLAG_PS = '1' AND U_OPLATA.PS_ID IS NOT NULL) OR
				 ( @FLAG_PS = '2' AND U_OPLATA.PS_ID IS NULL ) 
				)														AND
				(
				 @FLAG_BANK		= '0'			OR
				 ( @FLAG_BANK = '1' AND U_OPLATA.PRIZ_OUT IS NULL) OR
				 ( @FLAG_BANK = '2' AND U_OPLATA.PRIZ_OUT = 'N' ) 
				)														AND
				(
				 @DIRECTION			IS NULL		OR	
				 U_OPLATA.DIRECTION	= @DIRECTION		
				)														AND
				(
				 @VALP			IS NULL		OR
				 U_OPLATA.VALP 	= @VALP 
				)														AND
				(
				 @KODOP_S		IS NULL		OR	
				 U_OPLATA.KODOP >= @KODOP_S 
				)														AND
				(
				 @KODOP_PO		IS NULL		OR
				 U_OPLATA.KODOP <= @KODOP_PO 
				)														AND
				(
				 @TYPE_35		IS NULL		OR
				 (
				  ( 
				    U_OPLATA.KODOP	<> '35010'	AND		
				    U_OPLATA.KODOP	<> '35020'
				  )					OR
				  (	
				    (
				     U_OPLATA.KODOP	= '35010'	OR		
				     U_OPLATA.KODOP	= '35020'			
				    )					AND	
				    U_OPLATA.TYPE 	= @TYPE_35 
				  )
				 )
				)														AND
				(
				 @TYPE_99010		IS NULL		OR
				 ( 
				   U_OPLATA.KODOP	<> '99010'      OR  
				   ( 
				     U_OPLATA.KODOP	=  '99010'	AND
				     U_OPLATA.TYPE_99010 = @TYPE_99010 
	
				   )	
				 )							
				)														AND
				(
				 @NPP_S 		IS NULL		OR
				 U_OPLATA.NPP 	>= @NPP_S 
				)														AND
				(
				 @NPP_PO		IS NULL		OR
				 U_OPLATA.NPP 	<= @NPP_PO 
				)														AND
				(
				 @D_REFER_S			IS NULL		OR
				 U_OPLATA.D_REFER 	>= @D_REFER_S 
				)														AND
				(
				 @D_REFER_PO		IS NULL		OR
				 U_OPLATA.D_REFER 	<= @D_REFER_PO 
				)														AND
				(
				 @KODS			IS NULL		OR
				 U_OPLATA.KODS 	= @KODS 
				)														AND
				(
				 @KODS_IN_BANK			IS NULL		OR
				 U_OPLATA.KODS_IN_BANK	= @KODS_IN_BANK 
				)				
		GROUP	BY VALK
	) 
	AS ITOGI_OPLATA 
	GROUP BY KODVAL 
	ORDER BY KODVAL
GO

GRANT  EXECUTE  ON [dbo].[U_CRP_ITOGI_OPLATA]  TO [OPERS], [AUDITS]
GO

--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[U_CRP_SPR_CONFIRM_SELECT_ALL]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[U_CRP_SPR_CONFIRM_SELECT_ALL]
GO

CREATE  PROCEDURE [dbo].[U_CRP_SPR_CONFIRM_SELECT_ALL]
-- -----------------------------------------------------------------------------------------------------------------------------------------------
--	Список доступных пользователю ПД или Справок о подтверждающих документах
--	(для отчётов Список ПД и Список Справок о ПД, для отчёта Список ПД в паре с процедурой U_OTCHET_SPR_CONFIRM_ITOGI)
-- -----------------------------------------------------------------------------------------------------------------------------------------------
--	@USER_ID 		- идентификатор пользователя
--	@RESIDENT_ID 	- идентификатор Участника ВЭД, если передан NULL - по всем Участникам ВЭД
--	@FLAG_PD_ALL 	- = 0 - только ПД, включённые в справки (отчёт Список Справок о ПД), 1 - все ПД, включённые и не включённые в справки (отчёт Список ПД)
-- -----------------------------------------------------------------------------------------------------------------------------------------------
--	(Модификация	в версии 2.1.0)
-- -----------------------------------------------------------------------------------------------------------------------------------------------
(
	@USER_ID		AS VARCHAR(30),		
	@RESIDENT_ID 	AS INTEGER,
	@FLAG_PD_ALL	AS INTEGER	= 1
)
AS
	SET NOCOUNT ON

	SELECT	@RESIDENT_ID	= ISNULL(@RESIDENT_ID, 0)
	SELECT	@FLAG_PD_ALL	= ISNULL(@FLAG_PD_ALL, 1)

	SELECT	ISNULL(U_RESIDENTS.NAMER_S, U_RESIDENTS.NAMER) AS NAMER_MAIN,
			U_SPR_CONFIRM.*,
			U_PS.N_PS,
			SUBSTRING(U_PS.N_PS, 20, 1) AS TYPE_PS
	FROM	U_SPR_CONFIRM (NOLOCK) 
	INNER	JOIN U_USERS_RESIDENTS (NOLOCK) ON 
			U_USERS_RESIDENTS.RESIDENT_ID	= U_SPR_CONFIRM.RESIDENT_ID	AND
			U_USERS_RESIDENTS.USER_ID		= @USER_ID
	INNER	JOIN U_RESIDENTS (NOLOCK)	ON	
			U_RESIDENTS.RESIDENT_ID		= U_SPR_CONFIRM.RESIDENT_ID				AND
			(U_RESIDENTS.RESIDENT_ID	= @RESIDENT_ID	OR @RESIDENT_ID = 0 )	AND
			U_RESIDENTS.DEL_FLAG 		IS NULL		
	INNER	JOIN U_PS (NOLOCK) 	ON	
			U_PS.RESIDENT_ID	= U_SPR_CONFIRM.RESIDENT_ID	AND
			U_PS.PS_ID			= U_SPR_CONFIRM.PS_ID		AND
			U_PS.DEL_FLAG		IS NULL
	WHERE	U_SPR_CONFIRM.DEL_FLAG	IS NULL					AND
			(
				@FLAG_PD_ALL			= 1			OR
				U_SPR_CONFIRM.SPR_ID	IS NOT NULL
			)
	ORDER	BY U_RESIDENTS.NAMER, U_PS.N_PS, U_SPR_CONFIRM.SPR_ID, U_SPR_CONFIRM.NPP
GO

GRANT  EXECUTE  ON [dbo].[U_CRP_SPR_CONFIRM_SELECT_ALL]  TO [OPERS], [AUDITS]
GO

--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[U_OTCHET_SPR_CONFIRM_ITOGI]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[U_OTCHET_SPR_CONFIRM_ITOGI]
GO

CREATE PROCEDURE [dbo].[U_OTCHET_SPR_CONFIRM_ITOGI]
--	------------------------------------------------------------------------------------------------------------------------
--	Возвращает итоги по подтверждающим документам (доступным пользователю) по заданным критериям
--	(для отчёта Список ПД (подотчёт Итоги по ПД), в паре с процедурой U_CRP_SPR_CONFIRM_SELECT_ALL)
--	------------------------------------------------------------------------------------------------------------------------
--	@USER_ID 		-	идентификатор пользователя
--	@RESIDENT_ID 	-	идентификатор Участника ВЭД, если передан NULL - по всем Участникам ВЭД
--	@BANK_ID 		-	идентификатор Банка, если передан NULL - по всем Банкам
--	@TYPE_PS	 	-	тип ПС, если передан NULL - по всем типам ПС
--	@PS_ID 			-	идентификатор ПС, если передан NULL - по всем ПС
--	@KODD			-	код вида документа, если передан NULL - по всем кодам
--	@D_DOC_S		-	дата документа С, если передан NULL - нижняя граница интервала не задана
--	@D_DOC_PO		-	дата документа ПО, если передан NULL - верхняя граница интервала не задана
--	@VALP 			-	код валюты документа, если передан NULL - по всем кодам валют документа
--	@DIRECTION		-	детализация кодов вида документа 01, 02, 04, 14, если передан NULL - по всем значениям детализации
--	------------------------------------------------------------------------------------------------------------------------
--	(Модификация	в версии 2.1.0)
--	------------------------------------------------------------------------------------------------------------------------
(
	@USER_ID 		AS VARCHAR(30),
	@RESIDENT_ID 	AS INTEGER 			= NULL,
	@BANK_ID 		AS INTEGER 			= NULL,
	@TYPE_PS	    AS CHAR(1) 			= NULL,
	@PS_ID 			AS INTEGER 			= NULL,
	@KODD			AS CHAR(2) 			= NULL,
	@D_DOC_S		AS SMALLDATETIME 	= NULL,
	@D_DOC_PO		AS SMALLDATETIME 	= NULL,
	@VALP			AS CHAR(3) 			= NULL,
	@DIRECTION      AS CHAR(1) 			= NULL
)
AS
	SELECT	KODVAL,
			SUM(SUMMA_P) AS SUMMA_VALP,
			SUM(SUMMA_K) AS SUMMA_VALK
	FROM 
	(
		SELECT 	U_SPR_CONFIRM.VALP 					AS KODVAL,
				SUM(ISNULL(U_SPR_CONFIRM.SUMP, 0))	AS SUMMA_P,
				0 AS SUMMA_K
		FROM	U_SPR_CONFIRM (NOLOCK)
		INNER	JOIN U_USERS_RESIDENTS (NOLOCK) ON 
				U_USERS_RESIDENTS.RESIDENT_ID	= U_SPR_CONFIRM.RESIDENT_ID	AND
				U_USERS_RESIDENTS.USER_ID		= @USER_ID
		INNER	JOIN U_RESIDENTS (NOLOCK)	ON	
				U_RESIDENTS.RESIDENT_ID		= U_SPR_CONFIRM.RESIDENT_ID		AND
				U_RESIDENTS.DEL_FLAG 		IS NULL		
		INNER	JOIN U_PS	(NOLOCK)	ON
				U_PS.RESIDENT_ID	= U_SPR_CONFIRM.RESIDENT_ID		AND
				U_PS.PS_ID			= U_SPR_CONFIRM.PS_ID			AND
				U_PS.DEL_FLAG		IS NULL
		WHERE	U_SPR_CONFIRM.PR_NOT_CALC	IS NULL	 					AND
				U_SPR_CONFIRM.DEL_FLAG		IS NULL	 					AND
				(
					@RESIDENT_ID 				IS NULL			OR
					U_SPR_CONFIRM.RESIDENT_ID	= @RESIDENT_ID
				)														AND
				(
					@BANK_ID 				IS NULL			OR
					U_SPR_CONFIRM.BANK_ID	= @BANK_ID
				)														AND
				(
					@TYPE_PS 					IS NULL			OR
					SUBSTRING(U_PS.N_PS, 20, 1) = @TYPE_PS
				)														AND
				(
					@PS_ID				IS NULL			OR	
					U_SPR_CONFIRM.PS_ID	= @PS_ID
				)														AND
				(
				 @VALP					IS NULL		OR
				 U_SPR_CONFIRM.VALP 	= @VALP 
				)														AND
				(
				 @KODD					IS NULL		OR	
				 U_SPR_CONFIRM.KODD 	= @KODD 
				)														AND
				(
				 @D_DOC_S				IS NULL		OR
				 U_SPR_CONFIRM.D_DOC 	>= @D_DOC_S 
				)														AND
				(
				 @D_DOC_PO				IS NULL		OR
				 U_SPR_CONFIRM.D_DOC	<= @D_DOC_PO 
				)														AND
				( @DIRECTION			IS NULL		OR
				(
				 ( U_SPR_CONFIRM.KODD	<> '01' AND
				   U_SPR_CONFIRM.KODD	<> '02' AND
				   U_SPR_CONFIRM.KODD	<> '04' AND
				   U_SPR_CONFIRM.KODD	<> '14' 
				 )
				  OR
				 ( 
				  (
				   U_SPR_CONFIRM.KODD	= '01' OR
				   U_SPR_CONFIRM.KODD	= '02' OR
				   U_SPR_CONFIRM.KODD	= '04' OR
				   U_SPR_CONFIRM.KODD	= '14' 
				  )									AND
				  U_SPR_CONFIRM.DIRECTION	= @DIRECTION
				 )	
				 )
				)						
		GROUP	BY U_SPR_CONFIRM.VALP 
		UNION	ALL
		SELECT 	U_SPR_CONFIRM.VALK AS KODVAL,
				0 AS SUMMA_P,
				SUM(ISNULL(U_SPR_CONFIRM.SUMK, 0)) AS SUMMA_K
		FROM	U_SPR_CONFIRM (NOLOCK)
		INNER	JOIN U_USERS_RESIDENTS (NOLOCK) ON 
				U_USERS_RESIDENTS.RESIDENT_ID	= U_SPR_CONFIRM.RESIDENT_ID	AND
				U_USERS_RESIDENTS.USER_ID		= @USER_ID
		INNER	JOIN U_RESIDENTS (NOLOCK)	ON	
				U_RESIDENTS.RESIDENT_ID		= U_SPR_CONFIRM.RESIDENT_ID		AND
				U_RESIDENTS.DEL_FLAG 		IS NULL		
		INNER	JOIN U_PS	(NOLOCK)	ON
				U_PS.RESIDENT_ID	= U_SPR_CONFIRM.RESIDENT_ID		AND
				U_PS.PS_ID			= U_SPR_CONFIRM.PS_ID			AND
				U_PS.DEL_FLAG		IS NULL
		WHERE	U_SPR_CONFIRM.PR_NOT_CALC	IS NULL	 					AND
				U_SPR_CONFIRM.DEL_FLAG		IS NULL	 					AND
				(
					@RESIDENT_ID 				IS NULL			OR
					U_SPR_CONFIRM.RESIDENT_ID	= @RESIDENT_ID
				)														AND
				(
					@BANK_ID 				IS NULL			OR
					U_SPR_CONFIRM.BANK_ID	= @BANK_ID
				)														AND
				(
					@TYPE_PS 					IS NULL			OR
					SUBSTRING(U_PS.N_PS, 20, 1) = @TYPE_PS
				)														AND
				(
					@PS_ID				IS NULL			OR	
					U_SPR_CONFIRM.PS_ID	= @PS_ID
				)														AND

				(
				 	@VALP				IS NULL		OR
				 	U_SPR_CONFIRM.VALP 	= @VALP 
				)														AND
				(
				 @KODD					IS NULL		OR	
				 U_SPR_CONFIRM.KODD 	= @KODD 
				)														AND
				(
				 @D_DOC_S				IS NULL		OR
				 U_SPR_CONFIRM.D_DOC 	>= @D_DOC_S 
				)														AND
				(
				 @D_DOC_PO				IS NULL		OR
				 U_SPR_CONFIRM.D_DOC	<= @D_DOC_PO 
				)														AND
				( @DIRECTION			IS NULL		OR
				(
				 ( U_SPR_CONFIRM.KODD	<> '01' AND
				   U_SPR_CONFIRM.KODD	<> '02' AND
				   U_SPR_CONFIRM.KODD	<> '04' AND
				   U_SPR_CONFIRM.KODD	<> '14' 
				 )
				  OR
				 ( 
				  (
				   U_SPR_CONFIRM.KODD	= '01' OR
				   U_SPR_CONFIRM.KODD	= '02' OR
				   U_SPR_CONFIRM.KODD	= '04' OR
				   U_SPR_CONFIRM.KODD	= '14' 
				  )									AND
				  U_SPR_CONFIRM.DIRECTION	= @DIRECTION
				 )	
				 )
				)						
		GROUP	BY U_SPR_CONFIRM.VALK
	) 
	AS 		ITOGI_SPR_CONFIRM
	GROUP	BY KODVAL 
	ORDER	BY KODVAL
GO

GRANT  EXECUTE  ON [dbo].[U_OTCHET_SPR_CONFIRM_ITOGI]  TO [OPERS], [AUDITS]
GO

--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[U_CRP_STAT_ASVKB_ALL_SELECT]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[U_CRP_STAT_ASVKB_ALL_SELECT]
GO

CREATE PROCEDURE [dbo].[U_CRP_STAT_ASVKB_ALL_SELECT]
--	---------------------------------------------------------------------------------
-- 	Сводная статистика с АСВКБ (общая)
--	---------------------------------------------------------------------------------
--	(Модификация	в версии 2.1.0)
--	---------------------------------------------------------------------------------
(
	@RESIDENT_ID	AS INTEGER,
	@BANK_ID		AS INTEGER
)
AS
	SET NOCOUNT ON

	SELECT	ISNULL(U_RESIDENTS.NAMER_S, U_RESIDENTS.NAMER)	AS NAMER,
			ISNULL(U_BANKS.NAMEB_S, U_BANKS.NAMEB) 			AS NAMEB,
			CHECK_TIME,
			--	Количество Паспортов сделок
			COUNT_PS,
			(	SELECT	ISNULL(COUNT(*), 0)	AS 	U_COUNT_PS
				FROM	U_PS (NOLOCK)
				WHERE	U_PS.BANK_ID		=	@BANK_ID		AND
						U_PS.RESIDENT_ID	=	@RESIDENT_ID	AND
						U_PS.DEL_FLAG		IS	NULL			
			)	AS 	U_COUNT_PS,
			--	Количество Паспортов сделок (контракты)
			COUNT_PS_KONTR,
			(	SELECT	ISNULL(COUNT(PS_ID), 0)
				FROM	U_PS (NOLOCK)
				WHERE	U_PS.BANK_ID		= @BANK_ID	AND
						U_PS.RESIDENT_ID	= @RESIDENT_ID	AND	
						( SUBSTRING( U_PS.N_PS, 20, 1 ) BETWEEN '1' AND '4' OR SUBSTRING( U_PS.N_PS, 20, 1 ) = '9' )	AND
						U_PS.DEL_FLAG		IS NULL 
			)	AS	U_COUNT_PS_KONTR,
			--	Количество Паспортов сделок (кредиты)
			COUNT_PS_KRED,
			(	SELECT	ISNULL(COUNT(PS_ID), 0)
				FROM	U_PS (NOLOCK)
				WHERE	U_PS.BANK_ID		= @BANK_ID 						AND
						U_PS.RESIDENT_ID	= @RESIDENT_ID					AND	
						SUBSTRING( U_PS.N_PS, 20, 1 ) BETWEEN '5' AND '6'	AND
						U_PS.DEL_FLAG		IS NULL 
			)	AS	U_COUNT_PS_KRED,
			--	Количество Паспортов сделок (открытых)  
			COUNT_PS_OPEN,
			(	SELECT	ISNULL(COUNT(PS_ID), 0)
				FROM	U_PS (NOLOCK)
				WHERE	U_PS.BANK_ID		= @BANK_ID		AND
						U_PS.RESIDENT_ID	= @RESIDENT_ID	AND	
						U_PS.D_CLOSE		IS NULL			AND
						U_PS.DEL_FLAG		IS NULL 
			)	AS	U_COUNT_PS_OPEN,
			--	Количество Паспортов сделок (закрытых)
			COUNT_PS_CLOSE,
			(	SELECT	ISNULL(COUNT(PS_ID), 0)
				FROM	U_PS (NOLOCK)
				WHERE	U_PS.BANK_ID		= @BANK_ID		AND
						U_PS.RESIDENT_ID	= @RESIDENT_ID	AND	
						U_PS.D_CLOSE		IS NOT NULL		AND
						U_PS.DEL_FLAG IS NULL 
			)	AS	U_COUNT_PS_CLOSE,
			--	Количество Справок о подтверждающих документах
			COUNT_SPR_CONFIRM,
			(	SELECT ISNULL(COUNT(*), 0)
				FROM	(	SELECT	DISTINCT PS_ID, SPR_ID
							FROM	U_SPR_CONFIRM (NOLOCK)
							WHERE	U_SPR_CONFIRM.BANK_ID		= @BANK_ID 		AND
									U_SPR_CONFIRM.RESIDENT_ID 	= @RESIDENT_ID	AND 
									U_SPR_CONFIRM.SPR_ID		IS NOT NULL		AND
									U_SPR_CONFIRM.DEL_FLAG		IS NULL	
						)	AS U_SPR_CONFIRM_COUNT_SPR
			)	AS	U_COUNT_SPR_CONFIRM,
			--	Количество строк в Справках о подтверждающих документах (количество ПД)
			COUNT_SPR_CONFIRM_ROWS,
			(	SELECT	ISNULL(COUNT(*), 0)
				FROM	U_SPR_CONFIRM (NOLOCK)
				WHERE	U_SPR_CONFIRM.BANK_ID		=	@BANK_ID 		AND
						U_SPR_CONFIRM.RESIDENT_ID 	=	@RESIDENT_ID	AND 
						U_SPR_CONFIRM.DEL_FLAG		IS	NULL	
			)	AS	U_COUNT_SPR_CONFIRM_ROWS,
			--	Количество Справок о валютных операциях
			COUNT_SPR_VAL_OPR,
			(	SELECT ISNULL(COUNT(*), 0)
				FROM	(	SELECT	DISTINCT SPR_ID
							FROM	U_SPR_VAL_OPR (NOLOCK)
							WHERE	U_SPR_VAL_OPR.BANK_ID		= @BANK_ID 		AND
									U_SPR_VAL_OPR.RESIDENT_ID 	= @RESIDENT_ID	AND 
									U_SPR_VAL_OPR.DEL_FLAG		IS NULL	
						)	AS U_SPR_VAL_OPR_COUNT_SPR
				)	AS	U_COUNT_SPR_VAL_OPR,
			--	Количество строк в Справках о валютных операциях
			COUNT_SPR_VAL_OPR_ROWS,
			(	SELECT	ISNULL(COUNT(*), 0)
				FROM	U_SPR_VAL_OPR (NOLOCK)
				WHERE	U_SPR_VAL_OPR.BANK_ID		= @BANK_ID 		AND
						U_SPR_VAL_OPR.RESIDENT_ID 	= @RESIDENT_ID	AND 
						U_SPR_VAL_OPR.DEL_FLAG		IS NULL	
			)	AS	U_COUNT_SPR_VAL_OPR_ROWS,
			--	Количество Справок о поступлении валюты РФ
			COUNT_SPR_RUB,
			(	SELECT ISNULL(COUNT(*), 0)
				FROM	(	SELECT	DISTINCT SPR_ID
							FROM	U_SPR_RUB (NOLOCK)
							WHERE	U_SPR_RUB.BANK_ID		= @BANK_ID 		AND
									U_SPR_RUB.RESIDENT_ID 	= @RESIDENT_ID	AND 
									U_SPR_RUB.DEL_FLAG		IS NULL	
						)	AS U_SPR_RUB_COUNT_SPR
			)	AS	U_COUNT_SPR_RUB,
			--	Количество строк в Справках о поступлении валюты РФ
			COUNT_SPR_RUB_ROWS,
			(	SELECT	ISNULL(COUNT(*), 0)
				FROM	U_SPR_RUB (NOLOCK)
				WHERE	U_SPR_RUB.BANK_ID		= @BANK_ID 		AND
						U_SPR_RUB.RESIDENT_ID 	= @RESIDENT_ID	AND 
						U_SPR_RUB.DEL_FLAG		IS NULL	
			)	AS	U_COUNT_SPR_RUB_ROWS,
			--	Количество Платежей
			COUNT_OPLATA,
			(	SELECT	ISNULL(COUNT(OPL_ID), 0)
				FROM	U_OPLATA (NOLOCK)
				WHERE	U_OPLATA.BANK_ID		= @BANK_ID 		AND
						U_OPLATA.RESIDENT_ID	= @RESIDENT_ID	AND
						U_OPLATA.DEL_FLAG		IS NULL	
			)	AS	U_COUNT_OPLATA,
			--	Количество Платежей без ПС
			COUNT_OPLATA_NO_PS,
			(	SELECT	ISNULL(COUNT(OPL_ID), 0)
				FROM	U_OPLATA (NOLOCK)
				WHERE	U_OPLATA.BANK_ID  		= @BANK_ID 		AND
						U_OPLATA.RESIDENT_ID	= @RESIDENT_ID	AND
						U_OPLATA.PS_ID			IS NULL			AND
						U_OPLATA.DEL_FLAG		IS NULL	
			)	AS	U_COUNT_OPLATA_NO_PS,
			--	Количество Платежей по ПС
			COUNT_OPLATA_PS,
			(	SELECT	ISNULL(COUNT(OPL_ID), 0)
				FROM	U_OPLATA (NOLOCK)
				WHERE	U_OPLATA.BANK_ID  		= @BANK_ID 		AND
						U_OPLATA.RESIDENT_ID	= @RESIDENT_ID	AND
						U_OPLATA.PS_ID			IS NOT NULL		AND
						U_OPLATA.DEL_FLAG		IS NULL	
			)	AS	U_COUNT_OPLATA_PS,
			--	Количество Разрешений
			COUNT_RAZRESH,
			(	SELECT	ISNULL(COUNT(RAZR_ID), 0)
				FROM	U_RAZRESH (NOLOCK)
				INNER	JOIN	U_PS (NOLOCK) ON
						U_PS.BANK_ID		= @BANK_ID			AND
						U_PS.RESIDENT_ID 	= @RESIDENT_ID		AND	
						U_PS.PS_ID			= U_RAZRESH.PS_ID	AND
						U_PS.DEL_FLAG		IS NULL	
				WHERE	U_RAZRESH.RESIDENT_ID 	= @RESIDENT_ID	AND	
						U_RAZRESH.DEL_FLAG		IS NULL	
			)	AS	U_COUNT_RAZRESH,
			--	Количество Договоров + доп.соглашений
			COUNT_KONTRAKT,
			(	SELECT	ISNULL(COUNT(*), 0)
				FROM	U_DOGOVOR (NOLOCK)
				WHERE	U_DOGOVOR.RESIDENT_ID	= @RESIDENT_ID	AND	
						U_DOGOVOR.DEL_FLAG		IS NULL			AND
						EXISTS	(	SELECT	*
									FROM	U_PS (NOLOCK)
									WHERE	U_PS.BANK_ID		= @BANK_ID				AND
											U_PS.RESIDENT_ID	= U_DOGOVOR.RESIDENT_ID	AND
											U_PS.DOG_ID			= U_DOGOVOR.DOG_ID		AND
											U_PS.DEL_FLAG		IS NULL
								)
			)	AS	U_COUNT_KONTRAKT,
			--	Количество Займов
			COUNT_ZAIM,
			(	SELECT	ISNULL(COUNT(ZAIM_ID), 0)
				FROM	U_ZAIM (NOLOCK)
				INNER	JOIN	U_PS (NOLOCK) ON
						U_PS.BANK_ID		= @BANK_ID 		AND
						U_PS.RESIDENT_ID 	= @RESIDENT_ID	AND	
						U_PS.PS_ID			= U_ZAIM.PS_ID	AND
						U_PS.DEL_FLAG		IS NULL	
				WHERE	U_ZAIM.RESIDENT_ID	= @RESIDENT_ID	AND 	
						U_ZAIM.DEL_FLAG		IS NULL	
			)	AS	U_COUNT_ZAIM,
			--	Количество Кредитов в виде предварительной оплаты или отсрочки платежа
			COUNT_KREDIT,
			(	SELECT	ISNULL(COUNT(KR_ID), 0)
				FROM	U_KREDIT (NOLOCK)
				INNER	JOIN	U_PS (NOLOCK) ON
						U_PS.BANK_ID		= @BANK_ID 			AND
						U_PS.RESIDENT_ID 	= @RESIDENT_ID		AND	
						U_PS.PS_ID			= U_KREDIT.PS_ID	AND
						U_PS.DEL_FLAG		IS NULL	
				WHERE	U_KREDIT.RESIDENT_ID	= @RESIDENT_ID	AND	
						U_KREDIT.DEL_FLAG		IS NULL	
			)	AS	U_COUNT_KREDIT,
			--	Количество Обеспечений исполнения обязательств  		
			COUNT_OBESPECH,
			(	SELECT	ISNULL(COUNT(OB_ID), 0)
				FROM	U_OBESPECH (NOLOCK)
				INNER	JOIN	U_PS (NOLOCK) ON
						U_PS.BANK_ID		= @BANK_ID 			AND
					 	U_PS.RESIDENT_ID 	= @RESIDENT_ID		AND	
						U_PS.PS_ID			= U_OBESPECH.PS_ID	AND
						U_PS.DEL_FLAG		IS NULL	
				WHERE	U_OBESPECH.RESIDENT_ID	= @RESIDENT_ID	AND	
						U_OBESPECH.DEL_FLAG		IS NULL	
			)	AS	U_COUNT_OBESPECH,
			--	Количество Исполнений обязательств иным способом
			COUNT_ISPOLNEN,
			(	SELECT	ISNULL(COUNT(IS_ID), 0)
				FROM	U_ISPOLNEN (NOLOCK)
				INNER	JOIN	U_PS (NOLOCK) ON
						U_PS.BANK_ID		= @BANK_ID 			AND
					 	U_PS.RESIDENT_ID 	= @RESIDENT_ID		AND	
						U_PS.PS_ID			= U_ISPOLNEN.PS_ID	AND
						U_PS.DEL_FLAG		IS NULL	
				WHERE	U_ISPOLNEN.RESIDENT_ID	= @RESIDENT_ID	AND	
						U_ISPOLNEN.DEL_FLAG		IS NULL	
			)	AS	U_COUNT_ISPOLNEN,
			--	Количество траншей 
			COUNT_TRANSH,
			(	SELECT	ISNULL(COUNT(TRANSH_ID), 0)
				FROM	U_TRANSH (NOLOCK)
				INNER	JOIN	U_PS (NOLOCK) ON
						U_PS.BANK_ID		= @BANK_ID 			AND
					 	U_PS.RESIDENT_ID 	= @RESIDENT_ID		AND	
						U_PS.PS_ID			= U_TRANSH.PS_ID	AND
						U_PS.DEL_FLAG		IS NULL	
				WHERE	U_TRANSH.RESIDENT_ID	= @RESIDENT_ID	AND	
						U_TRANSH.DEL_FLAG		IS NULL	
			)	AS	U_COUNT_TRANSH,
			--	Количество графиков платежей 
			COUNT_GRAF_PLAT,
			(	SELECT	ISNULL(COUNT(GRAF_ID), 0)
				FROM	U_GRAF_PLAT (NOLOCK)
				INNER	JOIN	U_PS (NOLOCK) ON
						U_PS.BANK_ID		= @BANK_ID 			AND
					 	U_PS.RESIDENT_ID 	= @RESIDENT_ID		AND	
						U_PS.PS_ID			= U_GRAF_PLAT.PS_ID	AND
						U_PS.DEL_FLAG		IS NULL	
				WHERE	U_GRAF_PLAT.RESIDENT_ID	= @RESIDENT_ID	AND	
					U_GRAF_PLAT.DEL_FLAG		IS NULL	
			)	AS	U_COUNT_GRAF_PLAT,
			--	Количество графиков возвратов 
			COUNT_GRAF_VOZVR,
			(	SELECT	ISNULL(COUNT(GRAF_ID), 0)
				FROM	U_GRAF_VOZVR (NOLOCK)
				INNER	JOIN	U_PS (NOLOCK) ON
						U_PS.BANK_ID		= @BANK_ID 				AND
					 	U_PS.RESIDENT_ID 	= @RESIDENT_ID			AND	
						U_PS.PS_ID			= U_GRAF_VOZVR.PS_ID	AND
						U_PS.DEL_FLAG		IS NULL	
				WHERE	U_GRAF_VOZVR.RESIDENT_ID	= @RESIDENT_ID	AND 
						U_GRAF_VOZVR.DEL_FLAG		IS NULL	
			)	AS	U_COUNT_GRAF_VOZVR,
			--	Количество изменений задолженности 
			COUNT_PS_IZMEN_ZADOL,
			(	SELECT	ISNULL(COUNT(IZM_ID), 0)
				FROM	U_PS_IZMEN_ZADOL (NOLOCK)
				INNER	JOIN	U_PS (NOLOCK) ON
						U_PS.BANK_ID			= @BANK_ID 					AND
					 	U_PS.RESIDENT_ID 		= @RESIDENT_ID				AND	
						U_PS.PS_ID				= U_PS_IZMEN_ZADOL.PS_ID	AND
						U_PS.DEL_FLAG			IS NULL	
				WHERE	U_PS_IZMEN_ZADOL.RESIDENT_ID	= @RESIDENT_ID		AND 
						U_PS_IZMEN_ZADOL.DEL_FLAG		IS NULL	
			)	AS	U_COUNT_PS_IZMEN_ZADOL
	FROM	U_STAT_ASVKB_ALL (NOLOCK)
	INNER	JOIN	U_RESIDENTS (NOLOCK) ON
			U_RESIDENTS.RESIDENT_ID	= U_STAT_ASVKB_ALL.RESIDENT_ID	AND
			U_RESIDENTS.DEL_FLAG	IS NULL	
	INNER	JOIN	U_BANKS (NOLOCK) ON
			U_BANKS.BANK_ID		= U_STAT_ASVKB_ALL.BANK_ID		AND
			U_BANKS.DEL_FLAG	IS NULL	
	WHERE	U_STAT_ASVKB_ALL.BANK_ID		= @BANK_ID			AND
			U_STAT_ASVKB_ALL.RESIDENT_ID	= @RESIDENT_ID		AND
			U_STAT_ASVKB_ALL.CHECK_TIME		=	(	SELECT	MAX(CHECK_TIME) 
													FROM	U_STAT_ASVKB_ALL (NOLOCK)
													WHERE	U_STAT_ASVKB_ALL.BANK_ID		= @BANK_ID		AND
															U_STAT_ASVKB_ALL.RESIDENT_ID	= @RESIDENT_ID	
												)
GO
	
GRANT  EXECUTE  ON [dbo].[U_CRP_STAT_ASVKB_ALL_SELECT]  TO [OPERS], [AUDITS]
GO

--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[U_CRP_CHECK_SROK_IMPORT_DOGOVOR]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[U_CRP_CHECK_SROK_IMPORT_DOGOVOR]
GO

CREATE PROCEDURE [dbo].[U_CRP_CHECK_SROK_IMPORT_DOGOVOR]
--	-------------------------------------------------------------------------------------------------------------------------
--	Выборка списка Платежей (импорт товаров и импорт услуг) по Договорам (контракты)
--  для отчёта "Контроль контрактных сроков по Договорам (контракты): импорт товаров и импорт услуг" 
--	-------------------------------------------------------------------------------------------------------------------------
--  В отчёт попадают Договоры (контракты): 
--	1. Платежи которых имеют контрактный срок в днях на одном из следующих уровней 
--	- контрактный срок по Платежу;
--	- контрактный срок по ПС (п.6.2);
--	- контрактный срок по Договору.
--	
--	@USER_ID		- идентификатор Пользователя
--	@RESIDENT_ID 	- интендификатор Участника ВЭД (если = 0, то все Участники ВЭД)
--	@DOG_ID 		- интендификатор Договора ( если = 0, то все Договоры (контракты))	
--	@D_END_BEG		- нижняя граница диапазона дат окончания исполнения обязательств по контракту	
--	@D_END_END		- верхняя граница диапазона дат окончания исполнения обязательств по контракту
--	@OST_NOTRASPRED - нераспределённый остаток по платежу (>) (0 - показать с ненулевым остатком, -1 - показать все)
--	@DATE_END_SROK	- дата истечения контрактного срока (<=) (NULL - показать с истекшим сроком, '2079-01-01' - показать все)
--	-------------------------------------------------------------------------------------------------------------------------
--	(Модификация	в версии 2.1.0)
--	-------------------------------------------------------------------------------------------------------------------------
(
	@USER_ID		AS VARCHAR(30),
	@RESIDENT_ID	AS INTEGER,
	@DOG_ID			AS INTEGER,
	@D_END_BEG		AS DATETIME			=	NULL,
	@D_END_END		AS DATETIME			=	NULL,
	@OST_NOTRASPRED	AS INTEGER,
	@DATE_END_SROK	AS SMALLDATETIME
)
AS
	SET NOCOUNT ON

	SELECT	@RESIDENT_ID	= 	ISNULL(@RESIDENT_ID, 0)
	SELECT	@DOG_ID 		= 	ISNULL(@DOG_ID , 0)
	SELECT	@OST_NOTRASPRED	= 	ISNULL(@OST_NOTRASPRED , 0)
	SELECT	@DATE_END_SROK 	= 	ISNULL(@DATE_END_SROK , DATEADD( dd, DATEDIFF(dd, 0, GETDATE()), 0))

	--	1.
	--	Выбираем Платежи Импорт товаров и Импорт услуг, ссылка на ПС, распределение на ПД
	--
	SELECT	ISNULL(U_RESIDENTS.NAMER_S, U_RESIDENTS.NAMER)							AS NAMER,
			U_DOGOVOR.RESIDENT_ID, 
			U_DOGOVOR.DOG_ID,	
			U_DOGOVOR.DOG_NPP,	
			U_DOGOVOR.N_KONTR,
			U_DOGOVOR.D_KONTR,
			U_IN_PART.NAMEP,
			U_DOGOVOR.N_DOPSOGL,
			U_DOGOVOR.KVALK,	
			U_DOGOVOR.D_END,	
			--	Дата завершения исполнения обязательств по Договору 
			[dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID)		AS D_END_FOR_DOG_ID,
			ISNULL(U_DOGOVOR.KONTR_SROK, '-')										AS KONTR_SROK_DOG,
			U_PS.N_PS																AS N_PS,		
			ISNULL(U_PS.F1_R62_SROK, '-')											AS F1_R62_SROK,
			U_OPLATA.OPL_ID, 	
			U_OPLATA.NPP, 
			U_OPLATA.D_REFER, 
			U_OPLATA.N_REFER, 
			U_OPLATA.KODOP, 
			U_OPLATA.TYPE, 
			U_OPLATA.VALP,
			U_OPLATA.SUMP,
			U_OPLATA.VALK, 
			U_OPLATA.SUMK, 
			ISNULL(U_OPLATA.KONTR_SROK, '-')										AS KONTR_SROK, 
			--[dbo].[U_NEAR_WORK_DAY]( DATEADD( dd, CONVERT( INTEGER, ISNULL(U_PS.F1_R62_SROK, 0)), U_OPLATA.D_REFER ))	
			--DATEADD(dd, CONVERT(INTEGER, ISNULL(U_PS.F1_R62_SROK, 0)), U_OPLATA.D_REFER)
			-- определение даты истечения контрактного срока по Платежу (UDF)
			[dbo].[U_OPLATA_CALC_DATE_KONTR_SROK](U_OPLATA.RESIDENT_ID, U_OPLATA.OPL_ID)
			AS	DATE_SROK,

			--DATEDIFF(dd, [dbo].[U_NEAR_WORK_DAY]( DATEADD( dd, CONVERT( INTEGER, ISNULL(U_PS.F1_R62_SROK, 0)), U_OPLATA.D_REFER )), U_SPR_CONFIRM.D_DOC )
			--DATEDIFF(dd, DATEADD(dd, CONVERT(INTEGER, ISNULL(U_PS.F1_R62_SROK, 0)), U_OPLATA.D_REFER), U_SPR_CONFIRM.D_DOC)
			-- определение разницы даты ПД с датой истечения контрактного срока по Платежу (UDF)
			DATEDIFF(dd, [dbo].[U_OPLATA_CALC_DATE_KONTR_SROK](U_OPLATA.RESIDENT_ID, U_OPLATA.OPL_ID), U_SPR_CONFIRM.D_DOC)
			AS	DAYS_P,

			(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID) 
			+ 
			(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND (R.OPL_ID = U_OPLATA.OPL_ID OR R.OPL_ID2 = U_OPLATA.OPL_ID)) 
			AS SUM_RASPR_ALL,

			U_OPLATA.SUMK - 
			(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID) 
			- 
			(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND (R.OPL_ID = U_OPLATA.OPL_ID OR R.OPL_ID2 = U_OPLATA.OPL_ID)) 
			AS	SUM_OST,

			'ПД        : ' + CONVERT( VARCHAR(15), U_SPR_CONFIRM.SPR_ID ) + ' ( ' + + CONVERT( VARCHAR(15), U_SPR_CONFIRM.NPP ) + ' )'	
			AS	INFO_PRIM,
			U_SPR_CONFIRM.KODD					AS	INFO_KODD,
			U_SPR_CONFIRM.D_DOC 				AS	INFO_D_DOC,
			U_SPR_CONFIRM.N_GTD 				AS	INFO_N_DOC,
			U_SPR_CONFIRM.SUMP					AS	INFO_SUMP,
			U_SPR_CONFIRM.SUMK					AS	INFO_SUMK,
			U_RASPRED_OPLATA_SPR_CONFIRM.SUMK	AS	INFO_RASPRED_SUMK,
			U_RASPRED_OPLATA_SPR_CONFIRM.D_KOR	AS	INFO_RASPRED_DATE
	FROM	U_OPLATA (NOLOCK)
	INNER	JOIN	U_USERS_RESIDENTS (NOLOCK) ON 
			U_USERS_RESIDENTS.RESIDENT_ID	= U_OPLATA.RESIDENT_ID	AND
			U_USERS_RESIDENTS.USER_ID		= @USER_ID
	INNER	JOIN 	U_RESIDENTS (NOLOCK) ON
			U_RESIDENTS.RESIDENT_ID			= U_OPLATA.RESIDENT_ID	AND
			U_RESIDENTS.DEL_FLAG			IS NULL
	INNER	JOIN	U_PS (NOLOCK) ON
			U_PS.RESIDENT_ID				= U_OPLATA.RESIDENT_ID	AND
			U_PS.PS_ID						= U_OPLATA.PS_ID		AND
			U_PS.DEL_FLAG					IS NULL					
	INNER	JOIN	U_DOGOVOR (NOLOCK) ON
			U_DOGOVOR.RESIDENT_ID			= U_PS.RESIDENT_ID		AND
			U_DOGOVOR.DOG_ID				= U_PS.DOG_ID			AND
			U_DOGOVOR.DOG_NPP				= U_PS.DOG_NPP			AND
			U_DOGOVOR.DEL_FLAG				IS NULL			
	INNER	JOIN U_IN_PART (NOLOCK) ON	
			U_IN_PART.PARTNER_ID			= U_DOGOVOR.PARTNER_ID	AND
			U_IN_PART.DEL_FLAG				IS NULL		
	LEFT	OUTER JOIN	U_RASPRED_OPLATA_SPR_CONFIRM (NOLOCK) ON
			U_RASPRED_OPLATA_SPR_CONFIRM.RESIDENT_ID	= U_OPLATA.RESIDENT_ID	AND 
			U_RASPRED_OPLATA_SPR_CONFIRM.OPL_ID			= U_OPLATA.OPL_ID 		
	LEFT	OUTER JOIN	U_SPR_CONFIRM (NOLOCK) ON
			U_SPR_CONFIRM.RESIDENT_ID 		= U_RASPRED_OPLATA_SPR_CONFIRM.RESIDENT_ID	AND 
			U_SPR_CONFIRM.PD_ID 			= U_RASPRED_OPLATA_SPR_CONFIRM.PD_ID	
	WHERE 	U_OPLATA.DEL_FLAG		IS NULL							AND
			(
				-- в самом Платеже указан контрактный срок в днях
				U_OPLATA.KONTR_SROK		<> '0000'	AND 
				U_OPLATA.KONTR_SROK		<> 'НДАН'	AND
				U_OPLATA.KONTR_SROK		<> 'СВТР'	AND
				U_OPLATA.KONTR_SROK		IS NOT NULL
			OR
				-- срок по ПС указан в днях
				U_PS.F1_R62_SROK		<> '0000'	AND	
				U_PS.F1_R62_SROK		<> 'НДАН'	AND
				U_PS.F1_R62_SROK		<> 'СВТР'	AND
				U_PS.F1_R62_SROK		IS NOT NULL		
			OR
				-- срок по Договору указан в днях 
				U_DOGOVOR.KONTR_SROK	<> '0000'	AND	
				U_DOGOVOR.KONTR_SROK	<> 'НДАН'	AND
				U_DOGOVOR.KONTR_SROK	<> 'СВТР'	AND
				U_DOGOVOR.KONTR_SROK	IS NOT NULL		
			)														AND	
			--DATEADD( dd, CONVERT(INTEGER, ISNULL(U_PS.F1_R62_SROK, 0)), U_OPLATA.D_REFER) <= @DATE_END_SROK	AND
			-- определение даты истечения контрактного срока по Платежу (UDF)
			[dbo].[U_OPLATA_CALC_DATE_KONTR_SROK](U_OPLATA.RESIDENT_ID, U_OPLATA.OPL_ID)	<= @DATE_END_SROK	AND
			U_OPLATA.SUMK -
			(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID) 
			- 
			(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND (R.OPL_ID = U_OPLATA.OPL_ID OR R.OPL_ID2 = U_OPLATA.OPL_ID)) > @OST_NOTRASPRED AND
			( 	-- Импорт товаров
				( U_OPLATA.DIRECTION = '2'	AND
			        ( ( U_OPLATA.KODOP >= '11010'	AND U_OPLATA.KODOP <= '11060' ) 
				OR
			         ( U_OPLATA.KODOP = '35020'	AND U_OPLATA.TYPE = '2' ) )
				)	
			OR	-- Импорт услуг
				( U_OPLATA.DIRECTION = '2'	AND
			       	 ( ( U_OPLATA.KODOP >= '21010'	AND U_OPLATA.KODOP <= '21040' ) 
				OR
			         ( U_OPLATA.KODOP = '35020'	AND U_OPLATA.TYPE = '4' ) )
				)	
			)														AND
			-- отбор по Участнику ВЭД
			(
				@RESIDENT_ID			= 0	OR
				U_OPLATA.RESIDENT_ID	= @RESIDENT_ID
			)														AND
			-- Платёжи по ПС
			U_OPLATA.PS_ID				IS NOT NULL					AND
			-- отбор по Договору (контракту)
			(
				@DOG_ID					= 0	OR
				U_DOGOVOR.DOG_ID		= @DOG_ID
			)														AND
			-- отбор по диапазону Даты завершения исполнения обязательств
			(	@D_END_BEG	IS NULL		OR
				ISNULL( [dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID), CONVERT(DATETIME, '30000606' ))	>= ISNULL(@D_END_BEG, CONVERT(DATETIME, '19000101'))
			)	AND
			(	@D_END_END	IS NULL		OR
				ISNULL( [dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID), CONVERT(DATETIME, '30000606' ))	<= ISNULL(@D_END_END, CONVERT(DATETIME, '30000606'))	
			)	

	UNION
	--	2.
	--	Выбираем Платежи Импорт товаров и Импорт услуг, ссылка на Договор (контракт), распределение на ПД
	--
	SELECT	ISNULL(U_RESIDENTS.NAMER_S, U_RESIDENTS.NAMER)							AS NAMER,
			U_DOGOVOR.RESIDENT_ID, 
			U_DOGOVOR.DOG_ID,	
			U_DOGOVOR.DOG_NPP,	
			U_DOGOVOR.N_KONTR,
			U_DOGOVOR.D_KONTR,
			U_IN_PART.NAMEP,
			U_DOGOVOR.N_DOPSOGL,
			U_DOGOVOR.KVALK,	
			U_DOGOVOR.D_END,	
			--	Дата завершения исполнения обязательств по Договору 
			[dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID)		AS D_END_FOR_DOG_ID,
			ISNULL(U_DOGOVOR.KONTR_SROK, '-')										AS KONTR_SROK_DOG,
			NULL																	AS N_PS,	
			NULL																	AS F1_R62_SROK,
			U_OPLATA.OPL_ID, 	
			U_OPLATA.NPP, 
			U_OPLATA.D_REFER, 
			U_OPLATA.N_REFER, 
			U_OPLATA.KODOP, 
			U_OPLATA.TYPE, 
			U_OPLATA.VALP,
			U_OPLATA.SUMP,
			U_OPLATA.VALK, 
			U_OPLATA.SUMK, 
			ISNULL(U_OPLATA.KONTR_SROK, '-')										AS KONTR_SROK, 
			--[dbo].[U_NEAR_WORK_DAY]( DATEADD( dd, CONVERT( INTEGER, ISNULL(U_PS.F1_R62_SROK, 0)), U_OPLATA.D_REFER ))	
			--DATEADD(dd, CONVERT(INTEGER, ISNULL(U_PS.F1_R62_SROK, 0)), U_OPLATA.D_REFER)
			-- определение даты истечения контрактного срока по Платежу (UDF)
			[dbo].[U_OPLATA_CALC_DATE_KONTR_SROK](U_OPLATA.RESIDENT_ID, U_OPLATA.OPL_ID)
			AS	DATE_SROK,

			--DATEDIFF(dd, [dbo].[U_NEAR_WORK_DAY]( DATEADD( dd, CONVERT( INTEGER, ISNULL(U_PS.F1_R62_SROK, 0)), U_OPLATA.D_REFER )), U_SPR_CONFIRM.D_DOC )
			--DATEDIFF(dd, DATEADD(dd, CONVERT(INTEGER, ISNULL(U_PS.F1_R62_SROK, 0)), U_OPLATA.D_REFER), U_SPR_CONFIRM.D_DOC)
			-- определение разницы даты ПД с датой истечения контрактного срока по Платежу (UDF)
			DATEDIFF(dd, [dbo].[U_OPLATA_CALC_DATE_KONTR_SROK](U_OPLATA.RESIDENT_ID, U_OPLATA.OPL_ID), U_SPR_CONFIRM.D_DOC)
			AS	DAYS_P,

			(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID) 
			+ 
			(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND (R.OPL_ID = U_OPLATA.OPL_ID OR R.OPL_ID2 = U_OPLATA.OPL_ID)) 
			AS SUM_RASPR_ALL,

			U_OPLATA.SUMK - 
			(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID) 
			- 
			(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND (R.OPL_ID = U_OPLATA.OPL_ID OR R.OPL_ID2 = U_OPLATA.OPL_ID)) 
			AS	SUM_OST,

			'ПД        : ' + CONVERT( VARCHAR(15), U_SPR_CONFIRM.SPR_ID ) + ' ( ' + + CONVERT( VARCHAR(15), U_SPR_CONFIRM.NPP ) + ' )'	
			AS	INFO_PRIM,
			U_SPR_CONFIRM.KODD					AS	INFO_KODD,
			U_SPR_CONFIRM.D_DOC 				AS	INFO_D_DOC,
			U_SPR_CONFIRM.N_GTD 				AS	INFO_N_DOC,
			U_SPR_CONFIRM.SUMP					AS	INFO_SUMP,
			U_SPR_CONFIRM.SUMK					AS	INFO_SUMK,
			U_RASPRED_OPLATA_SPR_CONFIRM.SUMK	AS	INFO_RASPRED_SUMK,
			U_RASPRED_OPLATA_SPR_CONFIRM.D_KOR	AS	INFO_RASPRED_DATE
	FROM	U_OPLATA (NOLOCK)
	INNER	JOIN	U_USERS_RESIDENTS (NOLOCK) ON 
			U_USERS_RESIDENTS.RESIDENT_ID	= U_OPLATA.RESIDENT_ID	AND
			U_USERS_RESIDENTS.USER_ID		= @USER_ID
	INNER	JOIN 	U_RESIDENTS (NOLOCK) ON
			U_RESIDENTS.RESIDENT_ID			= U_OPLATA.RESIDENT_ID	AND
			U_RESIDENTS.DEL_FLAG			IS NULL
	INNER	JOIN	U_DOGOVOR (NOLOCK) ON
			U_DOGOVOR.RESIDENT_ID			= U_OPLATA.RESIDENT_ID	AND
			U_DOGOVOR.DOG_ID				= U_OPLATA.DOG_ID		AND
			U_DOGOVOR.DOG_NPP				= U_OPLATA.DOG_NPP		AND
			U_DOGOVOR.DEL_FLAG				IS NULL		
	INNER	JOIN U_IN_PART (NOLOCK) ON	
			U_IN_PART.PARTNER_ID			= U_DOGOVOR.PARTNER_ID	AND
			U_IN_PART.DEL_FLAG				IS NULL		
	LEFT	OUTER JOIN	U_RASPRED_OPLATA_SPR_CONFIRM (NOLOCK) ON
			U_RASPRED_OPLATA_SPR_CONFIRM.RESIDENT_ID	= U_OPLATA.RESIDENT_ID	AND 
			U_RASPRED_OPLATA_SPR_CONFIRM.OPL_ID			= U_OPLATA.OPL_ID 		
	LEFT	OUTER JOIN	U_SPR_CONFIRM (NOLOCK) ON
			U_SPR_CONFIRM.RESIDENT_ID 		= U_RASPRED_OPLATA_SPR_CONFIRM.RESIDENT_ID	AND 
			U_SPR_CONFIRM.PD_ID 			= U_RASPRED_OPLATA_SPR_CONFIRM.PD_ID	
	WHERE 	U_OPLATA.DEL_FLAG		IS NULL							AND
			(
				-- в самом Платеже указан контрактный срок в днях
				U_OPLATA.KONTR_SROK		<> '0000'	AND 
				U_OPLATA.KONTR_SROK		<> 'НДАН'	AND
				U_OPLATA.KONTR_SROK		<> 'СВТР'	AND
				U_OPLATA.KONTR_SROK		IS NOT NULL
			OR
				-- срок по Договору указан в днях 
				U_DOGOVOR.KONTR_SROK	<> '0000'	AND	
				U_DOGOVOR.KONTR_SROK	<> 'НДАН'	AND
				U_DOGOVOR.KONTR_SROK	<> 'СВТР'	AND
				U_DOGOVOR.KONTR_SROK	IS NOT NULL		
			)														AND	
			--DATEADD( dd, CONVERT(INTEGER, ISNULL(U_PS.F1_R62_SROK, 0)), U_OPLATA.D_REFER) <= @DATE_END_SROK	AND
			-- определение даты истечения контрактного срока по Платежу (UDF)
			[dbo].[U_OPLATA_CALC_DATE_KONTR_SROK](U_OPLATA.RESIDENT_ID, U_OPLATA.OPL_ID)	<= @DATE_END_SROK	AND
			U_OPLATA.SUMK -
			(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID) 
			- 
			(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND (R.OPL_ID = U_OPLATA.OPL_ID OR R.OPL_ID2 = U_OPLATA.OPL_ID)) > @OST_NOTRASPRED AND
			( 	-- Импорт товаров
				( U_OPLATA.DIRECTION = '2'	AND
			        ( ( U_OPLATA.KODOP >= '11010'	AND U_OPLATA.KODOP <= '11060' ) 
				OR
			         ( U_OPLATA.KODOP = '35020'	AND U_OPLATA.TYPE = '2' ) )
				)	
			OR	-- Импорт услуг
				( U_OPLATA.DIRECTION = '2'	AND
			       	 ( ( U_OPLATA.KODOP >= '21010'	AND U_OPLATA.KODOP <= '21040' ) 
				OR
			         ( U_OPLATA.KODOP = '35020'	AND U_OPLATA.TYPE = '4' ) )
				)	
			)														AND
			-- отбор по Участнику ВЭД
			(
				@RESIDENT_ID			= 0	OR
				U_OPLATA.RESIDENT_ID	= @RESIDENT_ID
			)														AND
			-- Платёжи по Договору (контракту) (без ПС)
			U_OPLATA.PS_ID				IS NULL						AND
			U_OPLATA.DOG_ID				IS NOT NULL					AND
			-- отбор по Договору (контракту)
			(
				@DOG_ID					= 0	OR
				U_DOGOVOR.DOG_ID		= @DOG_ID
			)														AND
			-- отбор по диапазону Даты завершения исполнения обязательств
			(	@D_END_BEG	IS NULL		OR
				ISNULL( [dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID), CONVERT(DATETIME, '30000606' ))	>= ISNULL(@D_END_BEG, CONVERT(DATETIME, '19000101'))
			)	AND
			(	@D_END_END	IS NULL		OR
				ISNULL( [dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID), CONVERT(DATETIME, '30000606' ))	<= ISNULL(@D_END_END, CONVERT(DATETIME, '30000606'))	
			)	

	UNION
	--	3.
	--	Выбираем Платежи Импорт товаров и Импорт услуг, ссылка на ПС, распределение на Возвраты
	--
	SELECT	ISNULL(U_RESIDENTS.NAMER_S, U_RESIDENTS.NAMER)							AS NAMER,
			U_DOGOVOR.RESIDENT_ID, 
			U_DOGOVOR.DOG_ID,	
			U_DOGOVOR.DOG_NPP,	
			U_DOGOVOR.N_KONTR,
			U_DOGOVOR.D_KONTR,
			U_IN_PART.NAMEP,
			U_DOGOVOR.N_DOPSOGL,
			U_DOGOVOR.KVALK,	
			U_DOGOVOR.D_END,	
			--	Дата завершения исполнения обязательств по Договору 
			[dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID)		AS D_END_FOR_DOG_ID,
			ISNULL(U_DOGOVOR.KONTR_SROK, '-')										AS KONTR_SROK_DOG,
			U_PS.N_PS																AS N_PS,		
			ISNULL(U_PS.F1_R62_SROK, '-')											AS F1_R62_SROK,
			U_OPLATA.OPL_ID, 
			U_OPLATA.NPP, 
			U_OPLATA.D_REFER, 
			U_OPLATA.N_REFER, 
			U_OPLATA.KODOP, 
			U_OPLATA.TYPE, 
			U_OPLATA.VALP,
			U_OPLATA.SUMP,
			U_OPLATA.VALK, 
			U_OPLATA.SUMK, 
			ISNULL(U_OPLATA.KONTR_SROK, '-')										AS KONTR_SROK, 
			--[dbo].[U_NEAR_WORK_DAY]( DATEADD( dd, CONVERT( INTEGER, ISNULL(U_PS.F1_R62_SROK, 0)), U_OPLATA.D_REFER ))	
			--DATEADD(dd, CONVERT(INTEGER, ISNULL(U_PS.F1_R62_SROK, 0)), U_OPLATA.D_REFER)
			-- определение даты истечения контрактного срока по Платежу (UDF)
			[dbo].[U_OPLATA_CALC_DATE_KONTR_SROK](U_OPLATA.RESIDENT_ID, U_OPLATA.OPL_ID)
			AS	DATE_SROK,
			NULL						AS	DAYS_P,
			(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID) 
			+ 
			(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND (R.OPL_ID = U_OPLATA.OPL_ID OR R.OPL_ID2 = U_OPLATA.OPL_ID)) 
			AS	SUM_RASPR_ALL,
			U_OPLATA.SUMK - 
			(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID) 
			- 
			(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND (R.OPL_ID = U_OPLATA.OPL_ID OR R.OPL_ID2 = U_OPLATA.OPL_ID)) 
			AS	SUM_OST,
			'Возврат: '	+ 	CONVERT( VARCHAR(15), U_OPLATA2.NPP)
			AS	INFO_PRIM,
			U_OPLATA2.KODOP					AS	INFO_KODD,
			U_OPLATA2.D_REFER 				AS	INFO_D_DOC,
			U_OPLATA2.N_REFER 				AS	INFO_N_DOC,
			U_OPLATA2.SUMP					AS	INFO_SUMP,
			U_OPLATA2.SUMK					AS	INFO_SUMK,
			U_RASPRED_OPLATA_OPLATA.SUMK	AS	INFO_RASPRED_SUMK,
			U_RASPRED_OPLATA_OPLATA.D_KOR	AS	INFO_RASPRED_DATE
	FROM	U_OPLATA (NOLOCK)
	INNER	JOIN	U_USERS_RESIDENTS (NOLOCK) ON 
			U_USERS_RESIDENTS.RESIDENT_ID	= U_OPLATA.RESIDENT_ID	AND
			U_USERS_RESIDENTS.USER_ID		= @USER_ID
	INNER	JOIN	U_RESIDENTS (NOLOCK) ON
			U_RESIDENTS.RESIDENT_ID			= U_OPLATA.RESIDENT_ID	AND
			U_RESIDENTS.DEL_FLAG			IS NULL
	INNER	JOIN	U_PS	(NOLOCK) ON
			U_PS.RESIDENT_ID				= U_OPLATA.RESIDENT_ID	AND
			U_PS.PS_ID						= U_OPLATA.PS_ID		AND
			U_PS.DEL_FLAG					IS NULL
	INNER	JOIN	U_DOGOVOR (NOLOCK) ON
			U_DOGOVOR.RESIDENT_ID			= U_PS.RESIDENT_ID		AND
			U_DOGOVOR.DOG_ID				= U_PS.DOG_ID			AND
			U_DOGOVOR.DOG_NPP				= U_PS.DOG_NPP			AND
			U_DOGOVOR.DEL_FLAG				IS NULL		
	INNER	JOIN U_IN_PART (NOLOCK) ON	
			U_IN_PART.PARTNER_ID			= U_DOGOVOR.PARTNER_ID	AND
			U_IN_PART.DEL_FLAG				IS NULL		
	LEFT	OUTER JOIN	U_RASPRED_OPLATA_OPLATA (NOLOCK)	ON
			U_RASPRED_OPLATA_OPLATA.RESIDENT_ID	= U_OPLATA.RESIDENT_ID	AND 
			U_RASPRED_OPLATA_OPLATA.OPL_ID2 	= U_OPLATA.OPL_ID		
	LEFT	OUTER JOIN	U_OPLATA AS U_OPLATA2 (NOLOCK)	ON
			U_OPLATA2.RESIDENT_ID 			= U_RASPRED_OPLATA_OPLATA.RESIDENT_ID	AND 
			U_OPLATA2.OPL_ID 				= U_RASPRED_OPLATA_OPLATA.OPL_ID		
	WHERE 	U_OPLATA.DEL_FLAG		IS NULL							AND
			(
				-- в самом Платеже указан контрактный срок в днях
				U_OPLATA.KONTR_SROK		<> '0000'	AND 
				U_OPLATA.KONTR_SROK		<> 'НДАН'	AND
				U_OPLATA.KONTR_SROK		<> 'СВТР'	AND
				U_OPLATA.KONTR_SROK		IS NOT NULL
			OR
				-- срок по ПС указан в днях
				U_PS.F1_R62_SROK		<> '0000'	AND	
				U_PS.F1_R62_SROK		<> 'НДАН'	AND
				U_PS.F1_R62_SROK		<> 'СВТР'	AND
				U_PS.F1_R62_SROK		IS NOT NULL		
			OR
				-- срок по Договору указан в днях 
				U_DOGOVOR.KONTR_SROK	<> '0000'	AND	
				U_DOGOVOR.KONTR_SROK	<> 'НДАН'	AND
				U_DOGOVOR.KONTR_SROK	<> 'СВТР'	AND
				U_DOGOVOR.KONTR_SROK	IS NOT NULL		
			)														AND	
			--DATEADD( dd, CONVERT(INTEGER, ISNULL(U_PS.F1_R62_SROK, 0)), U_OPLATA.D_REFER) <= @DATE_END_SROK	AND
			-- определение даты истечения контрактного срока по Платежу (UDF)
			[dbo].[U_OPLATA_CALC_DATE_KONTR_SROK](U_OPLATA.RESIDENT_ID, U_OPLATA.OPL_ID)	<= @DATE_END_SROK	AND
			U_OPLATA.SUMK -
			(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID) 
			- 
			(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND (R.OPL_ID = U_OPLATA.OPL_ID OR R.OPL_ID2 = U_OPLATA.OPL_ID)) > @OST_NOTRASPRED AND
			(	-- Импорт товаров		
				( U_OPLATA.DIRECTION = '2'	AND
			        ( ( U_OPLATA.KODOP >= '11010'	AND U_OPLATA.KODOP <= '11060' ) 
						OR
			         ( U_OPLATA.KODOP = '35020'	AND U_OPLATA.TYPE = '2' ) )
				)	
			OR	-- Импорт услуг
				( U_OPLATA.DIRECTION = '2'	AND
			       	 ( ( U_OPLATA.KODOP >= '21010'	AND U_OPLATA.KODOP <= '21040' ) 
						OR
			         ( U_OPLATA.KODOP = '35020'	AND U_OPLATA.TYPE = '4' ) )
				)	
			)														AND
			-- отбор по Участнику ВЭД
			(
				@RESIDENT_ID			= 0		OR
				U_OPLATA.RESIDENT_ID	= @RESIDENT_ID
			)														AND
			-- Платёжи по ПС
			U_OPLATA.PS_ID	IS NOT NULL								AND
			-- отбор по Договору (контракту)	
			(
				@DOG_ID				= 0	OR
				U_DOGOVOR.DOG_ID	= @DOG_ID
			)														AND
			-- отбор по диапазону Даты завершения исполнения обязательств
			(	@D_END_BEG	IS NULL		OR
				ISNULL( [dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID), CONVERT(DATETIME, '30000606' ))	>= ISNULL(@D_END_BEG, CONVERT(DATETIME, '19000101'))
			)	AND
			(	@D_END_END	IS NULL		OR
				ISNULL( [dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID), CONVERT(DATETIME, '30000606' ))	<= ISNULL(@D_END_END, CONVERT(DATETIME, '30000606'))	
			)	

	UNION
	--	4.
	--	Выбираем Платежи Импорт товаров и Импорт услуг, ссылка на Договор (контракт), распределение на Возвраты
	--
	SELECT	ISNULL(U_RESIDENTS.NAMER_S, U_RESIDENTS.NAMER)							AS NAMER,
			U_DOGOVOR.RESIDENT_ID, 
			U_DOGOVOR.DOG_ID,	
			U_DOGOVOR.DOG_NPP,	
			U_DOGOVOR.N_KONTR,
			U_DOGOVOR.D_KONTR,
			U_IN_PART.NAMEP,
			U_DOGOVOR.N_DOPSOGL,
			U_DOGOVOR.KVALK,	
			U_DOGOVOR.D_END,	
			--	Дата завершения исполнения обязательств по Договору 
			[dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID)		AS D_END_FOR_DOG_ID,
			ISNULL(U_DOGOVOR.KONTR_SROK, '-')										AS KONTR_SROK_DOG,
			NULL																	AS N_PS,		
			NULL																	AS F1_R62_SROK,
			U_OPLATA.OPL_ID, 
			U_OPLATA.NPP, 
			U_OPLATA.D_REFER, 
			U_OPLATA.N_REFER, 
			U_OPLATA.KODOP, 
			U_OPLATA.TYPE, 
			U_OPLATA.VALP,
			U_OPLATA.SUMP,
			U_OPLATA.VALK, 
			U_OPLATA.SUMK, 
			ISNULL(U_OPLATA.KONTR_SROK, '-')										AS KONTR_SROK, 
			--[dbo].[U_NEAR_WORK_DAY]( DATEADD( dd, CONVERT( INTEGER, ISNULL(U_PS.F1_R62_SROK, 0)), U_OPLATA.D_REFER ))	
			--DATEADD(dd, CONVERT(INTEGER, ISNULL(U_PS.F1_R62_SROK, 0)), U_OPLATA.D_REFER)
			-- определение даты истечения контрактного срока по Платежу (UDF)
			[dbo].[U_OPLATA_CALC_DATE_KONTR_SROK](U_OPLATA.RESIDENT_ID, U_OPLATA.OPL_ID)
			AS	DATE_SROK,
			NULL						AS	DAYS_P,
			(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID) 
			+ 
			(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND (R.OPL_ID = U_OPLATA.OPL_ID OR R.OPL_ID2 = U_OPLATA.OPL_ID)) 
			AS	SUM_RASPR_ALL,
			U_OPLATA.SUMK - 
			(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID) 
			- 
			(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND (R.OPL_ID = U_OPLATA.OPL_ID OR R.OPL_ID2 = U_OPLATA.OPL_ID)) 
			AS	SUM_OST,
			'Возврат: '	+ 	CONVERT( VARCHAR(15), U_OPLATA2.NPP)
			AS	INFO_PRIM,
			U_OPLATA2.KODOP					AS	INFO_KODD,
			U_OPLATA2.D_REFER 				AS	INFO_D_DOC,
			U_OPLATA2.N_REFER 				AS	INFO_N_DOC,
			U_OPLATA2.SUMP					AS	INFO_SUMP,
			U_OPLATA2.SUMK					AS	INFO_SUMK,
			U_RASPRED_OPLATA_OPLATA.SUMK	AS	INFO_RASPRED_SUMK,
			U_RASPRED_OPLATA_OPLATA.D_KOR	AS	INFO_RASPRED_DATE
	FROM	U_OPLATA (NOLOCK)
	INNER	JOIN	U_USERS_RESIDENTS (NOLOCK) ON 
			U_USERS_RESIDENTS.RESIDENT_ID	= U_OPLATA.RESIDENT_ID	AND
			U_USERS_RESIDENTS.USER_ID		= @USER_ID
	INNER	JOIN	U_RESIDENTS (NOLOCK) ON
			U_RESIDENTS.RESIDENT_ID			= U_OPLATA.RESIDENT_ID	AND
			U_RESIDENTS.DEL_FLAG			IS NULL
	INNER	JOIN	U_DOGOVOR (NOLOCK) ON
			U_DOGOVOR.RESIDENT_ID			= U_OPLATA.RESIDENT_ID	AND
			U_DOGOVOR.DOG_ID				= U_OPLATA.DOG_ID		AND
			U_DOGOVOR.DOG_NPP				= U_OPLATA.DOG_NPP		AND
			U_DOGOVOR.DEL_FLAG				IS NULL		
	INNER	JOIN U_IN_PART (NOLOCK) ON	
			U_IN_PART.PARTNER_ID			= U_DOGOVOR.PARTNER_ID	AND
			U_IN_PART.DEL_FLAG				IS NULL		
	LEFT	OUTER JOIN	U_RASPRED_OPLATA_OPLATA (NOLOCK)	ON
			U_RASPRED_OPLATA_OPLATA.RESIDENT_ID	= U_OPLATA.RESIDENT_ID	AND 
			U_RASPRED_OPLATA_OPLATA.OPL_ID2 	= U_OPLATA.OPL_ID		
	LEFT	OUTER JOIN	U_OPLATA AS U_OPLATA2 (NOLOCK)	ON
			U_OPLATA2.RESIDENT_ID 			= U_RASPRED_OPLATA_OPLATA.RESIDENT_ID	AND 
			U_OPLATA2.OPL_ID 				= U_RASPRED_OPLATA_OPLATA.OPL_ID		
	WHERE 	U_OPLATA.DEL_FLAG		IS NULL							AND
			(
				-- в самом Платеже указан контрактный срок в днях
				U_OPLATA.KONTR_SROK		<> '0000'	AND 
				U_OPLATA.KONTR_SROK		<> 'НДАН'	AND
				U_OPLATA.KONTR_SROK		<> 'СВТР'	AND
				U_OPLATA.KONTR_SROK		IS NOT NULL
			OR
				-- срок по Договору указан в днях 
				U_DOGOVOR.KONTR_SROK	<> '0000'	AND	
				U_DOGOVOR.KONTR_SROK	<> 'НДАН'	AND
				U_DOGOVOR.KONTR_SROK	<> 'СВТР'	AND
				U_DOGOVOR.KONTR_SROK	IS NOT NULL		
			)														AND	
			--DATEADD( dd, CONVERT(INTEGER, ISNULL(U_PS.F1_R62_SROK, 0)), U_OPLATA.D_REFER) <= @DATE_END_SROK	AND
			-- определение даты истечения контрактного срока по Платежу (UDF)
			[dbo].[U_OPLATA_CALC_DATE_KONTR_SROK](U_OPLATA.RESIDENT_ID, U_OPLATA.OPL_ID)	<= @DATE_END_SROK	AND
			U_OPLATA.SUMK -
			(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID) 
			- 
			(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND (R.OPL_ID = U_OPLATA.OPL_ID OR R.OPL_ID2 = U_OPLATA.OPL_ID)) > @OST_NOTRASPRED AND
			(	-- Импорт товаров		
				( U_OPLATA.DIRECTION = '2'	AND
			        ( ( U_OPLATA.KODOP >= '11010'	AND U_OPLATA.KODOP <= '11060' ) 
						OR
			         ( U_OPLATA.KODOP = '35020'	AND U_OPLATA.TYPE = '2' ) )
				)	
			OR	-- Импорт услуг
				( U_OPLATA.DIRECTION = '2'	AND
			       	 ( ( U_OPLATA.KODOP >= '21010'	AND U_OPLATA.KODOP <= '21040' ) 
						OR
			         ( U_OPLATA.KODOP = '35020'	AND U_OPLATA.TYPE = '4' ) )
				)	
			)														AND
			-- отбор по Участнику ВЭД
			(
				@RESIDENT_ID			= 0		OR
				U_OPLATA.RESIDENT_ID	= @RESIDENT_ID
			)														AND
			-- Платёжи по Договору (контракту) (без ПС)
			U_OPLATA.PS_ID	IS NULL									AND
			U_OPLATA.DOG_ID	IS NOT NULL								AND
			-- отбор по Договору (контракту)	
			(
				@DOG_ID				= 0	OR
				U_DOGOVOR.DOG_ID	= @DOG_ID
			)														AND
			-- отбор по диапазону Даты завершения исполнения обязательств
			(	@D_END_BEG	IS NULL		OR
				ISNULL( [dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID), CONVERT(DATETIME, '30000606' ))	>= ISNULL(@D_END_BEG, CONVERT(DATETIME, '19000101'))
			)	AND
			(	@D_END_END	IS NULL		OR
				ISNULL( [dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID), CONVERT(DATETIME, '30000606' ))	<= ISNULL(@D_END_END, CONVERT(DATETIME, '30000606'))	
			)	
	ORDER	BY NAMER, U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.N_KONTR, U_DOGOVOR.DOG_ID, U_DOGOVOR.DOG_NPP, U_OPLATA.D_REFER
GO

GRANT  EXECUTE  ON [dbo].[U_CRP_CHECK_SROK_IMPORT_DOGOVOR]  TO [OPERS], [AUDITS]
GO

--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[U_CRP_CHECK_SROK_EXPORT_DOGOVOR]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[U_CRP_CHECK_SROK_EXPORT_DOGOVOR]
GO

CREATE PROCEDURE [dbo].[U_CRP_CHECK_SROK_EXPORT_DOGOVOR]
--	----------------------------------------------------------------------------------------------------------------------------
--	Выборка списка ПД (экспорт товаров и экспорт услуг) по Договорам (контракты) 
--  для отчёта "Контроль контрактных сроков по Договорам (контракты): экспорт товаров и экспорт услуг" 
--	----------------------------------------------------------------------------------------------------------------------------
--  В отчёт попадают Договоры (контракты): 
--  1. ПД которых имеют контрактный срок в днях на одном из следующих уровней 
--	- контрактный срок по ПД;
--	- контрактный срок по ПС (п.6.2);
--	- контрактный срок по Договору.
--	
--	@USER_ID		- идентификатор Пользователя
--	@RESIDENT_ID 	- интендификатор Участника ВЭД (если = 0, то все Участники ВЭД)
--	@DOG_ID			- интендификатор Договора ( если = 0, то все Договоры (контракты))	
--	@D_END_BEG		- нижняя граница диапазона дат окончания исполнения обязательств по контракту	
--	@D_END_END		- верхняя граница диапазона дат окончания исполнения обязательств по контракту
--	@OST_NOTRASPRED - нераспределённый остаток по ПД (>) (0 - показать с ненулевым остатком, -1 - показать все)
--	@DATE_END_SROK	- дата истечения контрактного срока (<=) (NULL - показать с истекшим сроком, '2079-01-01' - показать все)
--	----------------------------------------------------------------------------------------------------------------------------
--	(Модификация	в версии 2.1.0)
--	----------------------------------------------------------------------------------------------------------------------------
(
	@USER_ID		AS VARCHAR(30),
	@RESIDENT_ID	AS INTEGER,
	@DOG_ID			AS INTEGER,
	@D_END_BEG		AS DATETIME			=	NULL,
	@D_END_END		AS DATETIME			=	NULL,
	@OST_NOTRASPRED	AS INTEGER,
	@DATE_END_SROK	AS SMALLDATETIME
)
AS
	SET NOCOUNT ON

	SELECT	@RESIDENT_ID	= 	ISNULL(@RESIDENT_ID, 0)
	SELECT	@DOG_ID 		= 	ISNULL(@DOG_ID , 0)
	SELECT	@OST_NOTRASPRED	= 	ISNULL(@OST_NOTRASPRED , 0)
	SELECT	@DATE_END_SROK 	= 	ISNULL(@DATE_END_SROK , DATEADD( dd, DATEDIFF(dd, 0, GETDATE()), 0))

	--	1.
	--	Выбираем ПД Экспорт товаров и Экспорт услуг, ссылка на ПС, распределение на Платежи
	--
	SELECT	ISNULL(U_RESIDENTS.NAMER_S, U_RESIDENTS.NAMER)	AS NAMER,
			U_DOGOVOR.RESIDENT_ID, 
			U_DOGOVOR.DOG_ID,	
			U_DOGOVOR.DOG_NPP,	
			U_DOGOVOR.N_KONTR,
			U_DOGOVOR.D_KONTR,
			U_IN_PART.NAMEP,
			U_DOGOVOR.N_DOPSOGL,
			U_DOGOVOR.KVALK,	
			U_DOGOVOR.D_END,	
			--	Дата завершения исполнения обязательств по Договору 
			[dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID)		AS D_END_FOR_DOG_ID,
			ISNULL(U_DOGOVOR.KONTR_SROK, '-')										AS KONTR_SROK_DOG,
			U_PS.N_PS																AS N_PS,	
			ISNULL(U_PS.F1_R62_SROK, '-')											AS F1_R62_SROK,
			U_SPR_CONFIRM.SPR_ID, 
			U_SPR_CONFIRM.NPP, 
			CONVERT( VARCHAR(15), U_SPR_CONFIRM.SPR_ID ) + ' ( ' + + CONVERT( VARCHAR(15), U_SPR_CONFIRM.NPP ) + ' )'	AS	N_SPRAVKI,
			U_SPR_CONFIRM.D_DOC, 
			U_SPR_CONFIRM.N_GTD, 
			U_SPR_CONFIRM.KODD, 
			U_SPR_CONFIRM.DIRECTION, 
			U_SPR_CONFIRM.VALP,		
			U_SPR_CONFIRM.SUMP, 
			U_SPR_CONFIRM.VALK, 
			U_SPR_CONFIRM.SUMK, 
			ISNULL(U_SPR_CONFIRM.KONTR_SROK, '-')									AS KONTR_SROK, 
			--[dbo].[U_NEAR_WORK_DAY]( DATEADD( dd, CONVERT( INTEGER, ISNULL(U_PS.F1_R62_SROK, 0)), U_SPR_CONFIRM.D_DOC ))	
			--DATEADD(dd, CONVERT(INTEGER, ISNULL(U_PS.F1_R62_SROK, 0)), U_SPR_CONFIRM.D_DOC)
			-- определение даты истечения контрактного срока по ПД (UDF)
			[dbo].[U_SPR_CONFIRM_CALC_DATE_KONTR_SROK](U_SPR_CONFIRM.RESIDENT_ID, U_SPR_CONFIRM.PD_ID)
			AS	DATE_SROK,

			--DATEDIFF(dd, [dbo].[U_NEAR_WORK_DAY]( DATEADD( dd, CONVERT( INTEGER, ISNULL(U_PS.F1_R62_SROK, 0)), U_SPR_CONFIRM.D_DOC )), U_OPLATA.D_REFER )
			--DATEDIFF(dd, DATEADD(dd, CONVERT(INTEGER, ISNULL(U_PS.F1_R62_SROK, 0)), U_SPR_CONFIRM.D_DOC), U_OPLATA.D_REFER)
			-- определение разницы даты Платежа с датой истечения контрактного срока по ПД (UDF)
			DATEDIFF(dd, [dbo].[U_SPR_CONFIRM_CALC_DATE_KONTR_SROK](U_SPR_CONFIRM.RESIDENT_ID, U_SPR_CONFIRM.PD_ID), U_OPLATA.D_REFER)
			AS	DAYS_P,

			( SELECT SUM(SUMK) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_SPR_CONFIRM.RESIDENT_ID AND R.PD_ID = U_SPR_CONFIRM.PD_ID ) 
			AS	SUM_RASPR_ALL,

			U_SPR_CONFIRM.SUMK - 
			( SELECT  ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_SPR_CONFIRM.RESIDENT_ID AND R.PD_ID = U_SPR_CONFIRM.PD_ID ) 
			AS	SUM_OST,

			U_OPLATA.NPP						AS	INFO_NPP,  
			U_OPLATA.KODOP						AS	INFO_KODOP, 
			U_OPLATA.D_REFER					AS	INFO_D_REFER,  
			U_OPLATA.N_REFER					AS	INFO_N_REFER, 
			U_RASPRED_OPLATA_SPR_CONFIRM.SUMK	AS	INFO_RASPRED_SUMK,
			U_RASPRED_OPLATA_SPR_CONFIRM.D_KOR	AS	INFO_RASPRED_DATE
	FROM	U_SPR_CONFIRM (NOLOCK)
	INNER	JOIN 	U_USERS_RESIDENTS (NOLOCK) ON 
			U_USERS_RESIDENTS.RESIDENT_ID	= U_SPR_CONFIRM.RESIDENT_ID	AND
			U_USERS_RESIDENTS.USER_ID		= @USER_ID
	INNER	JOIN	U_RESIDENTS (NOLOCK) ON
			U_RESIDENTS.RESIDENT_ID			= U_SPR_CONFIRM.RESIDENT_ID	AND
			U_RESIDENTS.DEL_FLAG			IS NULL
	INNER	JOIN	U_PS (NOLOCK) ON
			U_PS.RESIDENT_ID				= U_SPR_CONFIRM.RESIDENT_ID	AND
			U_PS.PS_ID						= U_SPR_CONFIRM.PS_ID		AND
			U_PS.DEL_FLAG					IS NULL				
	INNER	JOIN	U_DOGOVOR (NOLOCK) ON
			U_DOGOVOR.RESIDENT_ID			= U_PS.RESIDENT_ID			AND
			U_DOGOVOR.DOG_ID				= U_PS.DOG_ID				AND
			U_DOGOVOR.DOG_NPP				= U_PS.DOG_NPP				AND
			U_DOGOVOR.DEL_FLAG				IS NULL		
	INNER	JOIN U_IN_PART (NOLOCK) ON	
			U_IN_PART.PARTNER_ID			= U_DOGOVOR.PARTNER_ID		AND
			U_IN_PART.DEL_FLAG				IS NULL		
	LEFT	OUTER JOIN	U_RASPRED_OPLATA_SPR_CONFIRM (NOLOCK) ON
			U_RASPRED_OPLATA_SPR_CONFIRM.RESIDENT_ID	= U_SPR_CONFIRM.RESIDENT_ID	AND 
			U_RASPRED_OPLATA_SPR_CONFIRM.PD_ID			= U_SPR_CONFIRM.PD_ID 	
	LEFT	OUTER JOIN	U_OPLATA (NOLOCK) ON
			U_OPLATA.RESIDENT_ID 			= U_RASPRED_OPLATA_SPR_CONFIRM.RESIDENT_ID	AND 
			U_OPLATA.OPL_ID					= U_RASPRED_OPLATA_SPR_CONFIRM.OPL_ID		
	WHERE	U_SPR_CONFIRM.PR_NOT_CALC	IS NULL				AND
			U_SPR_CONFIRM.DEL_FLAG		IS NULL				AND
			(
				-- в самом ПД указан контрактный срок в днях
				U_SPR_CONFIRM.KONTR_SROK	<> '0000'	AND 
				U_SPR_CONFIRM.KONTR_SROK	<> 'НДАН'	AND
				U_SPR_CONFIRM.KONTR_SROK	<> 'СВТР'	AND
				U_SPR_CONFIRM.KONTR_SROK	IS NOT NULL
			OR
				-- срок по ПС указан в днях
				U_PS.F1_R62_SROK			<> '0000'	AND	
				U_PS.F1_R62_SROK			<> 'НДАН'	AND
				U_PS.F1_R62_SROK			<> 'СВТР'	AND
				U_PS.F1_R62_SROK			IS NOT NULL		
			OR
				-- срок по Договору указан в днях 
				U_DOGOVOR.KONTR_SROK		<> '0000'	AND	
				U_DOGOVOR.KONTR_SROK		<> 'НДАН'	AND
				U_DOGOVOR.KONTR_SROK		<> 'СВТР'	AND
				U_DOGOVOR.KONTR_SROK		IS NOT NULL		
			)													AND
			--DATEADD(dd, CONVERT(INTEGER, ISNULL(U_PS.F1_R62_SROK, 0)), U_SPR_CONFIRM.D_DOC) <= @DATE_END_SROK
			-- определение даты истечения контрактного срока по ПД (UDF)
			[dbo].[U_SPR_CONFIRM_CALC_DATE_KONTR_SROK](U_SPR_CONFIRM.RESIDENT_ID, U_SPR_CONFIRM.PD_ID)	<= @DATE_END_SROK	AND
			U_SPR_CONFIRM.SUMK - ( SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_SPR_CONFIRM.RESIDENT_ID AND R.PD_ID = U_SPR_CONFIRM.PD_ID ) > @OST_NOTRASPRED AND
			( 	-- Экспорт товаров
				(
					U_SPR_CONFIRM.KODD >= '01' AND U_SPR_CONFIRM.KODD <= '02' AND U_SPR_CONFIRM.DIRECTION = '2' 
					OR 
					U_SPR_CONFIRM.KODD = '03'
				)								
			OR	-- Экспорт услуг
				(
					U_SPR_CONFIRM.KODD = '04' AND U_SPR_CONFIRM.DIRECTION = '2' 
					OR 
					U_SPR_CONFIRM.KODD = '05'
				)	
			)													AND
			-- отбор по Участнику ВЭД
			(
				@RESIDENT_ID				= 0	OR
				U_SPR_CONFIRM.RESIDENT_ID	= @RESIDENT_ID
			)													AND
			-- ПД по ПС
			U_SPR_CONFIRM.PS_ID				IS NOT NULL			AND
			-- отбор по Договору (контракту)
			(
				@DOG_ID						= 0	OR
				U_DOGOVOR.DOG_ID			= @DOG_ID
			)													AND
			-- отбор по диапазону Даты завершения исполнения обязательств
			(	@D_END_BEG	IS NULL		OR
				ISNULL( [dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID), CONVERT(DATETIME, '30000606' ))	>= ISNULL(@D_END_BEG, CONVERT(DATETIME, '19000101'))
			)	AND
			(	@D_END_END	IS NULL		OR
				ISNULL( [dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID), CONVERT(DATETIME, '30000606' ))	<= ISNULL(@D_END_END, CONVERT(DATETIME, '30000606'))	
			)

	UNION
	--	2.
	--	Выбираем ПД Экспорт товаров и Экспорт услуг, ссылка на Договор (контракт), распределение на Платежи
	--
	SELECT	ISNULL(U_RESIDENTS.NAMER_S, U_RESIDENTS.NAMER)	AS NAMER,
			U_DOGOVOR.RESIDENT_ID, 
			U_DOGOVOR.DOG_ID,	
			U_DOGOVOR.DOG_NPP,	
			U_DOGOVOR.N_KONTR,
			U_DOGOVOR.D_KONTR,
			U_IN_PART.NAMEP,
			U_DOGOVOR.N_DOPSOGL,
			U_DOGOVOR.KVALK,	
			U_DOGOVOR.D_END,	
			--	Дата завершения исполнения обязательств по Договору 
			[dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID)		AS D_END_FOR_DOG_ID,
			ISNULL(U_DOGOVOR.KONTR_SROK, '-')										AS KONTR_SROK_DOG,
			NULL																	AS N_PS,	
			NULL																	AS F1_R62_SROK,
			U_SPR_CONFIRM.SPR_ID, 
			U_SPR_CONFIRM.NPP, 
			CONVERT( VARCHAR(15), U_SPR_CONFIRM.SPR_ID ) + ' ( ' + + CONVERT( VARCHAR(15), U_SPR_CONFIRM.NPP ) + ' )'	AS	N_SPRAVKI,
			U_SPR_CONFIRM.D_DOC, 
			U_SPR_CONFIRM.N_GTD, 
			U_SPR_CONFIRM.KODD, 
			U_SPR_CONFIRM.DIRECTION, 
			U_SPR_CONFIRM.VALP,		
			U_SPR_CONFIRM.SUMP, 
			U_SPR_CONFIRM.VALK, 
			U_SPR_CONFIRM.SUMK, 
			ISNULL(U_SPR_CONFIRM.KONTR_SROK, '-')									AS KONTR_SROK, 
			--[dbo].[U_NEAR_WORK_DAY]( DATEADD( dd, CONVERT( INTEGER, ISNULL(U_PS.F1_R62_SROK, 0)), U_SPR_CONFIRM.D_DOC ))	
			--DATEADD(dd, CONVERT(INTEGER, ISNULL(U_PS.F1_R62_SROK, 0)), U_SPR_CONFIRM.D_DOC)
			-- определение даты истечения контрактного срока по ПД (UDF)
			[dbo].[U_SPR_CONFIRM_CALC_DATE_KONTR_SROK](U_SPR_CONFIRM.RESIDENT_ID, U_SPR_CONFIRM.PD_ID)
			AS	DATE_SROK,

			--DATEDIFF(dd, [dbo].[U_NEAR_WORK_DAY]( DATEADD( dd, CONVERT( INTEGER, ISNULL(U_PS.F1_R62_SROK, 0)), U_SPR_CONFIRM.D_DOC )), U_OPLATA.D_REFER )
			--DATEDIFF(dd, DATEADD(dd, CONVERT(INTEGER, ISNULL(U_PS.F1_R62_SROK, 0)), U_SPR_CONFIRM.D_DOC), U_OPLATA.D_REFER)
			-- определение разницы даты Платежа с датой истечения контрактного срока по ПД (UDF)
			DATEDIFF(dd, [dbo].[U_SPR_CONFIRM_CALC_DATE_KONTR_SROK](U_SPR_CONFIRM.RESIDENT_ID, U_SPR_CONFIRM.PD_ID), U_OPLATA.D_REFER)
			AS	DAYS_P,

			( SELECT SUM(SUMK) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_SPR_CONFIRM.RESIDENT_ID AND R.PD_ID = U_SPR_CONFIRM.PD_ID ) 
			AS	SUM_RASPR_ALL,

			U_SPR_CONFIRM.SUMK - 
			( SELECT  ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_SPR_CONFIRM.RESIDENT_ID AND R.PD_ID = U_SPR_CONFIRM.PD_ID ) 
			AS	SUM_OST,

			U_OPLATA.NPP						AS	INFO_NPP,  
			U_OPLATA.KODOP						AS	INFO_KODOP, 
			U_OPLATA.D_REFER					AS	INFO_D_REFER,  
			U_OPLATA.N_REFER					AS	INFO_N_REFER, 
			U_RASPRED_OPLATA_SPR_CONFIRM.SUMK	AS	INFO_RASPRED_SUMK,
			U_RASPRED_OPLATA_SPR_CONFIRM.D_KOR	AS	INFO_RASPRED_DATE
	FROM	U_SPR_CONFIRM (NOLOCK)
	INNER	JOIN 	U_USERS_RESIDENTS (NOLOCK) ON 
			U_USERS_RESIDENTS.RESIDENT_ID	= U_SPR_CONFIRM.RESIDENT_ID	AND
			U_USERS_RESIDENTS.USER_ID		= @USER_ID
	INNER	JOIN	U_RESIDENTS (NOLOCK) ON
			U_RESIDENTS.RESIDENT_ID			= U_SPR_CONFIRM.RESIDENT_ID	AND
			U_RESIDENTS.DEL_FLAG			IS NULL
	INNER	JOIN	U_DOGOVOR (NOLOCK) ON
			U_DOGOVOR.RESIDENT_ID			= U_SPR_CONFIRM.RESIDENT_ID	AND
			U_DOGOVOR.DOG_ID				= U_SPR_CONFIRM.DOG_ID		AND
			U_DOGOVOR.DOG_NPP				= U_SPR_CONFIRM.DOG_NPP		AND
			U_DOGOVOR.DEL_FLAG				IS NULL		
	INNER	JOIN U_IN_PART (NOLOCK) ON	
			U_IN_PART.PARTNER_ID			= U_DOGOVOR.PARTNER_ID		AND
			U_IN_PART.DEL_FLAG				IS NULL		
	LEFT	OUTER JOIN	U_RASPRED_OPLATA_SPR_CONFIRM (NOLOCK) ON
			U_RASPRED_OPLATA_SPR_CONFIRM.RESIDENT_ID	= U_SPR_CONFIRM.RESIDENT_ID	AND 
			U_RASPRED_OPLATA_SPR_CONFIRM.PD_ID			= U_SPR_CONFIRM.PD_ID 	
	LEFT	OUTER JOIN	U_OPLATA (NOLOCK) ON
			U_OPLATA.RESIDENT_ID 			= U_RASPRED_OPLATA_SPR_CONFIRM.RESIDENT_ID	AND 
			U_OPLATA.OPL_ID					= U_RASPRED_OPLATA_SPR_CONFIRM.OPL_ID		
	WHERE	U_SPR_CONFIRM.PR_NOT_CALC	IS NULL				AND
			U_SPR_CONFIRM.DEL_FLAG		IS NULL				AND
			(
				-- в самом ПД указан контрактный срок в днях
				U_SPR_CONFIRM.KONTR_SROK	<> '0000'	AND 
				U_SPR_CONFIRM.KONTR_SROK	<> 'НДАН'	AND
				U_SPR_CONFIRM.KONTR_SROK	<> 'СВТР'	AND
				U_SPR_CONFIRM.KONTR_SROK	IS NOT NULL
			OR
				-- срок по Договору указан в днях 
				U_DOGOVOR.KONTR_SROK		<> '0000'	AND	
				U_DOGOVOR.KONTR_SROK		<> 'НДАН'	AND
				U_DOGOVOR.KONTR_SROK		<> 'СВТР'	AND
				U_DOGOVOR.KONTR_SROK		IS NOT NULL		
			)													AND
			--DATEADD(dd, CONVERT(INTEGER, ISNULL(U_PS.F1_R62_SROK, 0)), U_SPR_CONFIRM.D_DOC) <= @DATE_END_SROK
			-- определение даты истечения контрактного срока по ПД (UDF)
			[dbo].[U_SPR_CONFIRM_CALC_DATE_KONTR_SROK](U_SPR_CONFIRM.RESIDENT_ID, U_SPR_CONFIRM.PD_ID)	<= @DATE_END_SROK	AND
			U_SPR_CONFIRM.SUMK - ( SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_SPR_CONFIRM.RESIDENT_ID AND R.PD_ID = U_SPR_CONFIRM.PD_ID ) > @OST_NOTRASPRED AND
			( 	-- Экспорт товаров
				(
					U_SPR_CONFIRM.KODD >= '01' AND U_SPR_CONFIRM.KODD <= '02' AND U_SPR_CONFIRM.DIRECTION = '2' 
					OR 
					U_SPR_CONFIRM.KODD = '03'
				)								
			OR	-- Экспорт услуг
				(
					U_SPR_CONFIRM.KODD = '04' AND U_SPR_CONFIRM.DIRECTION = '2' 
					OR 
					U_SPR_CONFIRM.KODD = '05'
				)	
			)													AND
			-- отбор по Участнику ВЭД
			(
				@RESIDENT_ID				= 0	OR
				U_SPR_CONFIRM.RESIDENT_ID	= @RESIDENT_ID
			)													AND
			-- ПД по Договору (контракту) (без ПС)
			U_SPR_CONFIRM.PS_ID				IS NULL				AND
			U_SPR_CONFIRM.DOG_ID			IS NOT NULL			AND
			-- отбор по Договору (контракту)
			(
				@DOG_ID						= 0	OR
				U_DOGOVOR.DOG_ID			= @DOG_ID
			)													AND
			-- отбор по диапазону Даты завершения исполнения обязательств
			(	@D_END_BEG	IS NULL		OR
				ISNULL( [dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID), CONVERT(DATETIME, '30000606' ))	>= ISNULL(@D_END_BEG, CONVERT(DATETIME, '19000101'))
			)	AND
			(	@D_END_END	IS NULL		OR
				ISNULL( [dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID), CONVERT(DATETIME, '30000606' ))	<= ISNULL(@D_END_END, CONVERT(DATETIME, '30000606'))	
			)
	ORDER	BY NAMER, U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.N_KONTR, U_DOGOVOR.DOG_ID, U_DOGOVOR.DOG_NPP, U_SPR_CONFIRM.D_DOC
GO

GRANT  EXECUTE  ON [dbo].[U_CRP_CHECK_SROK_EXPORT_DOGOVOR]  TO [OPERS], [AUDITS]
GO

--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[U_CRP_CHECK_SROK_IMPORT]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[U_CRP_CHECK_SROK_IMPORT]
GO

CREATE PROCEDURE [dbo].[U_CRP_CHECK_SROK_IMPORT]
--	-------------------------------------------------------------------------------------------------------------------------
--	Выборка списка Платежей (импорт товаров и импорт услуг) по ПС
--  для отчёта "Контроль контрактных сроков по ПС: импорт товаров и импорт услуг" 
--	-------------------------------------------------------------------------------------------------------------------------
--  В отчёт попадают ПС: 
--	1. у которых контрактный срок на ПС (п.6.2) не равен '0000' или 'СВТР', 
--  2. Платежи которых имеют контрактный срок в днях на одном из следующих уровней 
--	- контрактный срок по Платежу (при этом условие 1 игнорируется);
--	- контрактный срок по ПС (п.6.2);
--	- контрактный срок по Договору.
--	
--	@USER_ID		- идентификатор Пользователя
--	@RESIDENT_ID 	- интендификатор Участника ВЭД (если = 0, то все Участники ВЭД)
--	@BANK_ID 		- идентификатор Уполномоченного банка (если 0, то все Банки)
--	@PS_ID 			- интендификатор ПС ( если = 0, то все ПС )	
--	@D_END_BEG		- нижняя граница диапазона дат окончания исполнения обязательств по контракту	
--	@D_END_END		- верхняя граница диапазона дат окончания исполнения обязательств по контракту
--	@OST_NOTRASPRED - нераспределённый остаток по платежу (>) (0 - показать с ненулевым остатком, -1 - показать все)
--	@DATE_END_SROK	- дата истечения контрактного срока (<=) (NULL - показать с истекшим сроком, '2079-01-01' - показать все)
--	-------------------------------------------------------------------------------------------------------------------------
--	(Модификация	в версии 2.1.0)
--	-------------------------------------------------------------------------------------------------------------------------
(
	@USER_ID		AS VARCHAR(30),
	@RESIDENT_ID	AS INTEGER,
	@BANK_ID		AS INTEGER			= 0,
	@PS_ID			AS INTEGER,
	@D_END_BEG		AS DATETIME,
	@D_END_END		AS DATETIME,
	@OST_NOTRASPRED	AS INTEGER,
	@DATE_END_SROK	AS SMALLDATETIME
)
AS
	SET NOCOUNT ON

	SELECT	@RESIDENT_ID	= 	ISNULL(@RESIDENT_ID, 0)
	SELECT	@BANK_ID		= 	ISNULL(@BANK_ID, 0)
	SELECT	@PS_ID 			= 	ISNULL(@PS_ID , 0)
	SELECT	@OST_NOTRASPRED	= 	ISNULL(@OST_NOTRASPRED , 0)
	SELECT	@DATE_END_SROK 	= 	ISNULL(@DATE_END_SROK , DATEADD( dd, DATEDIFF(dd, 0, GETDATE()), 0))

	--
	--	Выбираем Платежи Импорт товаров и Импорт услуг
	--
	SELECT	ISNULL(U_RESIDENTS.NAMER_S, U_RESIDENTS.NAMER)	AS NAMER,
			U_PS.RESIDENT_ID, 
			U_PS.PS_ID, 
			U_PS.N_PS,		
			ISNULL(U_PS.F1_R62_SROK, '-')					AS F1_R62_SROK,	
			ISNULL(U_DOGOVOR.N_DOPSOGL, U_DOGOVOR.N_KONTR)	AS N_KONTR,
			U_DOGOVOR.KVALK,	
			U_DOGOVOR.D_END,	
			ISNULL(U_DOGOVOR.KONTR_SROK, '-')				AS KONTR_SROK_DOG,
			U_OPLATA.OPL_ID, 	
			U_OPLATA.NPP, 
			U_OPLATA.D_REFER, 
			U_OPLATA.N_REFER, 
			U_OPLATA.KODOP, 
			U_OPLATA.TYPE, 
			U_OPLATA.VALP,
			U_OPLATA.SUMP,
			U_OPLATA.VALK, 
			U_OPLATA.SUMK, 
			U_OPLATA.KONTR_SROK, 
			--[dbo].[U_NEAR_WORK_DAY]( DATEADD( dd, CONVERT( INTEGER, ISNULL(U_PS.F1_R62_SROK, 0)), U_OPLATA.D_REFER ))	
			--DATEADD(dd, CONVERT(INTEGER, ISNULL(U_PS.F1_R62_SROK, 0)), U_OPLATA.D_REFER)
			-- определение даты истечения контрактного срока по Платежу (UDF)
			[dbo].[U_OPLATA_CALC_DATE_KONTR_SROK](U_OPLATA.RESIDENT_ID, U_OPLATA.OPL_ID)
			AS	DATE_SROK,
			--DATEDIFF(dd, [dbo].[U_NEAR_WORK_DAY]( DATEADD( dd, CONVERT( INTEGER, ISNULL(U_PS.F1_R62_SROK, 0)), U_OPLATA.D_REFER )), U_SPR_CONFIRM.D_DOC )
			--DATEDIFF(dd, DATEADD(dd, CONVERT(INTEGER, ISNULL(U_PS.F1_R62_SROK, 0)), U_OPLATA.D_REFER), U_SPR_CONFIRM.D_DOC)
			-- определение разницы даты ПД с датой истечения контрактного срока по Платежу (UDF)
			DATEDIFF(dd, [dbo].[U_OPLATA_CALC_DATE_KONTR_SROK](U_OPLATA.RESIDENT_ID, U_OPLATA.OPL_ID), U_SPR_CONFIRM.D_DOC)
			AS	DAYS_P,
			(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID) 
			+ 
			(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND (R.OPL_ID = U_OPLATA.OPL_ID OR R.OPL_ID2 = U_OPLATA.OPL_ID)) 
			AS SUM_RASPR_ALL,
			U_OPLATA.SUMK - 
			(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID) 
			- 
			(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND (R.OPL_ID = U_OPLATA.OPL_ID OR R.OPL_ID2 = U_OPLATA.OPL_ID)) 
			AS	SUM_OST,
			'ПД        : ' + CONVERT( VARCHAR(15), U_SPR_CONFIRM.SPR_ID ) + ' ( ' + + CONVERT( VARCHAR(15), U_SPR_CONFIRM.NPP ) + ' )'	
			AS	INFO_PRIM,
			U_SPR_CONFIRM.KODD					AS	INFO_KODD,
			U_SPR_CONFIRM.D_DOC 				AS	INFO_D_DOC,
			U_SPR_CONFIRM.N_GTD 				AS	INFO_N_DOC,
			U_SPR_CONFIRM.SUMP					AS	INFO_SUMP,
			U_SPR_CONFIRM.SUMK					AS	INFO_SUMK,
			U_RASPRED_OPLATA_SPR_CONFIRM.SUMK	AS	INFO_RASPRED_SUMK,
			U_RASPRED_OPLATA_SPR_CONFIRM.D_KOR	AS	INFO_RASPRED_DATE
	FROM	U_OPLATA (NOLOCK)
	INNER	JOIN	U_USERS_RESIDENTS (NOLOCK) ON 
			U_USERS_RESIDENTS.RESIDENT_ID	= U_OPLATA.RESIDENT_ID	AND
			U_USERS_RESIDENTS.USER_ID		= @USER_ID
	INNER	JOIN 	U_RESIDENTS (NOLOCK) ON
			U_RESIDENTS.RESIDENT_ID			= U_OPLATA.RESIDENT_ID	AND
			U_RESIDENTS.DEL_FLAG			IS NULL
	INNER	JOIN	U_PS (NOLOCK) ON
			U_PS.RESIDENT_ID				= U_OPLATA.RESIDENT_ID	AND
			U_PS.PS_ID						= U_OPLATA.PS_ID		AND
			U_PS.DEL_FLAG					IS NULL					AND
			(
				--в самом Платеже указан контрактный срок в днях
				U_OPLATA.KONTR_SROK	<> '0000'			AND 
				U_OPLATA.KONTR_SROK	<> 'НДАН'			AND
				U_OPLATA.KONTR_SROK	<> 'СВТР'			AND
				U_OPLATA.KONTR_SROK	IS NOT NULL
			OR
				--срок по ПС контролируется (не указано обратное)
				ISNULL(U_PS.F1_R62_SROK, '')	NOT IN ('0000', 'СВТР')	AND 
				(
					-- срок по ПС указан в днях
					U_PS.F1_R62_SROK		IS NOT NULL		AND	
					U_PS.F1_R62_SROK		<> 'НДАН'		
																OR
					-- срок по ПС не указан, но указан срок по Договору ПС в днях 
					(U_PS.F1_R62_SROK IS NULL	OR U_PS.F1_R62_SROK	= 'НДАН')	AND 
					EXISTS	(	SELECT	* 
								FROM	U_DOGOVOR AS D (NOLOCK) 
								WHERE	D.RESIDENT_ID	= U_PS.RESIDENT_ID	AND
										D.DOG_ID		= U_PS.DOG_ID		AND
										D.DOG_NPP		= U_PS.DOG_NPP		AND
										D.KONTR_SROK	<> '0000'			AND 
										D.KONTR_SROK	<> 'НДАН'			AND
										D.KONTR_SROK	<> 'СВТР'			AND
										D.KONTR_SROK	IS NOT NULL
							)
				)
			)
			--[dbo].[U_NEAR_WORK_DAY]( DATEADD( dd, CONVERT( INTEGER, ISNULL(U_PS.F1_R62_SROK, 0)), U_OPLATA.D_REFER )) <= @DATE_END_SROK
			--DATEADD( dd, CONVERT(INTEGER, ISNULL(U_PS.F1_R62_SROK, 0)), U_OPLATA.D_REFER) <= @DATE_END_SROK
	INNER	JOIN	U_DOGOVOR (NOLOCK) ON
			U_DOGOVOR.RESIDENT_ID						= U_PS.RESIDENT_ID							AND
			U_DOGOVOR.DOG_ID							= U_PS.DOG_ID								AND
			U_DOGOVOR.DOG_NPP							= U_PS.DOG_NPP								AND
			U_DOGOVOR.DEL_FLAG							IS NULL		
	LEFT	OUTER JOIN	U_RASPRED_OPLATA_SPR_CONFIRM (NOLOCK) ON
			U_RASPRED_OPLATA_SPR_CONFIRM.RESIDENT_ID	= U_OPLATA.RESIDENT_ID						AND 
			U_RASPRED_OPLATA_SPR_CONFIRM.OPL_ID			= U_OPLATA.OPL_ID 							
	LEFT	OUTER JOIN	U_SPR_CONFIRM (NOLOCK) ON
			U_SPR_CONFIRM.RESIDENT_ID 					= U_RASPRED_OPLATA_SPR_CONFIRM.RESIDENT_ID	AND 
			U_SPR_CONFIRM.PD_ID 						= U_RASPRED_OPLATA_SPR_CONFIRM.PD_ID		
	WHERE 	U_OPLATA.DEL_FLAG		IS NULL				AND
			--DATEADD( dd, CONVERT(INTEGER, ISNULL(U_PS.F1_R62_SROK, 0)), U_OPLATA.D_REFER) <= @DATE_END_SROK	AND
			-- определение даты истечения контрактного срока по Платежу (UDF)
			[dbo].[U_OPLATA_CALC_DATE_KONTR_SROK](U_OPLATA.RESIDENT_ID, U_OPLATA.OPL_ID)	<= @DATE_END_SROK	AND
			U_OPLATA.SUMK -
			(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID) 
			- 
			(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND (R.OPL_ID = U_OPLATA.OPL_ID OR R.OPL_ID2 = U_OPLATA.OPL_ID)) > @OST_NOTRASPRED AND
			( 	-- импорт товаров
				( U_OPLATA.DIRECTION = '2'	AND
			        ( ( U_OPLATA.KODOP >= '11010'	AND U_OPLATA.KODOP <= '11060' ) 
				OR
			         ( U_OPLATA.KODOP = '35020'	AND U_OPLATA.TYPE = '2' ) )
				)	
			OR	-- импорт услуг
				( U_OPLATA.DIRECTION = '2'	AND
			       	 ( ( U_OPLATA.KODOP >= '21010'	AND U_OPLATA.KODOP <= '21040' ) 
				OR
			         ( U_OPLATA.KODOP = '35020'	AND U_OPLATA.TYPE = '4' ) )
				)	
			)	AND
			(
				@RESIDENT_ID			= 0	OR
				U_OPLATA.RESIDENT_ID	= @RESIDENT_ID
			)													AND
			U_OPLATA.PS_ID			IS NOT NULL					AND
			-- ограничение по ПС
			(
				@PS_ID				= 0	OR
				U_OPLATA.PS_ID		= @PS_ID
			)													AND
			-- ограничение по Банку ПС
			(
				@BANK_ID					= 0	OR
				U_PS.BANK_ID				= @BANK_ID
			)													AND
			-- диапазон Дат завершения исполнения обязательств
			(	@D_END_BEG	IS NULL		OR
				ISNULL( U_DOGOVOR.D_END, CONVERT(DATETIME, '30000606' ))	>= ISNULL(@D_END_BEG, CONVERT(DATETIME, '19000101'))
			)	AND
			(	@D_END_END	IS NULL		OR
				ISNULL( U_DOGOVOR.D_END, CONVERT(DATETIME, '30000606' ))	<= ISNULL(@D_END_END, CONVERT(DATETIME, '30000606'))	
			)	

	UNION

	SELECT	ISNULL(U_RESIDENTS.NAMER_S, U_RESIDENTS.NAMER)	AS NAMER,
			U_PS.RESIDENT_ID, 
			U_PS.PS_ID, 
			U_PS.N_PS,		
			ISNULL(U_PS.F1_R62_SROK, 'нет')					AS F1_R62_SROK,	
			ISNULL(U_DOGOVOR.N_DOPSOGL, U_DOGOVOR.N_KONTR)	AS N_KONTR,
			U_DOGOVOR.KVALK,		
			U_DOGOVOR.D_END,	
			ISNULL(U_DOGOVOR.KONTR_SROK, 'нет')				AS KONTR_SROK_DOG,
			U_OPLATA.OPL_ID, 
			U_OPLATA.NPP, 
			U_OPLATA.D_REFER, 
			U_OPLATA.N_REFER, 
			U_OPLATA.KODOP, 
			U_OPLATA.TYPE, 
			U_OPLATA.VALP,
			U_OPLATA.SUMP,
			U_OPLATA.VALK, 
			U_OPLATA.SUMK, 
			U_OPLATA.KONTR_SROK, 
			--[dbo].[U_NEAR_WORK_DAY]( DATEADD( dd, CONVERT( INTEGER, ISNULL(U_PS.F1_R62_SROK, 0)), U_OPLATA.D_REFER ))	
			--DATEADD(dd, CONVERT(INTEGER, ISNULL(U_PS.F1_R62_SROK, 0)), U_OPLATA.D_REFER)
			-- определение даты истечения контрактного срока по Платежу (UDF)
			[dbo].[U_OPLATA_CALC_DATE_KONTR_SROK](U_OPLATA.RESIDENT_ID, U_OPLATA.OPL_ID)
			AS	DATE_SROK,
			NULL						AS	DAYS_P,
			(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID) 
			+ 
			(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND (R.OPL_ID = U_OPLATA.OPL_ID OR R.OPL_ID2 = U_OPLATA.OPL_ID)) 
			AS	SUM_RASPR_ALL,
			U_OPLATA.SUMK - 
			(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID) 
			- 
			(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND (R.OPL_ID = U_OPLATA.OPL_ID OR R.OPL_ID2 = U_OPLATA.OPL_ID)) 
			AS	SUM_OST,
			'Возврат: '	+ 	CONVERT( VARCHAR(15), U_OPLATA2.NPP)
			AS	INFO_PRIM,
			U_OPLATA2.KODOP					AS	INFO_KODD,
			U_OPLATA2.D_REFER 				AS	INFO_D_DOC,
			U_OPLATA2.N_REFER 				AS	INFO_N_DOC,
			U_OPLATA2.SUMP					AS	INFO_SUMP,
			U_OPLATA2.SUMK					AS	INFO_SUMK,
			U_RASPRED_OPLATA_OPLATA.SUMK	AS	INFO_RASPRED_SUMK,
			U_RASPRED_OPLATA_OPLATA.D_KOR	AS	INFO_RASPRED_DATE
	FROM	U_OPLATA (NOLOCK)
	INNER	JOIN	U_USERS_RESIDENTS (NOLOCK) ON 
			U_USERS_RESIDENTS.RESIDENT_ID	= U_OPLATA.RESIDENT_ID	AND
			U_USERS_RESIDENTS.USER_ID		= @USER_ID
	INNER	JOIN	U_RESIDENTS (NOLOCK) ON
			U_RESIDENTS.RESIDENT_ID			= U_OPLATA.RESIDENT_ID	AND
			U_RESIDENTS.DEL_FLAG			IS NULL
	INNER	JOIN	U_PS (NOLOCK) ON
			U_PS.RESIDENT_ID				= U_OPLATA.RESIDENT_ID	AND
			U_PS.PS_ID						= U_OPLATA.PS_ID		AND
			U_PS.DEL_FLAG					IS NULL					AND
			(
				--в самом платеже указан контрактный срок в днях
				U_OPLATA.KONTR_SROK	<> '0000'			AND 
				U_OPLATA.KONTR_SROK	<> 'НДАН'			AND
				U_OPLATA.KONTR_SROK	<> 'СВТР'			AND
				U_OPLATA.KONTR_SROK	IS NOT NULL
			OR
				--срок по ПС контролируется (не указано обратное)
				ISNULL(U_PS.F1_R62_SROK, '')	NOT IN ('0000', 'СВТР')	AND 
				(
					-- срок по ПС указан в днях
					U_PS.F1_R62_SROK		IS NOT NULL		AND	
					U_PS.F1_R62_SROK		<> 'НДАН'		
																OR
					-- срок по ПС не указан, но указан срок по Договору ПС в днях 
					(U_PS.F1_R62_SROK IS NULL	OR U_PS.F1_R62_SROK	= 'НДАН')	AND 
					EXISTS	(	SELECT	* 
								FROM	U_DOGOVOR AS D (NOLOCK) 
								WHERE	D.RESIDENT_ID	= U_PS.RESIDENT_ID	AND
										D.DOG_ID		= U_PS.DOG_ID		AND
										D.DOG_NPP		= U_PS.DOG_NPP		AND
										D.KONTR_SROK	<> '0000'			AND 
										D.KONTR_SROK	<> 'НДАН'			AND
										D.KONTR_SROK	<> 'СВТР'			AND
										D.KONTR_SROK	IS NOT NULL
							)
				)
			)
			--[dbo].[U_NEAR_WORK_DAY]( DATEADD( dd, CONVERT( INTEGER, ISNULL(U_PS.F1_R62_SROK, 0)), U_OPLATA.D_REFER )) <= @DATE_END_SROK
			--DATEADD(dd, CONVERT(INTEGER, ISNULL(U_PS.F1_R62_SROK, 0)), U_OPLATA.D_REFER) <= @DATE_END_SROK
	INNER	JOIN	U_DOGOVOR (NOLOCK) ON
			U_DOGOVOR.RESIDENT_ID				= U_PS.RESIDENT_ID						AND
			U_DOGOVOR.DOG_ID					= U_PS.DOG_ID							AND
			U_DOGOVOR.DOG_NPP					= U_PS.DOG_NPP							AND
			U_DOGOVOR.DEL_FLAG					IS NULL		
	LEFT	OUTER JOIN	U_RASPRED_OPLATA_OPLATA (NOLOCK)	ON
			U_RASPRED_OPLATA_OPLATA.RESIDENT_ID	= U_OPLATA.RESIDENT_ID					AND 
			U_RASPRED_OPLATA_OPLATA.OPL_ID2 	= U_OPLATA.OPL_ID		
	LEFT	OUTER JOIN	U_OPLATA AS U_OPLATA2 (NOLOCK)	ON
			U_OPLATA2.RESIDENT_ID 				= U_RASPRED_OPLATA_OPLATA.RESIDENT_ID	AND 
			U_OPLATA2.OPL_ID 					= U_RASPRED_OPLATA_OPLATA.OPL_ID		
	WHERE 	U_OPLATA.DEL_FLAG		IS NULL			AND
			--DATEADD( dd, CONVERT(INTEGER, ISNULL(U_PS.F1_R62_SROK, 0)), U_OPLATA.D_REFER) <= @DATE_END_SROK	AND
			-- определение даты истечения контрактного срока по Платежу (UDF)
			[dbo].[U_OPLATA_CALC_DATE_KONTR_SROK](U_OPLATA.RESIDENT_ID, U_OPLATA.OPL_ID)	<= @DATE_END_SROK	AND
			U_OPLATA.SUMK -
			(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID) 
			- 
			(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND (R.OPL_ID = U_OPLATA.OPL_ID OR R.OPL_ID2 = U_OPLATA.OPL_ID)) > @OST_NOTRASPRED AND
			(	-- импорт товаров		
				( U_OPLATA.DIRECTION = '2'	AND
			        ( ( U_OPLATA.KODOP >= '11010'	AND U_OPLATA.KODOP <= '11060' ) 
						OR
			         ( U_OPLATA.KODOP = '35020'	AND U_OPLATA.TYPE = '2' ) )
				)	
			OR	-- импорт услуг
				( U_OPLATA.DIRECTION = '2'	AND
			       	 ( ( U_OPLATA.KODOP >= '21010'	AND U_OPLATA.KODOP <= '21040' ) 
						OR
			         ( U_OPLATA.KODOP = '35020'	AND U_OPLATA.TYPE = '4' ) )
				)	
			)	AND
			(
				@RESIDENT_ID			= 0		OR
				U_OPLATA.RESIDENT_ID	= @RESIDENT_ID
			)													AND
			U_OPLATA.PS_ID			IS NOT NULL					AND
			-- ограничение по ПС
			(
				@PS_ID				= 0	OR
				U_OPLATA.PS_ID		= @PS_ID
			)													AND
			-- ограничение по Банку ПС
			(
				@BANK_ID					= 0	OR
				U_PS.BANK_ID				= @BANK_ID
			)													AND
			-- диапазон Дат завершения исполнения обязательств
			(	@D_END_BEG	IS NULL		OR
				ISNULL( U_DOGOVOR.D_END, CONVERT(DATETIME, '30000606' ))	>= ISNULL(@D_END_BEG, CONVERT(DATETIME, '19000101'))
			)	AND
			(	@D_END_END	IS NULL		OR
				ISNULL( U_DOGOVOR.D_END, CONVERT(DATETIME, '30000606' ))	<= ISNULL(@D_END_END, CONVERT(DATETIME, '30000606'))	
			)	

	ORDER	BY NAMER, U_PS.RESIDENT_ID, U_PS.N_PS, U_PS.PS_ID, U_OPLATA.D_REFER
GO

GRANT  EXECUTE  ON [dbo].[U_CRP_CHECK_SROK_IMPORT]  TO [OPERS], [AUDITS]
GO

--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[U_CRP_CHECK_SROK_EXPORT]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[U_CRP_CHECK_SROK_EXPORT]
GO

CREATE PROCEDURE [dbo].[U_CRP_CHECK_SROK_EXPORT]
--	------------------------------------------------------------------------------------------------------------------------
--	Выборка списка ПД (экспорт товаров и экспорт услуг) по ПС 
--  для отчёта "Контроль контрактных сроков по ПС: экспорт товаров и экспорт услуг" 
--	------------------------------------------------------------------------------------------------------------------------
--  В отчёт попадают ПС: 
--	1. у которых контрактный срок на ПС (п.6.2) не равен '0000' или 'СВТР', 
--  2. ПД которых имеют контрактный срок в днях на одном из следующих уровней 
--	- контрактный срок по ПД (при этом условие 1 игнорируется);
--	- контрактный срок по ПС (п.6.2);
--	- контрактный срок по Договору.
--	
--	@USER_ID		- идентификатор Пользователя
--	@RESIDENT_ID 	- интендификатор Участника ВЭД (если = 0, то все Участники ВЭД)
--	@BANK_ID 		- идентификатор Уполномоченного банка (если 0, то все Банки)
--	@PS_ID 			- интендификатор ПС ( если = 0, то все ПС )	
--	@D_END_BEG		- нижняя граница диапазона дат окончания исполнения обязательств по контракту	
--	@D_END_END		- верхняя граница диапазона дат окончания исполнения обязательств по контракту
--	@OST_NOTRASPRED - нераспределённый остаток по ПД (>) (0 - показать с ненулевым остатком, -1 - показать все)
--	@DATE_END_SROK	- дата истечения контрактного срока (<=) (NULL - показать с истекшим сроком, '2079-01-01' - показать все)
--	--------------------------------------------------------------------------------------------------------------------------
--	(Модификация	в версии 2.1.0)
--	--------------------------------------------------------------------------------------------------------------------------
(
	@USER_ID		AS VARCHAR(30),
	@RESIDENT_ID	AS INTEGER,
	@BANK_ID		AS INTEGER			= 0,
	@PS_ID			AS INTEGER,
	@D_END_BEG		AS DATETIME,
	@D_END_END		AS DATETIME,
	@OST_NOTRASPRED	AS INTEGER,
	@DATE_END_SROK	AS SMALLDATETIME
)
AS
	SET NOCOUNT ON

	SELECT	@RESIDENT_ID	= 	ISNULL(@RESIDENT_ID, 0)
	SELECT	@BANK_ID		= 	ISNULL(@BANK_ID, 0)
	SELECT	@PS_ID 			= 	ISNULL(@PS_ID , 0)
	SELECT	@OST_NOTRASPRED	= 	ISNULL(@OST_NOTRASPRED , 0)
	SELECT	@DATE_END_SROK 	= 	ISNULL(@DATE_END_SROK , DATEADD( dd, DATEDIFF(dd, 0, GETDATE()), 0))
	--
	--	Выбираем ПД Экспорт товаров и Экспорт услуг
	--
	SELECT	ISNULL(U_RESIDENTS.NAMER_S, U_RESIDENTS.NAMER)	AS NAMER,
			U_PS.RESIDENT_ID, 
			U_PS.PS_ID, 
			U_PS.N_PS,		
			ISNULL(U_PS.F1_R62_SROK, '-')					AS F1_R62_SROK,
			ISNULL(U_DOGOVOR.N_DOPSOGL, U_DOGOVOR.N_KONTR)	AS N_KONTR,
			U_DOGOVOR.KVALK,	
			U_DOGOVOR.D_END,	
			ISNULL(U_DOGOVOR.KONTR_SROK, '-')				AS KONTR_SROK_DOG,
			U_SPR_CONFIRM.SPR_ID, 
			U_SPR_CONFIRM.NPP, 
			CONVERT( VARCHAR(15), U_SPR_CONFIRM.SPR_ID ) + ' ( ' + + CONVERT( VARCHAR(15), U_SPR_CONFIRM.NPP ) + ' )'	AS	N_SPRAVKI,
			U_SPR_CONFIRM.D_DOC, 
			U_SPR_CONFIRM.N_GTD, 
			U_SPR_CONFIRM.KODD, 
			U_SPR_CONFIRM.DIRECTION, 
			U_SPR_CONFIRM.VALP,		
			U_SPR_CONFIRM.SUMP, 
			U_SPR_CONFIRM.VALK, 
			U_SPR_CONFIRM.SUMK, 
			U_SPR_CONFIRM.KONTR_SROK, 
			--[dbo].[U_NEAR_WORK_DAY]( DATEADD( dd, CONVERT( INTEGER, ISNULL(U_PS.F1_R62_SROK, 0)), U_SPR_CONFIRM.D_DOC ))	
			--DATEADD(dd, CONVERT(INTEGER, ISNULL(U_PS.F1_R62_SROK, 0)), U_SPR_CONFIRM.D_DOC)
			-- определение даты истечения контрактного срока по ПД (UDF)
			[dbo].[U_SPR_CONFIRM_CALC_DATE_KONTR_SROK](U_SPR_CONFIRM.RESIDENT_ID, U_SPR_CONFIRM.PD_ID)
			AS	DATE_SROK,
			--DATEDIFF(dd, [dbo].[U_NEAR_WORK_DAY]( DATEADD( dd, CONVERT( INTEGER, ISNULL(U_PS.F1_R62_SROK, 0)), U_SPR_CONFIRM.D_DOC )), U_OPLATA.D_REFER )
			--DATEDIFF(dd, DATEADD(dd, CONVERT(INTEGER, ISNULL(U_PS.F1_R62_SROK, 0)), U_SPR_CONFIRM.D_DOC), U_OPLATA.D_REFER)
			-- определение разницы даты Платежа с датой истечения контрактного срока по ПД (UDF)
			DATEDIFF(dd, [dbo].[U_SPR_CONFIRM_CALC_DATE_KONTR_SROK](U_SPR_CONFIRM.RESIDENT_ID, U_SPR_CONFIRM.PD_ID), U_OPLATA.D_REFER)
			AS	DAYS_P,
			( SELECT SUM(SUMK) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_SPR_CONFIRM.RESIDENT_ID AND R.PD_ID = U_SPR_CONFIRM.PD_ID ) 
			AS	SUM_RASPR_ALL,
			U_SPR_CONFIRM.SUMK - 
			( SELECT  ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_SPR_CONFIRM.RESIDENT_ID AND R.PD_ID = U_SPR_CONFIRM.PD_ID ) 
			AS	SUM_OST,
			U_OPLATA.NPP						AS	INFO_NPP,  
			U_OPLATA.KODOP						AS	INFO_KODOP, 
			U_OPLATA.D_REFER					AS	INFO_D_REFER,  
			U_OPLATA.N_REFER					AS	INFO_N_REFER, 
			U_RASPRED_OPLATA_SPR_CONFIRM.SUMK	AS	INFO_RASPRED_SUMK,
			U_RASPRED_OPLATA_SPR_CONFIRM.D_KOR	AS	INFO_RASPRED_DATE
	FROM	U_SPR_CONFIRM (NOLOCK)
	INNER	JOIN 	U_USERS_RESIDENTS (NOLOCK) ON 
			U_USERS_RESIDENTS.RESIDENT_ID	= U_SPR_CONFIRM.RESIDENT_ID	AND
			U_USERS_RESIDENTS.USER_ID		= @USER_ID
	INNER	JOIN	U_RESIDENTS (NOLOCK) ON
			U_RESIDENTS.RESIDENT_ID			= U_SPR_CONFIRM.RESIDENT_ID	AND
			U_RESIDENTS.DEL_FLAG			IS NULL
	INNER	JOIN	U_PS (NOLOCK) ON
			U_PS.RESIDENT_ID				= U_SPR_CONFIRM.RESIDENT_ID	AND
			U_PS.PS_ID						= U_SPR_CONFIRM.PS_ID		AND
			U_PS.DEL_FLAG					IS NULL						AND
			(
				--в самом ПД указан контрактный срок в днях
				U_SPR_CONFIRM.KONTR_SROK	<> '0000'			AND 
				U_SPR_CONFIRM.KONTR_SROK	<> 'НДАН'			AND
				U_SPR_CONFIRM.KONTR_SROK	<> 'СВТР'			AND
				U_SPR_CONFIRM.KONTR_SROK	IS NOT NULL
			OR
				--срок по ПС контролируется (не указано обратное)
				ISNULL(U_PS.F1_R62_SROK, '')	NOT IN ('0000', 'СВТР')	AND 
				(
					-- срок по ПС указан в днях
					U_PS.F1_R62_SROK		IS NOT NULL		AND	
					U_PS.F1_R62_SROK		<> 'НДАН'		
																OR
					-- срок по ПС не указан, но указан срок по Договору ПС в днях 
					(U_PS.F1_R62_SROK IS NULL	OR U_PS.F1_R62_SROK	= 'НДАН')	AND 
					EXISTS	(	SELECT	* 
								FROM	U_DOGOVOR AS D (NOLOCK) 
								WHERE	D.RESIDENT_ID	= U_PS.RESIDENT_ID	AND
										D.DOG_ID		= U_PS.DOG_ID		AND
										D.DOG_NPP		= U_PS.DOG_NPP		AND
										D.KONTR_SROK	<> '0000'			AND 
										D.KONTR_SROK	<> 'НДАН'			AND
										D.KONTR_SROK	<> 'СВТР'			AND
										D.KONTR_SROK	IS NOT NULL
							)
				)
			)
			--[dbo].[U_NEAR_WORK_DAY]( DATEADD( dd, CONVERT( INTEGER, ISNULL(U_PS.F1_R62_SROK, 0)), U_SPR_CONFIRM.D_DOC )) <= @DATE_END_SROK
			--DATEADD(dd, CONVERT(INTEGER, ISNULL(U_PS.F1_R62_SROK, 0)), U_SPR_CONFIRM.D_DOC) <= @DATE_END_SROK
	INNER	JOIN	U_DOGOVOR (NOLOCK) ON
			U_DOGOVOR.RESIDENT_ID						= U_PS.RESIDENT_ID		AND
			U_DOGOVOR.DOG_ID							= U_PS.DOG_ID			AND
			U_DOGOVOR.DOG_NPP							= U_PS.DOG_NPP			AND
			U_DOGOVOR.DEL_FLAG							IS NULL		
	LEFT	OUTER JOIN	U_RASPRED_OPLATA_SPR_CONFIRM (NOLOCK) ON
			U_RASPRED_OPLATA_SPR_CONFIRM.RESIDENT_ID	= U_SPR_CONFIRM.RESIDENT_ID	AND 
			U_RASPRED_OPLATA_SPR_CONFIRM.PD_ID			= U_SPR_CONFIRM.PD_ID
	LEFT	OUTER JOIN	U_OPLATA (NOLOCK) ON
			U_OPLATA.RESIDENT_ID 						= U_RASPRED_OPLATA_SPR_CONFIRM.RESIDENT_ID	AND 
			U_OPLATA.OPL_ID								= U_RASPRED_OPLATA_SPR_CONFIRM.OPL_ID		
	WHERE	U_SPR_CONFIRM.PR_NOT_CALC	IS NULL				AND
			U_SPR_CONFIRM.DEL_FLAG		IS NULL				AND
			--DATEADD(dd, CONVERT(INTEGER, ISNULL(U_PS.F1_R62_SROK, 0)), U_SPR_CONFIRM.D_DOC) <= @DATE_END_SROK
			-- определение даты истечения контрактного срока по ПД (UDF)
			[dbo].[U_SPR_CONFIRM_CALC_DATE_KONTR_SROK](U_SPR_CONFIRM.RESIDENT_ID, U_SPR_CONFIRM.PD_ID)	<= @DATE_END_SROK	AND
			U_SPR_CONFIRM.SUMK - ( SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_SPR_CONFIRM.RESIDENT_ID AND R.PD_ID = U_SPR_CONFIRM.PD_ID ) > @OST_NOTRASPRED AND
			( 	-- экспорт товаров
				(
					U_SPR_CONFIRM.KODD >= '01' AND U_SPR_CONFIRM.KODD <= '02' AND U_SPR_CONFIRM.DIRECTION = '2' 
					OR 
					U_SPR_CONFIRM.KODD = '03'
				)								
			OR	-- экспорт услуг
				(
					U_SPR_CONFIRM.KODD = '04' AND U_SPR_CONFIRM.DIRECTION = '2' 
					OR 
					U_SPR_CONFIRM.KODD = '05'
				)	
			)													AND
			(
				@RESIDENT_ID				= 0	OR
				U_SPR_CONFIRM.RESIDENT_ID	= @RESIDENT_ID
			)													AND
			-- ограничение по ПС
			(
				@PS_ID						= 0	OR
				U_SPR_CONFIRM.PS_ID			= @PS_ID
			)													AND
			-- ограничение по Банку ПС
			(
				@BANK_ID					= 0	OR
				U_PS.BANK_ID				= @BANK_ID
			)													AND
			-- диапазон Дат завершения исполнения обязательств
			(	@D_END_BEG	IS NULL		OR
				ISNULL( U_DOGOVOR.D_END, CONVERT(DATETIME, '30000606' ))	>= ISNULL(@D_END_BEG, CONVERT(DATETIME, '19000101'))
			)	AND
			(	@D_END_END	IS NULL		OR
				ISNULL( U_DOGOVOR.D_END, CONVERT(DATETIME, '30000606' ))	<= ISNULL(@D_END_END, CONVERT(DATETIME, '30000606'))	
			)	
	ORDER	BY NAMER, U_PS.RESIDENT_ID, U_PS.N_PS, U_PS.PS_ID, U_SPR_CONFIRM.D_DOC
GO

GRANT  EXECUTE  ON [dbo].[U_CRP_CHECK_SROK_EXPORT]  TO [OPERS], [AUDITS]
GO

--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[U_CRP_RASPRED_IMPORT_TOV]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[U_CRP_RASPRED_IMPORT_TOV]
GO

CREATE PROCEDURE [dbo].[U_CRP_RASPRED_IMPORT_TOV]
--	----------------------------------------------------------------------------------------------------------------
--	Отчёт "Контроль распределения: импорт товаров (Платежи на ПД)"
--	(основная форма)
--	----------------------------------------------------------------------------------------------------------------
--	Выборка списка Платежей (импорт товаров) по Договору (контракту) и распределения по Платежам на ПД и возвраты
--	
--	@USER_ID		- идентификатор Пользователя
--	@RESIDENT_ID 	- интендификатор Участника ВЭД (если = 0, то по всем Участникам ВЭД)
--	@DOG_ID 		- интендификатор Договора (контракта) ( если = 0, то по всем Договорам (контрактам) )	
--	@D_END_BEG		- нижняя граница диапазона дат окончания исполнения обязательств по контракту	
--	@D_END_END		- верхняя граница диапазона дат окончания исполнения обязательств по контракту
--	@OST_NOTRASPRED - нераспределённый остаток по платежу (>) (0 - показать с ненулевым остатком, -1 - показать все)
--	----------------------------------------------------------------------------------------------------------------
--	(Модификация	в версии 2.1.0)
--	----------------------------------------------------------------------------------------------------------------
(
	@USER_ID		AS VARCHAR(30),
	@RESIDENT_ID	AS INTEGER,
	@DOG_ID			AS INTEGER,
	@D_END_BEG		AS DATETIME		=	NULL,
	@D_END_END		AS DATETIME		=	NULL,
	@OST_NOTRASPRED	AS INTEGER
)
AS
	SET NOCOUNT ON

	SELECT	@RESIDENT_ID	= 	ISNULL(@RESIDENT_ID, 0)
	SELECT	@DOG_ID 		= 	ISNULL(@DOG_ID , 0)
	SELECT	@OST_NOTRASPRED	= 	ISNULL(@OST_NOTRASPRED , 0)
	
	--	1.
	--	Выбираем Платежи Импорт товаров, ссылка на ПС, распределение на ПД
	--
	SELECT	ISNULL(U_RESIDENTS.NAMER_S, U_RESIDENTS.NAMER)						AS NAMER,
			U_DOGOVOR.RESIDENT_ID, 
			U_DOGOVOR.DOG_ID, 
			U_DOGOVOR.N_KONTR,
			U_DOGOVOR.D_KONTR,
			U_IN_PART.NAMEP,
			--	Дата завершения исполнения обязательств по Договору 
			[dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID)	AS D_END_FOR_DOG_ID,
			U_PS.N_PS															AS N_PS,		
			U_OPLATA.OPL_ID, 	
			U_OPLATA.NPP, 
			U_OPLATA.D_REFER, 
			U_OPLATA.N_REFER, 
			U_OPLATA.KODOP, 
			U_OPLATA.TYPE, 
			U_OPLATA.VALP,
			U_OPLATA.SUMP,
			U_OPLATA.VALK, 
			U_OPLATA.SUMK, 
			(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID) 
			+ 
			(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND (R.OPL_ID = U_OPLATA.OPL_ID OR R.OPL_ID2 = U_OPLATA.OPL_ID)) 
			AS SUM_RASPR_ALL,
			U_OPLATA.SUMK - 
			(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID) 
			- 
			(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND (R.OPL_ID = U_OPLATA.OPL_ID OR R.OPL_ID2 = U_OPLATA.OPL_ID)) 
			AS	SUM_OST,
			'ПД : ' + CONVERT( VARCHAR(15), U_SPR_CONFIRM.SPR_ID ) + ' ( ' + + CONVERT( VARCHAR(15), U_SPR_CONFIRM.NPP ) + ' )'
			AS	INFO_PRIM,
			U_SPR_CONFIRM.KODD					AS	INFO_KODD,
			U_SPR_CONFIRM.D_DOC 				AS	INFO_D_DOC,
			U_SPR_CONFIRM.N_GTD 				AS	INFO_N_DOC,
			U_SPR_CONFIRM.VALP					AS	INFO_VALP,
			U_SPR_CONFIRM.SUMP					AS	INFO_SUMP,
			U_SPR_CONFIRM.SUMK					AS	INFO_SUMK,
			U_RASPRED_OPLATA_SPR_CONFIRM.SUMK	AS	INFO_RASPRED_SUMK,
			U_RASPRED_OPLATA_SPR_CONFIRM.D_KOR	AS	INFO_RASPRED_DATE,
			CASE
				WHEN	U_SPR_CONFIRM.PS_ID	IS NOT NULL		AND
						U_OPLATA.PS_ID		<> U_SPR_CONFIRM.PS_ID
				THEN	'*'
				ELSE	NULL
			END									AS	PRIZ_DR_PS
	FROM	U_OPLATA (NOLOCK)
	INNER	JOIN	U_USERS_RESIDENTS (NOLOCK) ON 
			U_USERS_RESIDENTS.RESIDENT_ID	= U_OPLATA.RESIDENT_ID	AND
			U_USERS_RESIDENTS.USER_ID		= @USER_ID
	INNER	JOIN 	U_RESIDENTS (NOLOCK) ON
			U_RESIDENTS.RESIDENT_ID			= U_OPLATA.RESIDENT_ID	AND
			U_RESIDENTS.DEL_FLAG			IS NULL
	INNER	JOIN	U_PS	(NOLOCK) ON
			U_PS.RESIDENT_ID				= U_OPLATA.RESIDENT_ID	AND
			U_PS.PS_ID						= U_OPLATA.PS_ID		AND
			U_PS.DEL_FLAG					IS NULL
	INNER	JOIN	U_DOGOVOR (NOLOCK) ON
			U_DOGOVOR.RESIDENT_ID			= U_PS.RESIDENT_ID		AND
			U_DOGOVOR.DOG_ID				= U_PS.DOG_ID			AND
			U_DOGOVOR.DOG_NPP				= U_PS.DOG_NPP			AND
			U_DOGOVOR.DEL_FLAG				IS NULL			
	INNER	JOIN U_IN_PART (NOLOCK) ON	
			U_IN_PART.PARTNER_ID			= U_DOGOVOR.PARTNER_ID	AND
			U_IN_PART.DEL_FLAG				IS NULL		
	LEFT	OUTER JOIN	U_RASPRED_OPLATA_SPR_CONFIRM (NOLOCK) ON
			U_RASPRED_OPLATA_SPR_CONFIRM.RESIDENT_ID	= U_OPLATA.RESIDENT_ID	AND 
			U_RASPRED_OPLATA_SPR_CONFIRM.OPL_ID			= U_OPLATA.OPL_ID 		
	LEFT	OUTER JOIN	U_SPR_CONFIRM (NOLOCK) ON
			U_SPR_CONFIRM.RESIDENT_ID 		= U_RASPRED_OPLATA_SPR_CONFIRM.RESIDENT_ID	AND 
			U_SPR_CONFIRM.PD_ID 			= U_RASPRED_OPLATA_SPR_CONFIRM.PD_ID
	WHERE 	U_OPLATA.DEL_FLAG			IS NULL					AND
			U_OPLATA.SUMK -
			(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID) 
			- 
			(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND (R.OPL_ID = U_OPLATA.OPL_ID OR R.OPL_ID2 = U_OPLATA.OPL_ID)) > @OST_NOTRASPRED AND
			-- Платежи Импорт товаров
			( U_OPLATA.DIRECTION = '2'	AND
		       	 ( ( U_OPLATA.KODOP >= '11010'	AND U_OPLATA.KODOP <= '11060' ) 
				OR
		         ( U_OPLATA.KODOP = '35020'	AND U_OPLATA.TYPE = '2' ) )
			)													AND
			-- отбор по Участнику ВЭД
			(
				@RESIDENT_ID			= 0		OR
				U_OPLATA.RESIDENT_ID	= @RESIDENT_ID
			)													AND
			-- Платёжи по ПС
			U_OPLATA.PS_ID				IS NOT NULL				AND
			-- отбор по Договору (контракту)
			(
				@DOG_ID					= 0	OR
				U_DOGOVOR.DOG_ID		= @DOG_ID
			)													AND
			-- отбор по диапазону Даты завершения исполнения обязательств
			(	@D_END_BEG	IS NULL		OR
				ISNULL( [dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID), CONVERT(DATETIME, '30000606' ))	>= ISNULL(@D_END_BEG, CONVERT(DATETIME, '19000101'))
			)	AND
			(	@D_END_END	IS NULL		OR
				ISNULL( [dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID), CONVERT(DATETIME, '30000606' ))	<= ISNULL(@D_END_END, CONVERT(DATETIME, '30000606'))	
			)	

	UNION
	--	2.
	--	Выбираем Платежи Импорт товаров, ссылка на Договор (контракт), распределение на ПД
	--
	SELECT	ISNULL(U_RESIDENTS.NAMER_S, U_RESIDENTS.NAMER)						AS NAMER,
			U_DOGOVOR.RESIDENT_ID, 
			U_DOGOVOR.DOG_ID, 
			U_DOGOVOR.N_KONTR,
			U_DOGOVOR.D_KONTR,
			U_IN_PART.NAMEP,
			--	Дата завершения исполнения обязательств по Договору 
			[dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID)	AS D_END_FOR_DOG_ID,
			NULL																AS N_PS,		
			U_OPLATA.OPL_ID, 	
			U_OPLATA.NPP, 
			U_OPLATA.D_REFER, 
			U_OPLATA.N_REFER, 
			U_OPLATA.KODOP, 
			U_OPLATA.TYPE, 
			U_OPLATA.VALP,
			U_OPLATA.SUMP,
			U_OPLATA.VALK, 
			U_OPLATA.SUMK, 
			(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID) 
			+ 
			(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND (R.OPL_ID = U_OPLATA.OPL_ID OR R.OPL_ID2 = U_OPLATA.OPL_ID)) 
			AS SUM_RASPR_ALL,
			U_OPLATA.SUMK - 
			(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID) 
			- 
			(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND (R.OPL_ID = U_OPLATA.OPL_ID OR R.OPL_ID2 = U_OPLATA.OPL_ID)) 
			AS	SUM_OST,
			'ПД : ' + CONVERT( VARCHAR(15), U_SPR_CONFIRM.SPR_ID ) + ' ( ' + + CONVERT( VARCHAR(15), U_SPR_CONFIRM.NPP ) + ' )'
			AS	INFO_PRIM,
			U_SPR_CONFIRM.KODD					AS	INFO_KODD,
			U_SPR_CONFIRM.D_DOC 				AS	INFO_D_DOC,
			U_SPR_CONFIRM.N_GTD 				AS	INFO_N_DOC,
			U_SPR_CONFIRM.VALP					AS	INFO_VALP,
			U_SPR_CONFIRM.SUMP					AS	INFO_SUMP,
			U_SPR_CONFIRM.SUMK					AS	INFO_SUMK,
			U_RASPRED_OPLATA_SPR_CONFIRM.SUMK	AS	INFO_RASPRED_SUMK,
			U_RASPRED_OPLATA_SPR_CONFIRM.D_KOR	AS	INFO_RASPRED_DATE,
			NULL								AS	PRIZ_DR_PS
	FROM	U_OPLATA (NOLOCK)
	INNER	JOIN	U_USERS_RESIDENTS (NOLOCK) ON 
			U_USERS_RESIDENTS.RESIDENT_ID	= U_OPLATA.RESIDENT_ID	AND
			U_USERS_RESIDENTS.USER_ID		= @USER_ID
	INNER	JOIN 	U_RESIDENTS (NOLOCK) ON
			U_RESIDENTS.RESIDENT_ID			= U_OPLATA.RESIDENT_ID	AND
			U_RESIDENTS.DEL_FLAG			IS NULL
	INNER	JOIN	U_DOGOVOR (NOLOCK) ON
			U_DOGOVOR.RESIDENT_ID			= U_OPLATA.RESIDENT_ID	AND
			U_DOGOVOR.DOG_ID				= U_OPLATA.DOG_ID		AND
			U_DOGOVOR.DOG_NPP				= U_OPLATA.DOG_NPP		AND
			U_DOGOVOR.DEL_FLAG				IS NULL			
	INNER	JOIN U_IN_PART (NOLOCK) ON	
			U_IN_PART.PARTNER_ID			= U_DOGOVOR.PARTNER_ID	AND
			U_IN_PART.DEL_FLAG				IS NULL		
	LEFT	OUTER JOIN	U_RASPRED_OPLATA_SPR_CONFIRM (NOLOCK) ON
			U_RASPRED_OPLATA_SPR_CONFIRM.RESIDENT_ID	= U_OPLATA.RESIDENT_ID	AND 
			U_RASPRED_OPLATA_SPR_CONFIRM.OPL_ID			= U_OPLATA.OPL_ID 		
	LEFT	OUTER JOIN	U_SPR_CONFIRM (NOLOCK) ON
			U_SPR_CONFIRM.RESIDENT_ID 		= U_RASPRED_OPLATA_SPR_CONFIRM.RESIDENT_ID	AND 
			U_SPR_CONFIRM.PD_ID 			= U_RASPRED_OPLATA_SPR_CONFIRM.PD_ID
	WHERE 	U_OPLATA.DEL_FLAG			IS NULL					AND
			U_OPLATA.SUMK -
			(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID) 
			- 
			(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND (R.OPL_ID = U_OPLATA.OPL_ID OR R.OPL_ID2 = U_OPLATA.OPL_ID)) > @OST_NOTRASPRED AND
			-- Платежи Импорт товаров
			( U_OPLATA.DIRECTION = '2'	AND
		       	 ( ( U_OPLATA.KODOP >= '11010'	AND U_OPLATA.KODOP <= '11060' ) 
				OR
		         ( U_OPLATA.KODOP = '35020'	AND U_OPLATA.TYPE = '2' ) )
			)													AND
			-- отбор по Участнику ВЭД
			(
				@RESIDENT_ID			= 0		OR
				U_OPLATA.RESIDENT_ID	= @RESIDENT_ID
			)													AND
			-- Платёжи по Договору (контракту) (без ПС)
			U_OPLATA.PS_ID				IS NULL					AND
			U_OPLATA.DOG_ID				IS NOT NULL				AND
			-- отбор по Договору (контракту)
			(
				@DOG_ID					= 0	OR
				U_DOGOVOR.DOG_ID		= @DOG_ID
			)													AND
			-- отбор по диапазону Даты завершения исполнения обязательств
			(	@D_END_BEG	IS NULL		OR
				ISNULL( [dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID), CONVERT(DATETIME, '30000606' ))	>= ISNULL(@D_END_BEG, CONVERT(DATETIME, '19000101'))
			)	AND
			(	@D_END_END	IS NULL		OR
				ISNULL( [dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID), CONVERT(DATETIME, '30000606' ))	<= ISNULL(@D_END_END, CONVERT(DATETIME, '30000606'))	
			)	

	UNION
	--	3.
	--	Выбираем Платежи Импорт товаров, ссылка на ПС, распределение на Возвраты
	--
	SELECT	ISNULL(U_RESIDENTS.NAMER_S, U_RESIDENTS.NAMER)						AS NAMER,
			U_OPLATA.RESIDENT_ID, 
			U_DOGOVOR.DOG_ID, 
			U_DOGOVOR.N_KONTR,
			U_DOGOVOR.D_KONTR,
			U_IN_PART.NAMEP,
			--	Дата завершения исполнения обязательств по Договору 
			[dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID)	AS D_END_FOR_DOG_ID,
			U_PS.N_PS															AS N_PS,		
			U_OPLATA.OPL_ID, 
			U_OPLATA.NPP, 
			U_OPLATA.D_REFER, 
			U_OPLATA.N_REFER, 
			U_OPLATA.KODOP, 
			U_OPLATA.TYPE, 
			U_OPLATA.VALP,
			U_OPLATA.SUMP,
			U_OPLATA.VALK, 
			U_OPLATA.SUMK, 
			(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID) 
			+ 
			(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND (R.OPL_ID = U_OPLATA.OPL_ID OR R.OPL_ID2 = U_OPLATA.OPL_ID)) 
			AS	SUM_RASPR_ALL,
			U_OPLATA.SUMK - 
			(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID) 
			- 
			(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND (R.OPL_ID = U_OPLATA.OPL_ID OR R.OPL_ID2 = U_OPLATA.OPL_ID)) 
			AS	SUM_OST,
			'Воз: '	+ 	CONVERT( VARCHAR(15), U_OPLATA2.NPP)
			AS	INFO_PRIM,
			U_OPLATA2.KODOP					AS	INFO_KODD,
			U_OPLATA2.D_REFER 				AS	INFO_D_DOC,
			U_OPLATA2.N_REFER 				AS	INFO_N_DOC,
			U_OPLATA2.VALP					AS	INFO_VALP,
			U_OPLATA2.SUMP					AS	INFO_SUMP,
			U_OPLATA2.SUMK					AS	INFO_SUMK,
			U_RASPRED_OPLATA_OPLATA.SUMK	AS	INFO_RASPRED_SUMK,
			U_RASPRED_OPLATA_OPLATA.D_KOR	AS	INFO_RASPRED_DATE,
			CASE
				WHEN	U_OPLATA2.PS_ID		IS NOT NULL		AND
						U_OPLATA.PS_ID		<> U_OPLATA2.PS_ID
				THEN	'*'
				ELSE	NULL
			END								AS	PRIZ_DR_PS
	FROM	U_OPLATA (NOLOCK)
	INNER	JOIN	U_USERS_RESIDENTS (NOLOCK) ON 
			U_USERS_RESIDENTS.RESIDENT_ID	= U_OPLATA.RESIDENT_ID	AND
			U_USERS_RESIDENTS.USER_ID		= @USER_ID
	INNER	JOIN	U_RESIDENTS (NOLOCK) ON
			U_RESIDENTS.RESIDENT_ID			= U_OPLATA.RESIDENT_ID	AND
			U_RESIDENTS.DEL_FLAG			IS NULL
	INNER	JOIN	U_PS	(NOLOCK) ON
			U_PS.RESIDENT_ID				= U_OPLATA.RESIDENT_ID	AND
			U_PS.PS_ID						= U_OPLATA.PS_ID		AND
			U_PS.DEL_FLAG					IS NULL
	INNER	JOIN	U_DOGOVOR (NOLOCK) ON
			U_DOGOVOR.RESIDENT_ID			= U_PS.RESIDENT_ID		AND
			U_DOGOVOR.DOG_ID				= U_PS.DOG_ID			AND
			U_DOGOVOR.DOG_NPP				= U_PS.DOG_NPP			AND
			U_DOGOVOR.DEL_FLAG				IS NULL		
	INNER	JOIN U_IN_PART (NOLOCK) ON	
			U_IN_PART.PARTNER_ID			= U_DOGOVOR.PARTNER_ID	AND
			U_IN_PART.DEL_FLAG				IS NULL		
	LEFT	OUTER JOIN	U_RASPRED_OPLATA_OPLATA (NOLOCK)	ON
			U_RASPRED_OPLATA_OPLATA.RESIDENT_ID = U_OPLATA.RESIDENT_ID	AND 
			U_RASPRED_OPLATA_OPLATA.OPL_ID2 	= U_OPLATA.OPL_ID		
	LEFT	OUTER JOIN	U_OPLATA AS U_OPLATA2 (NOLOCK)	ON
			U_OPLATA2.RESIDENT_ID 			= U_RASPRED_OPLATA_OPLATA.RESIDENT_ID	AND 
			U_OPLATA2.OPL_ID 				= U_RASPRED_OPLATA_OPLATA.OPL_ID
	WHERE 	U_OPLATA.DEL_FLAG			IS NULL				AND
			U_OPLATA.SUMK -
			(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID) 
			- 
			(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND (R.OPL_ID = U_OPLATA.OPL_ID OR R.OPL_ID2 = U_OPLATA.OPL_ID)) > @OST_NOTRASPRED AND
			-- Платежи Импорт товаров
			( U_OPLATA.DIRECTION = '2'	AND
		        ( ( U_OPLATA.KODOP >= '11010'	AND U_OPLATA.KODOP <= '11060' ) 
				OR
		          ( U_OPLATA.KODOP = '35020'	AND U_OPLATA.TYPE = '2' ) )
			)												AND
			-- отбор по Участнику ВЭД
			(
				@RESIDENT_ID			= 0	OR
				U_OPLATA.RESIDENT_ID	= @RESIDENT_ID
			)												AND
			-- Платёжи по ПС
			U_OPLATA.PS_ID				IS NOT NULL			AND
			-- отбор по Договору (контракту)	
			(
				@DOG_ID					= 0	OR
				U_DOGOVOR.DOG_ID		= @DOG_ID
			)												AND
			-- отбор по диапазону Даты завершения исполнения обязательств
			(	@D_END_BEG	IS NULL		OR
				ISNULL( [dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID), CONVERT(DATETIME, '30000606' ))	>= ISNULL(@D_END_BEG, CONVERT(DATETIME, '19000101'))
			)	AND
			(	@D_END_END	IS NULL		OR
				ISNULL( [dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID), CONVERT(DATETIME, '30000606' ))	<= ISNULL(@D_END_END, CONVERT(DATETIME, '30000606'))	
			)	

	UNION
	--	4.
	--	Выбираем Платежи Импорт товаров, ссылка на Договор (контракт), распределение на Возвраты
	--
	SELECT	ISNULL(U_RESIDENTS.NAMER_S, U_RESIDENTS.NAMER)						AS NAMER,
			U_OPLATA.RESIDENT_ID, 
			U_DOGOVOR.DOG_ID, 
			U_DOGOVOR.N_KONTR,
			U_DOGOVOR.D_KONTR,
			U_IN_PART.NAMEP,
			--	Дата завершения исполнения обязательств по Договору 
			[dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID)	AS D_END_FOR_DOG_ID,
			NULL																AS N_PS,		
			U_OPLATA.OPL_ID, 
			U_OPLATA.NPP, 
			U_OPLATA.D_REFER, 
			U_OPLATA.N_REFER, 
			U_OPLATA.KODOP, 
			U_OPLATA.TYPE, 
			U_OPLATA.VALP,
			U_OPLATA.SUMP,
			U_OPLATA.VALK, 
			U_OPLATA.SUMK, 
			(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID) 
			+ 
			(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND (R.OPL_ID = U_OPLATA.OPL_ID OR R.OPL_ID2 = U_OPLATA.OPL_ID)) 
			AS	SUM_RASPR_ALL,
			U_OPLATA.SUMK - 
			(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID) 
			- 
			(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND (R.OPL_ID = U_OPLATA.OPL_ID OR R.OPL_ID2 = U_OPLATA.OPL_ID)) 
			AS	SUM_OST,
			'Воз: '	+ 	CONVERT( VARCHAR(15), U_OPLATA2.NPP)
			AS	INFO_PRIM,
			U_OPLATA2.KODOP					AS	INFO_KODD,
			U_OPLATA2.D_REFER 				AS	INFO_D_DOC,
			U_OPLATA2.N_REFER 				AS	INFO_N_DOC,
			U_OPLATA2.VALP					AS	INFO_VALP,
			U_OPLATA2.SUMP					AS	INFO_SUMP,
			U_OPLATA2.SUMK					AS	INFO_SUMK,
			U_RASPRED_OPLATA_OPLATA.SUMK	AS	INFO_RASPRED_SUMK,
			U_RASPRED_OPLATA_OPLATA.D_KOR	AS	INFO_RASPRED_DATE,
			NULL							AS	PRIZ_DR_PS
	FROM	U_OPLATA (NOLOCK)
	INNER	JOIN	U_USERS_RESIDENTS (NOLOCK) ON 
			U_USERS_RESIDENTS.RESIDENT_ID	= U_OPLATA.RESIDENT_ID	AND
			U_USERS_RESIDENTS.USER_ID		= @USER_ID
	INNER	JOIN	U_RESIDENTS (NOLOCK) ON
			U_RESIDENTS.RESIDENT_ID			= U_OPLATA.RESIDENT_ID	AND
			U_RESIDENTS.DEL_FLAG			IS NULL
	INNER	JOIN	U_DOGOVOR (NOLOCK) ON
			U_DOGOVOR.RESIDENT_ID			= U_OPLATA.RESIDENT_ID	AND
			U_DOGOVOR.DOG_ID				= U_OPLATA.DOG_ID		AND
			U_DOGOVOR.DOG_NPP				= U_OPLATA.DOG_NPP		AND
			U_DOGOVOR.DEL_FLAG				IS NULL		
	INNER	JOIN U_IN_PART (NOLOCK) ON	
			U_IN_PART.PARTNER_ID			= U_DOGOVOR.PARTNER_ID	AND
			U_IN_PART.DEL_FLAG				IS NULL		
	LEFT	OUTER JOIN	U_RASPRED_OPLATA_OPLATA (NOLOCK)	ON
			U_RASPRED_OPLATA_OPLATA.RESIDENT_ID = U_OPLATA.RESIDENT_ID	AND 
			U_RASPRED_OPLATA_OPLATA.OPL_ID2 	= U_OPLATA.OPL_ID		
	LEFT	OUTER JOIN	U_OPLATA AS U_OPLATA2 (NOLOCK)	ON
			U_OPLATA2.RESIDENT_ID 			= U_RASPRED_OPLATA_OPLATA.RESIDENT_ID	AND 
			U_OPLATA2.OPL_ID 				= U_RASPRED_OPLATA_OPLATA.OPL_ID
	WHERE 	U_OPLATA.DEL_FLAG			IS NULL				AND
			U_OPLATA.SUMK -
			(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID) 
			- 
			(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND (R.OPL_ID = U_OPLATA.OPL_ID OR R.OPL_ID2 = U_OPLATA.OPL_ID)) > @OST_NOTRASPRED AND
			-- Платежи Импорт товаров
			( U_OPLATA.DIRECTION = '2'	AND
		        ( ( U_OPLATA.KODOP >= '11010'	AND U_OPLATA.KODOP <= '11060' ) 
				OR
		          ( U_OPLATA.KODOP = '35020'	AND U_OPLATA.TYPE = '2' ) )
			)												AND
			-- отбор по Участнику ВЭД
			(
				@RESIDENT_ID			= 0	OR
				U_OPLATA.RESIDENT_ID	= @RESIDENT_ID
			)												AND
			-- Платёжи по Договору (контракту) (без ПС)
			U_OPLATA.PS_ID				IS NULL				AND
			U_OPLATA.DOG_ID				IS NOT NULL			AND
			-- отбор по Договору (контракту)			
			(
				@DOG_ID					= 0	OR
				U_DOGOVOR.DOG_ID		= @DOG_ID
			)												AND
			-- отбор по диапазону Даты завершения исполнения обязательств
			(	@D_END_BEG	IS NULL		OR
				ISNULL( [dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID), CONVERT(DATETIME, '30000606' ))	>= ISNULL(@D_END_BEG, CONVERT(DATETIME, '19000101'))
			)	AND
			(	@D_END_END	IS NULL		OR
				ISNULL( [dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID), CONVERT(DATETIME, '30000606' ))	<= ISNULL(@D_END_END, CONVERT(DATETIME, '30000606'))	
			)	
	ORDER	BY NAMER, U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.D_KONTR, U_DOGOVOR.N_KONTR, U_DOGOVOR.DOG_ID, U_OPLATA.D_REFER
GO

GRANT  EXECUTE  ON [dbo].[U_CRP_RASPRED_IMPORT_TOV]  TO [OPERS], [AUDITS]
GO

--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[U_CRP_RASPRED_IMPORT_TOV__PD_OPLATA]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[U_CRP_RASPRED_IMPORT_TOV__PD_OPLATA]
GO

CREATE PROCEDURE [dbo].[U_CRP_RASPRED_IMPORT_TOV__PD_OPLATA]
--	--------------------------------------------------------------------------------------------------------------
--	Отчёт "Контроль распределения: импорт товаров (ПД на Платежи)"
--	(дополнительная форма)
--	--------------------------------------------------------------------------------------------------------------
--	Выборка списка ПД (импорт товаров) по Договору (контракту) и распределения по ПД на Платежи
--	
--	@USER_ID		- идентификатор Пользователя
--	@RESIDENT_ID 	- интендификатор Участника ВЭД (если = 0, то все Участники ВЭД)
--	@DOG_ID 		- интендификатор Договора (контракта) ( если = 0, то по всем Договорам (контрактам) )	
--	@D_END_BEG		- нижняя граница диапазона дат окончания исполнения обязательств по контракту	
--	@D_END_END		- верхняя граница диапазона дат окончания исполнения обязательств по контракту
--	@OST_NOTRASPRED - нераспределённый остаток по ПД (>) (0 - показать с ненулевым остатком, -1 - показать все)
--	--------------------------------------------------------------------------------------------------------------
--	(Модификация	в версии 2.1.0)
--	--------------------------------------------------------------------------------------------------------------
(
	@USER_ID		AS VARCHAR(30),
	@RESIDENT_ID	AS INTEGER,
	@DOG_ID			AS INTEGER,
	@D_END_BEG		AS DATETIME		=	NULL,
	@D_END_END		AS DATETIME		=	NULL,
	@OST_NOTRASPRED	AS INTEGER
)
AS
	SET NOCOUNT ON

	SELECT	@RESIDENT_ID	= 	ISNULL(@RESIDENT_ID, 0)
	SELECT	@DOG_ID			= 	ISNULL(@DOG_ID , 0)
	SELECT	@OST_NOTRASPRED	= 	ISNULL(@OST_NOTRASPRED , 0)
	
	--	1.
	--	Выбираем ПД Импорт товаров, ссылка на ПС, распределение на Платежи
	--
	SELECT	ISNULL(U_RESIDENTS.NAMER_S, U_RESIDENTS.NAMER)						AS NAMER,
			U_DOGOVOR.RESIDENT_ID, 
			U_DOGOVOR.DOG_ID, 
			U_DOGOVOR.N_KONTR,
			U_DOGOVOR.D_KONTR,
			U_IN_PART.NAMEP,
			--	Дата завершения исполнения обязательств по Договору 
			[dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID)	AS D_END_FOR_DOG_ID,
			U_PS.N_PS															AS N_PS,
			U_SPR_CONFIRM.PD_ID, 	
			U_SPR_CONFIRM.SPR_ID, 
			U_SPR_CONFIRM.NPP, 
			U_SPR_CONFIRM.D_DOC, 
			U_SPR_CONFIRM.N_GTD, 
			U_SPR_CONFIRM.KODD, 
			U_SPR_CONFIRM.DIRECTION, 
			U_SPR_CONFIRM.VALP,		
			U_SPR_CONFIRM.SUMP, 
			U_SPR_CONFIRM.VALK, 
			U_SPR_CONFIRM.SUMK, 
			( SELECT SUM(SUMK) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_SPR_CONFIRM.RESIDENT_ID AND R.PD_ID = U_SPR_CONFIRM.PD_ID) 
			AS	SUM_RASPR_ALL,
			U_SPR_CONFIRM.SUMK - 
			( SELECT  ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_SPR_CONFIRM.RESIDENT_ID AND R.PD_ID = U_SPR_CONFIRM.PD_ID) 
			AS	SUM_OST,
			U_OPLATA.NPP						AS	INFO_NPP,  
			U_OPLATA.KODOP						AS	INFO_KODOP, 
			U_OPLATA.D_REFER					AS	INFO_D_REFER,  
			U_OPLATA.N_REFER					AS	INFO_N_REFER, 
			U_OPLATA.VALP						AS	INFO_VALP,
			U_OPLATA.SUMP						AS	INFO_SUMP,
			U_OPLATA.SUMK						AS	INFO_SUMK,
			U_RASPRED_OPLATA_SPR_CONFIRM.SUMK	AS	INFO_RASPRED_SUMK,
			U_RASPRED_OPLATA_SPR_CONFIRM.D_KOR	AS	INFO_RASPRED_DATE,
			CASE
				WHEN	U_OPLATA.PS_ID		IS NOT NULL		AND
						U_SPR_CONFIRM.PS_ID	<> U_OPLATA.PS_ID
				THEN	'*'
				ELSE	NULL
			END									AS	PRIZ_DR_PS
	FROM	U_SPR_CONFIRM (NOLOCK)
	INNER	JOIN 	U_USERS_RESIDENTS (NOLOCK) ON 
			U_USERS_RESIDENTS.RESIDENT_ID	= U_SPR_CONFIRM.RESIDENT_ID	AND
			U_USERS_RESIDENTS.USER_ID		= @USER_ID
	INNER	JOIN	U_RESIDENTS (NOLOCK) ON
			U_RESIDENTS.RESIDENT_ID			= U_SPR_CONFIRM.RESIDENT_ID	AND
			U_RESIDENTS.DEL_FLAG			IS NULL
	INNER	JOIN	U_PS (NOLOCK) ON
			U_PS.RESIDENT_ID				= U_SPR_CONFIRM.RESIDENT_ID	AND
			U_PS.PS_ID						= U_SPR_CONFIRM.PS_ID		AND
			U_PS.DEL_FLAG					IS NULL				
	INNER	JOIN	U_DOGOVOR (NOLOCK) ON
			U_DOGOVOR.RESIDENT_ID			= U_PS.RESIDENT_ID			AND
			U_DOGOVOR.DOG_ID				= U_PS.DOG_ID				AND
			U_DOGOVOR.DOG_NPP				= U_PS.DOG_NPP				AND
			U_DOGOVOR.DEL_FLAG				IS NULL		
	INNER	JOIN U_IN_PART (NOLOCK) ON	
			U_IN_PART.PARTNER_ID			= U_DOGOVOR.PARTNER_ID		AND
			U_IN_PART.DEL_FLAG				IS NULL		
	LEFT	OUTER JOIN	U_RASPRED_OPLATA_SPR_CONFIRM (NOLOCK) ON
			U_RASPRED_OPLATA_SPR_CONFIRM.RESIDENT_ID	= U_SPR_CONFIRM.RESIDENT_ID	AND 
			U_RASPRED_OPLATA_SPR_CONFIRM.PD_ID			= U_SPR_CONFIRM.PD_ID 	
	LEFT	OUTER JOIN	U_OPLATA (NOLOCK) ON
			U_OPLATA.RESIDENT_ID 			= U_RASPRED_OPLATA_SPR_CONFIRM.RESIDENT_ID	AND 
			U_OPLATA.OPL_ID					= U_RASPRED_OPLATA_SPR_CONFIRM.OPL_ID		
	WHERE	U_SPR_CONFIRM.PR_NOT_CALC	IS NULL				AND
			U_SPR_CONFIRM.DEL_FLAG		IS NULL				AND
			U_SPR_CONFIRM.SUMK - ( SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_SPR_CONFIRM.RESIDENT_ID AND R.PD_ID = U_SPR_CONFIRM.PD_ID) > @OST_NOTRASPRED AND
			-- ПД Импорт товаров
			U_SPR_CONFIRM.KODD >= '01' AND U_SPR_CONFIRM.KODD <= '02' AND U_SPR_CONFIRM.DIRECTION = '1'	AND
			-- отбор по Участнику ВЭД
			(
				@RESIDENT_ID				= 0	OR
				U_SPR_CONFIRM.RESIDENT_ID	= @RESIDENT_ID
			)												AND
			-- ПД по ПС
			U_SPR_CONFIRM.PS_ID				IS NOT NULL		AND
			-- отбор по Договору (контракту)
			(
				@DOG_ID						= 0	OR
				U_DOGOVOR.DOG_ID			= @DOG_ID
			)												AND
			-- отбор по диапазону Даты завершения исполнения обязательств
			(	@D_END_BEG	IS NULL		OR
				ISNULL( [dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID), CONVERT(DATETIME, '30000606' ))	>= ISNULL(@D_END_BEG, CONVERT(DATETIME, '19000101'))
			)	AND
			(	@D_END_END	IS NULL		OR
				ISNULL( [dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID), CONVERT(DATETIME, '30000606' ))	<= ISNULL(@D_END_END, CONVERT(DATETIME, '30000606'))	
			)	

	UNION
	--	2.
	--	Выбираем ПД Импорт товаров, ссылка на Договор (контракт), распределение на Платежи
	--
	SELECT	ISNULL(U_RESIDENTS.NAMER_S, U_RESIDENTS.NAMER)						AS NAMER,
			U_DOGOVOR.RESIDENT_ID, 
			U_DOGOVOR.DOG_ID, 
			U_DOGOVOR.N_KONTR,
			U_DOGOVOR.D_KONTR,
			U_IN_PART.NAMEP,
			--	Дата завершения исполнения обязательств по Договору 
			[dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID)	AS D_END_FOR_DOG_ID,
			NULL																AS N_PS,
			U_SPR_CONFIRM.PD_ID, 
			U_SPR_CONFIRM.SPR_ID, 
			U_SPR_CONFIRM.NPP, 
			U_SPR_CONFIRM.D_DOC, 
			U_SPR_CONFIRM.N_GTD, 
			U_SPR_CONFIRM.KODD, 
			U_SPR_CONFIRM.DIRECTION, 
			U_SPR_CONFIRM.VALP,		
			U_SPR_CONFIRM.SUMP, 
			U_SPR_CONFIRM.VALK, 
			U_SPR_CONFIRM.SUMK, 
			( SELECT SUM(SUMK) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_SPR_CONFIRM.RESIDENT_ID AND R.PD_ID = U_SPR_CONFIRM.PD_ID) 
			AS	SUM_RASPR_ALL,
			U_SPR_CONFIRM.SUMK - 
			( SELECT  ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_SPR_CONFIRM.RESIDENT_ID AND R.PD_ID = U_SPR_CONFIRM.PD_ID) 
			AS	SUM_OST,
			U_OPLATA.NPP						AS	INFO_NPP,  
			U_OPLATA.KODOP						AS	INFO_KODOP, 
			U_OPLATA.D_REFER					AS	INFO_D_REFER,  
			U_OPLATA.N_REFER					AS	INFO_N_REFER, 
			U_OPLATA.VALP						AS	INFO_VALP,
			U_OPLATA.SUMP						AS	INFO_SUMP,
			U_OPLATA.SUMK						AS	INFO_SUMK,
			U_RASPRED_OPLATA_SPR_CONFIRM.SUMK	AS	INFO_RASPRED_SUMK,
			U_RASPRED_OPLATA_SPR_CONFIRM.D_KOR	AS	INFO_RASPRED_DATE,
			NULL								AS	PRIZ_DR_PS
	FROM	U_SPR_CONFIRM (NOLOCK)
	INNER	JOIN 	U_USERS_RESIDENTS (NOLOCK) ON 
			U_USERS_RESIDENTS.RESIDENT_ID	= U_SPR_CONFIRM.RESIDENT_ID	AND
			U_USERS_RESIDENTS.USER_ID		= @USER_ID
	INNER	JOIN	U_RESIDENTS (NOLOCK) ON
			U_RESIDENTS.RESIDENT_ID			= U_SPR_CONFIRM.RESIDENT_ID	AND
			U_RESIDENTS.DEL_FLAG			IS NULL
	INNER	JOIN	U_DOGOVOR (NOLOCK) ON
			U_DOGOVOR.RESIDENT_ID			= U_SPR_CONFIRM.RESIDENT_ID	AND
			U_DOGOVOR.DOG_ID				= U_SPR_CONFIRM.DOG_ID		AND
			U_DOGOVOR.DOG_NPP				= U_SPR_CONFIRM.DOG_NPP		AND
			U_DOGOVOR.DEL_FLAG				IS NULL		
	INNER	JOIN U_IN_PART (NOLOCK) ON	
			U_IN_PART.PARTNER_ID			= U_DOGOVOR.PARTNER_ID		AND
			U_IN_PART.DEL_FLAG				IS NULL		
	LEFT	OUTER JOIN	U_RASPRED_OPLATA_SPR_CONFIRM (NOLOCK) ON
			U_RASPRED_OPLATA_SPR_CONFIRM.RESIDENT_ID	= U_SPR_CONFIRM.RESIDENT_ID	AND 
			U_RASPRED_OPLATA_SPR_CONFIRM.PD_ID			= U_SPR_CONFIRM.PD_ID 	
	LEFT	OUTER JOIN	U_OPLATA (NOLOCK) ON
			U_OPLATA.RESIDENT_ID 			= U_RASPRED_OPLATA_SPR_CONFIRM.RESIDENT_ID	AND 
			U_OPLATA.OPL_ID					= U_RASPRED_OPLATA_SPR_CONFIRM.OPL_ID		
	WHERE	U_SPR_CONFIRM.PR_NOT_CALC	IS NULL				AND
			U_SPR_CONFIRM.DEL_FLAG		IS NULL				AND
			U_SPR_CONFIRM.SUMK - ( SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_SPR_CONFIRM.RESIDENT_ID AND R.PD_ID = U_SPR_CONFIRM.PD_ID) > @OST_NOTRASPRED AND
			-- ПД Импорт товаров
			U_SPR_CONFIRM.KODD >= '01' AND U_SPR_CONFIRM.KODD <= '02' AND U_SPR_CONFIRM.DIRECTION = '1'	AND
			-- отбор по Участнику ВЭД
			(
				@RESIDENT_ID				= 0	OR
				U_SPR_CONFIRM.RESIDENT_ID	= @RESIDENT_ID
			)												AND
			-- ПД по Договору (контракту) (без ПС)
			U_SPR_CONFIRM.PS_ID				IS NULL			AND
			U_SPR_CONFIRM.DOG_ID			IS NOT NULL		AND
			-- отбор по Договору (контракту)
			(
				@DOG_ID						= 0	OR
				U_DOGOVOR.DOG_ID			= @DOG_ID
			)												AND
			-- отбор по диапазону Даты завершения исполнения обязательств
			(	@D_END_BEG	IS NULL		OR
				ISNULL( [dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID), CONVERT(DATETIME, '30000606' ))	>= ISNULL(@D_END_BEG, CONVERT(DATETIME, '19000101'))
			)	AND
			(	@D_END_END	IS NULL		OR
				ISNULL( [dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID), CONVERT(DATETIME, '30000606' ))	<= ISNULL(@D_END_END, CONVERT(DATETIME, '30000606'))	
			)	
	ORDER	BY NAMER, U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.D_KONTR, U_DOGOVOR.N_KONTR, U_DOGOVOR.DOG_ID, U_SPR_CONFIRM.D_DOC
GO

GRANT  EXECUTE  ON [dbo].[U_CRP_RASPRED_IMPORT_TOV__PD_OPLATA]  TO [OPERS], [AUDITS]
GO

--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[U_CRP_RASPRED_EXPORT_TOV]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[U_CRP_RASPRED_EXPORT_TOV]
GO

CREATE PROCEDURE [dbo].[U_CRP_RASPRED_EXPORT_TOV]
--	--------------------------------------------------------------------------------------------------------------
--	Отчёт "Контроль распределения: экспорт товаров (ПД на Платежи)"
--	(основная форма)
--	--------------------------------------------------------------------------------------------------------------
--	Выборка списка ПД (экспорт товаров) по Договору (контракту) и распределения по ПД на Платежи
--	
--	@USER_ID		- идентификатор Пользователя
--	@RESIDENT_ID 	- интендификатор Участника ВЭД (если = 0, то все Участники ВЭД)
--	@DOG_ID 		- интендификатор Договора (контракта) ( если = 0, то по всем Договорам (контрактам) )	
--	@D_END_BEG		- нижняя граница диапазона дат окончания исполнения обязательств по контракту	
--	@D_END_END		- верхняя граница диапазона дат окончания исполнения обязательств по контракту
--	@OST_NOTRASPRED - нераспределённый остаток по ПД (>) (0 - показать с ненулевым остатком, -1 - показать все)
--	--------------------------------------------------------------------------------------------------------------
--	(Модификация	в версии 2.1.0)
--	--------------------------------------------------------------------------------------------------------------
(
	@USER_ID		AS VARCHAR(30),
	@RESIDENT_ID	AS INTEGER,
	@DOG_ID			AS INTEGER,
	@D_END_BEG		AS DATETIME		=	NULL,
	@D_END_END		AS DATETIME		=	NULL,
	@OST_NOTRASPRED	AS INTEGER
)
AS
	SET NOCOUNT ON

	SELECT	@RESIDENT_ID	= 	ISNULL(@RESIDENT_ID, 0)
	SELECT	@DOG_ID			= 	ISNULL(@DOG_ID , 0)
	SELECT	@OST_NOTRASPRED	= 	ISNULL(@OST_NOTRASPRED , 0)
	
	--	1.
	--	Выбираем ПД Экспорт товаров, ссылка на ПС, распределение на Платежи
	--
	SELECT	ISNULL(U_RESIDENTS.NAMER_S, U_RESIDENTS.NAMER)						AS NAMER,
			U_DOGOVOR.RESIDENT_ID, 
			U_DOGOVOR.DOG_ID, 
			U_DOGOVOR.N_KONTR,
			U_DOGOVOR.D_KONTR,
			U_IN_PART.NAMEP,
			--	Дата завершения исполнения обязательств по Договору 
			[dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID)	AS D_END_FOR_DOG_ID,
			U_PS.N_PS															AS N_PS,	
			U_SPR_CONFIRM.PD_ID, 	
			U_SPR_CONFIRM.SPR_ID, 
			U_SPR_CONFIRM.NPP, 
			U_SPR_CONFIRM.D_DOC, 
			U_SPR_CONFIRM.N_GTD, 
			U_SPR_CONFIRM.KODD, 
			U_SPR_CONFIRM.DIRECTION, 
			U_SPR_CONFIRM.VALP,		
			U_SPR_CONFIRM.SUMP, 
			U_SPR_CONFIRM.VALK, 
			U_SPR_CONFIRM.SUMK, 
			( SELECT SUM(SUMK) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_SPR_CONFIRM.RESIDENT_ID AND R.PD_ID = U_SPR_CONFIRM.PD_ID) 
			AS	SUM_RASPR_ALL,
			U_SPR_CONFIRM.SUMK - 
			( SELECT  ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_SPR_CONFIRM.RESIDENT_ID AND R.PD_ID = U_SPR_CONFIRM.PD_ID) 
			AS	SUM_OST,
			U_OPLATA.NPP						AS	INFO_NPP,  
			U_OPLATA.KODOP						AS	INFO_KODOP, 
			U_OPLATA.D_REFER					AS	INFO_D_REFER,  
			U_OPLATA.N_REFER					AS	INFO_N_REFER, 
			U_OPLATA.VALP						AS	INFO_VALP,
			U_OPLATA.SUMP						AS	INFO_SUMP,
			U_OPLATA.SUMK						AS	INFO_SUMK,
			U_RASPRED_OPLATA_SPR_CONFIRM.SUMK	AS	INFO_RASPRED_SUMK,
			U_RASPRED_OPLATA_SPR_CONFIRM.D_KOR	AS	INFO_RASPRED_DATE,
			CASE
				WHEN	U_OPLATA.PS_ID		IS NOT NULL		AND
						U_SPR_CONFIRM.PS_ID	<> U_OPLATA.PS_ID
				THEN	'*'
				ELSE	NULL
			END									AS	PRIZ_DR_PS
	FROM	U_SPR_CONFIRM (NOLOCK)
	INNER	JOIN 	U_USERS_RESIDENTS (NOLOCK) ON 
			U_USERS_RESIDENTS.RESIDENT_ID	= U_SPR_CONFIRM.RESIDENT_ID	AND
			U_USERS_RESIDENTS.USER_ID		= @USER_ID
	INNER	JOIN	U_RESIDENTS (NOLOCK) ON
			U_RESIDENTS.RESIDENT_ID			= U_SPR_CONFIRM.RESIDENT_ID	AND
			U_RESIDENTS.DEL_FLAG			IS NULL
	INNER	JOIN	U_PS (NOLOCK) ON
			U_PS.RESIDENT_ID				= U_SPR_CONFIRM.RESIDENT_ID	AND
			U_PS.PS_ID						= U_SPR_CONFIRM.PS_ID		AND
			U_PS.DEL_FLAG					IS NULL				
	INNER	JOIN	U_DOGOVOR (NOLOCK) ON
			U_DOGOVOR.RESIDENT_ID			= U_PS.RESIDENT_ID			AND
			U_DOGOVOR.DOG_ID				= U_PS.DOG_ID				AND
			U_DOGOVOR.DOG_NPP				= U_PS.DOG_NPP				AND
			U_DOGOVOR.DEL_FLAG				IS NULL		
	INNER	JOIN U_IN_PART (NOLOCK) ON	
			U_IN_PART.PARTNER_ID			= U_DOGOVOR.PARTNER_ID		AND
			U_IN_PART.DEL_FLAG				IS NULL		
	LEFT	OUTER JOIN	U_RASPRED_OPLATA_SPR_CONFIRM (NOLOCK) ON
			U_RASPRED_OPLATA_SPR_CONFIRM.RESIDENT_ID	= U_SPR_CONFIRM.RESIDENT_ID	AND 
			U_RASPRED_OPLATA_SPR_CONFIRM.PD_ID			= U_SPR_CONFIRM.PD_ID
	LEFT	OUTER JOIN	U_OPLATA (NOLOCK) ON
			U_OPLATA.RESIDENT_ID 			= U_RASPRED_OPLATA_SPR_CONFIRM.RESIDENT_ID	AND 
			U_OPLATA.OPL_ID					= U_RASPRED_OPLATA_SPR_CONFIRM.OPL_ID		
	WHERE	U_SPR_CONFIRM.PR_NOT_CALC	IS NULL				AND
			U_SPR_CONFIRM.DEL_FLAG		IS NULL				AND
			U_SPR_CONFIRM.SUMK - ( SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_SPR_CONFIRM.RESIDENT_ID AND R.PD_ID = U_SPR_CONFIRM.PD_ID) > @OST_NOTRASPRED AND
			-- ПД Экспорт товаров
			(
				U_SPR_CONFIRM.KODD >= '01' AND U_SPR_CONFIRM.KODD <= '02' AND U_SPR_CONFIRM.DIRECTION = '2' 
				OR 
				U_SPR_CONFIRM.KODD = '03'
			)												AND
			-- отбор по Участнику ВЭД
			(
				@RESIDENT_ID				= 0	OR
				U_SPR_CONFIRM.RESIDENT_ID	= @RESIDENT_ID
			)												AND
			-- ПД по ПС
			U_SPR_CONFIRM.PS_ID				IS NOT NULL		AND
			-- отбор по Договору (контракту)
			(
				@DOG_ID						= 0	OR
				U_DOGOVOR.DOG_ID			= @DOG_ID
			)												AND
			-- отбор по диапазону Даты завершения исполнения обязательств
			(	@D_END_BEG	IS NULL		OR
				ISNULL( [dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID), CONVERT(DATETIME, '30000606' ))	>= ISNULL(@D_END_BEG, CONVERT(DATETIME, '19000101'))
			)	AND
			(	@D_END_END	IS NULL		OR
				ISNULL( [dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID), CONVERT(DATETIME, '30000606' ))	<= ISNULL(@D_END_END, CONVERT(DATETIME, '30000606'))	
			)	

	UNION
	--	2.
	--	Выбираем ПД Экспорт товаров, ссылка на Договор (контракт), распределение на Платежи
	--
	SELECT	ISNULL(U_RESIDENTS.NAMER_S, U_RESIDENTS.NAMER)						AS NAMER,
			U_DOGOVOR.RESIDENT_ID, 
			U_DOGOVOR.DOG_ID, 
			U_DOGOVOR.N_KONTR,
			U_DOGOVOR.D_KONTR,
			U_IN_PART.NAMEP,
			--	Дата завершения исполнения обязательств по Договору 
			[dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID)	AS D_END_FOR_DOG_ID,
			NULL																AS N_PS,		
			U_SPR_CONFIRM.PD_ID, 
			U_SPR_CONFIRM.SPR_ID, 
			U_SPR_CONFIRM.NPP, 
			U_SPR_CONFIRM.D_DOC, 
			U_SPR_CONFIRM.N_GTD, 
			U_SPR_CONFIRM.KODD, 
			U_SPR_CONFIRM.DIRECTION, 
			U_SPR_CONFIRM.VALP,		
			U_SPR_CONFIRM.SUMP, 
			U_SPR_CONFIRM.VALK, 
			U_SPR_CONFIRM.SUMK, 
			( SELECT SUM(SUMK) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_SPR_CONFIRM.RESIDENT_ID AND R.PD_ID = U_SPR_CONFIRM.PD_ID) 
			AS	SUM_RASPR_ALL,
			U_SPR_CONFIRM.SUMK - 
			( SELECT  ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_SPR_CONFIRM.RESIDENT_ID AND R.PD_ID = U_SPR_CONFIRM.PD_ID) 
			AS	SUM_OST,
			U_OPLATA.NPP						AS	INFO_NPP,  
			U_OPLATA.KODOP						AS	INFO_KODOP, 
			U_OPLATA.D_REFER					AS	INFO_D_REFER,  
			U_OPLATA.N_REFER					AS	INFO_N_REFER, 
			U_OPLATA.VALP						AS	INFO_VALP,
			U_OPLATA.SUMP						AS	INFO_SUMP,
			U_OPLATA.SUMK						AS	INFO_SUMK,
			U_RASPRED_OPLATA_SPR_CONFIRM.SUMK	AS	INFO_RASPRED_SUMK,
			U_RASPRED_OPLATA_SPR_CONFIRM.D_KOR	AS	INFO_RASPRED_DATE,
			NULL								AS	PRIZ_DR_PS
	FROM	U_SPR_CONFIRM (NOLOCK)
	INNER	JOIN 	U_USERS_RESIDENTS (NOLOCK) ON 
			U_USERS_RESIDENTS.RESIDENT_ID	= U_SPR_CONFIRM.RESIDENT_ID	AND
			U_USERS_RESIDENTS.USER_ID		= @USER_ID
	INNER	JOIN	U_RESIDENTS (NOLOCK) ON
			U_RESIDENTS.RESIDENT_ID			= U_SPR_CONFIRM.RESIDENT_ID	AND
			U_RESIDENTS.DEL_FLAG			IS NULL
	INNER	JOIN	U_DOGOVOR (NOLOCK) ON
			U_DOGOVOR.RESIDENT_ID			= U_SPR_CONFIRM.RESIDENT_ID	AND
			U_DOGOVOR.DOG_ID				= U_SPR_CONFIRM.DOG_ID		AND
			U_DOGOVOR.DOG_NPP				= U_SPR_CONFIRM.DOG_NPP		AND
			U_DOGOVOR.DEL_FLAG				IS NULL		
	INNER	JOIN U_IN_PART (NOLOCK) ON	
			U_IN_PART.PARTNER_ID			= U_DOGOVOR.PARTNER_ID		AND
			U_IN_PART.DEL_FLAG				IS NULL		
	LEFT	OUTER JOIN	U_RASPRED_OPLATA_SPR_CONFIRM (NOLOCK) ON
			U_RASPRED_OPLATA_SPR_CONFIRM.RESIDENT_ID	= U_SPR_CONFIRM.RESIDENT_ID	AND 
			U_RASPRED_OPLATA_SPR_CONFIRM.PD_ID			= U_SPR_CONFIRM.PD_ID
	LEFT	OUTER JOIN	U_OPLATA (NOLOCK) ON
			U_OPLATA.RESIDENT_ID 			= U_RASPRED_OPLATA_SPR_CONFIRM.RESIDENT_ID	AND 
			U_OPLATA.OPL_ID					= U_RASPRED_OPLATA_SPR_CONFIRM.OPL_ID		
	WHERE	U_SPR_CONFIRM.PR_NOT_CALC	IS NULL				AND
			U_SPR_CONFIRM.DEL_FLAG		IS NULL				AND
			U_SPR_CONFIRM.SUMK - ( SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_SPR_CONFIRM.RESIDENT_ID AND R.PD_ID = U_SPR_CONFIRM.PD_ID) > @OST_NOTRASPRED AND
			-- ПД Экспорт товаров
			(
				U_SPR_CONFIRM.KODD >= '01' AND U_SPR_CONFIRM.KODD <= '02' AND U_SPR_CONFIRM.DIRECTION = '2' 
				OR 
				U_SPR_CONFIRM.KODD = '03'
			)												AND
			-- отбор по Участнику ВЭД
			(
				@RESIDENT_ID				= 0	OR
				U_SPR_CONFIRM.RESIDENT_ID	= @RESIDENT_ID
			)												AND
			-- ПД по Договору (контракту) (без ПС)
			U_SPR_CONFIRM.PS_ID				IS NULL			AND
			U_SPR_CONFIRM.DOG_ID			IS NOT NULL		AND
			-- отбор по Договору (контракту)
			(
				@DOG_ID						= 0	OR
				U_DOGOVOR.DOG_ID			= @DOG_ID
			)												AND
			-- отбор по диапазону Даты завершения исполнения обязательств
			(	@D_END_BEG	IS NULL		OR
				ISNULL( [dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID), CONVERT(DATETIME, '30000606' ))	>= ISNULL(@D_END_BEG, CONVERT(DATETIME, '19000101'))
			)	AND
			(	@D_END_END	IS NULL		OR
				ISNULL( [dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID), CONVERT(DATETIME, '30000606' ))	<= ISNULL(@D_END_END, CONVERT(DATETIME, '30000606'))	
			)	
	ORDER	BY NAMER, U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.D_KONTR, U_DOGOVOR.N_KONTR, U_DOGOVOR.DOG_ID, U_SPR_CONFIRM.D_DOC
GO

GRANT  EXECUTE  ON [dbo].[U_CRP_RASPRED_EXPORT_TOV]  TO [OPERS], [AUDITS]
GO

--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[U_CRP_RASPRED_EXPORT_TOV__OPLATA_PD]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[U_CRP_RASPRED_EXPORT_TOV__OPLATA_PD]
GO

CREATE PROCEDURE [dbo].[U_CRP_RASPRED_EXPORT_TOV__OPLATA_PD]
--	----------------------------------------------------------------------------------------------------------------
--	Отчёт "Контроль распределения: экспорт товаров (Платежи на ПД)"
--	(дополнительная форма)
--	----------------------------------------------------------------------------------------------------------------
--	Выборка списка Платежей (экспорт товаров) по Договору (контракту) и распределения по Платежам на ПД и возвраты
--	
--	@USER_ID		- идентификатор Пользователя
--	@RESIDENT_ID 	- интендификатор Участника ВЭД (если = 0, то все Участники ВЭД)
--	@DOG_ID 		- интендификатор Договора (контракта) ( если = 0, то по всем Договорам (контрактам) )	
--	@D_END_BEG		- нижняя граница диапазона дат окончания исполнения обязательств по контракту	
--	@D_END_END		- верхняя граница диапазона дат окончания исполнения обязательств по контракту
--	@OST_NOTRASPRED - нераспределённый остаток по платежу (>) (0 - показать с ненулевым остатком, -1 - показать все)
--	----------------------------------------------------------------------------------------------------------------
--	(Модификация	в версии 2.1.0)
--	----------------------------------------------------------------------------------------------------------------
(
	@USER_ID		AS VARCHAR(30),
	@RESIDENT_ID	AS INTEGER,
	@DOG_ID			AS INTEGER,
	@D_END_BEG		AS DATETIME		=	NULL,
	@D_END_END		AS DATETIME		=	NULL,
	@OST_NOTRASPRED	AS INTEGER
)
AS
	SET NOCOUNT ON

	SELECT	@RESIDENT_ID	= 	ISNULL(@RESIDENT_ID, 0)
	SELECT	@DOG_ID 		= 	ISNULL(@DOG_ID , 0)
	SELECT	@OST_NOTRASPRED	= 	ISNULL(@OST_NOTRASPRED , 0)
	
	--	1.
	--	Выбираем Платежи Экспорт товаров, ссылка на ПС, распределение на ПД
	--
	SELECT	ISNULL(U_RESIDENTS.NAMER_S, U_RESIDENTS.NAMER)						AS NAMER,
			U_DOGOVOR.RESIDENT_ID, 
			U_DOGOVOR.DOG_ID, 
			U_DOGOVOR.N_KONTR,
			U_DOGOVOR.D_KONTR,
			U_IN_PART.NAMEP,
			--	Дата завершения исполнения обязательств по Договору 
			[dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID)	AS D_END_FOR_DOG_ID,
			U_PS.N_PS															AS N_PS,		
			U_OPLATA.OPL_ID, 	
			U_OPLATA.NPP, 
			U_OPLATA.D_REFER, 
			U_OPLATA.N_REFER, 
			U_OPLATA.KODOP, 
			U_OPLATA.TYPE, 
			U_OPLATA.VALP,
			U_OPLATA.SUMP,
			U_OPLATA.VALK, 
			U_OPLATA.SUMK, 
			(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID) 
			+ 
			(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND (R.OPL_ID = U_OPLATA.OPL_ID OR R.OPL_ID2 = U_OPLATA.OPL_ID)) 
			AS SUM_RASPR_ALL,
			U_OPLATA.SUMK - 
			(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID) 
			- 
			(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND (R.OPL_ID = U_OPLATA.OPL_ID OR R.OPL_ID2 = U_OPLATA.OPL_ID)) 
			AS	SUM_OST,
			'ПД : ' + CONVERT( VARCHAR(15), U_SPR_CONFIRM.SPR_ID ) + ' ( ' + + CONVERT( VARCHAR(15), U_SPR_CONFIRM.NPP ) + ' )'
			AS	INFO_PRIM,
			U_SPR_CONFIRM.KODD					AS	INFO_KODD,
			U_SPR_CONFIRM.D_DOC 				AS	INFO_D_DOC,
			U_SPR_CONFIRM.N_GTD 				AS	INFO_N_DOC,
			U_SPR_CONFIRM.VALP					AS	INFO_VALP,
			U_SPR_CONFIRM.SUMP					AS	INFO_SUMP,
			U_SPR_CONFIRM.SUMK					AS	INFO_SUMK,
			U_RASPRED_OPLATA_SPR_CONFIRM.SUMK	AS	INFO_RASPRED_SUMK,
			U_RASPRED_OPLATA_SPR_CONFIRM.D_KOR	AS	INFO_RASPRED_DATE,
			CASE
				WHEN	U_SPR_CONFIRM.PS_ID	IS NOT NULL		AND
						U_OPLATA.PS_ID		<> U_SPR_CONFIRM.PS_ID
				THEN	'*'
				ELSE	NULL
			END									AS	PRIZ_DR_PS
	FROM	U_OPLATA (NOLOCK)
	INNER	JOIN	U_USERS_RESIDENTS (NOLOCK) ON 
			U_USERS_RESIDENTS.RESIDENT_ID	= U_OPLATA.RESIDENT_ID	AND
			U_USERS_RESIDENTS.USER_ID		= @USER_ID
	INNER	JOIN 	U_RESIDENTS (NOLOCK) ON
			U_RESIDENTS.RESIDENT_ID			= U_OPLATA.RESIDENT_ID	AND
			U_RESIDENTS.DEL_FLAG			IS NULL
	INNER	JOIN	U_PS (NOLOCK) ON
			U_PS.RESIDENT_ID				= U_OPLATA.RESIDENT_ID	AND
			U_PS.PS_ID						= U_OPLATA.PS_ID		AND
			U_PS.DEL_FLAG					IS NULL			
	INNER	JOIN	U_DOGOVOR (NOLOCK) ON
			U_DOGOVOR.RESIDENT_ID			= U_PS.RESIDENT_ID		AND
			U_DOGOVOR.DOG_ID				= U_PS.DOG_ID			AND
			U_DOGOVOR.DOG_NPP				= U_PS.DOG_NPP			AND
			U_DOGOVOR.DEL_FLAG				IS NULL		
	INNER	JOIN U_IN_PART (NOLOCK) ON	
			U_IN_PART.PARTNER_ID			= U_DOGOVOR.PARTNER_ID	AND
			U_IN_PART.DEL_FLAG				IS NULL		
	LEFT	OUTER JOIN	U_RASPRED_OPLATA_SPR_CONFIRM (NOLOCK) ON
			U_RASPRED_OPLATA_SPR_CONFIRM.RESIDENT_ID	= U_OPLATA.RESIDENT_ID	AND 
			U_RASPRED_OPLATA_SPR_CONFIRM.OPL_ID			= U_OPLATA.OPL_ID 		
	LEFT	OUTER JOIN	U_SPR_CONFIRM (NOLOCK) ON
			U_SPR_CONFIRM.RESIDENT_ID 		= U_RASPRED_OPLATA_SPR_CONFIRM.RESIDENT_ID	AND 
			U_SPR_CONFIRM.PD_ID 			= U_RASPRED_OPLATA_SPR_CONFIRM.PD_ID	
	WHERE 	U_OPLATA.DEL_FLAG			IS NULL				AND
			U_OPLATA.SUMK -
			(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID) 
			- 
			(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND (R.OPL_ID = U_OPLATA.OPL_ID OR R.OPL_ID2 = U_OPLATA.OPL_ID)) > @OST_NOTRASPRED AND
			-- Платежи Экспорт товаров
			( U_OPLATA.DIRECTION = '1'	AND 
			( ( U_OPLATA.KODOP >= '10010'	AND U_OPLATA.KODOP <= '10090') 
			OR
		 	  ( U_OPLATA.KODOP = '35020'	AND U_OPLATA.TYPE = '1' ) ) 
			)												AND
			-- отбор по Участнику ВЭД
			(
				@RESIDENT_ID			= 0		OR
				U_OPLATA.RESIDENT_ID	= @RESIDENT_ID
			)												AND
			-- Платёжи по ПС
			U_OPLATA.PS_ID				IS NOT NULL			AND
			-- отбор по Договору (контракту)
			(
				@DOG_ID					= 0	OR
				U_DOGOVOR.DOG_ID		= @DOG_ID
			)												AND
			-- отбор по диапазону Даты завершения исполнения обязательств
			(	@D_END_BEG	IS NULL		OR
				ISNULL( [dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID), CONVERT(DATETIME, '30000606' ))	>= ISNULL(@D_END_BEG, CONVERT(DATETIME, '19000101'))
			)	AND
			(	@D_END_END	IS NULL		OR
				ISNULL( [dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID), CONVERT(DATETIME, '30000606' ))	<= ISNULL(@D_END_END, CONVERT(DATETIME, '30000606'))	
			)	

	UNION
	--	2.
	--	Выбираем Платежи Экспорт товаров, ссылка на Договор (контракт), распределение на ПД
	--
	SELECT	ISNULL(U_RESIDENTS.NAMER_S, U_RESIDENTS.NAMER)						AS NAMER,
			U_DOGOVOR.RESIDENT_ID, 
			U_DOGOVOR.DOG_ID, 
			U_DOGOVOR.N_KONTR,
			U_DOGOVOR.D_KONTR,
			U_IN_PART.NAMEP,
			--	Дата завершения исполнения обязательств по Договору 
			[dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID)	AS D_END_FOR_DOG_ID,
			NULL																AS N_PS,		
			U_OPLATA.OPL_ID, 	
			U_OPLATA.NPP, 
			U_OPLATA.D_REFER, 
			U_OPLATA.N_REFER, 
			U_OPLATA.KODOP, 
			U_OPLATA.TYPE, 
			U_OPLATA.VALP,
			U_OPLATA.SUMP,
			U_OPLATA.VALK, 
			U_OPLATA.SUMK, 
			(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID) 
			+ 
			(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND (R.OPL_ID = U_OPLATA.OPL_ID OR R.OPL_ID2 = U_OPLATA.OPL_ID)) 
			AS SUM_RASPR_ALL,
			U_OPLATA.SUMK - 
			(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID) 
			- 
			(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND (R.OPL_ID = U_OPLATA.OPL_ID OR R.OPL_ID2 = U_OPLATA.OPL_ID)) 
			AS	SUM_OST,
			'ПД : ' + CONVERT( VARCHAR(15), U_SPR_CONFIRM.SPR_ID ) + ' ( ' + + CONVERT( VARCHAR(15), U_SPR_CONFIRM.NPP ) + ' )'
			AS	INFO_PRIM,
			U_SPR_CONFIRM.KODD					AS	INFO_KODD,
			U_SPR_CONFIRM.D_DOC 				AS	INFO_D_DOC,
			U_SPR_CONFIRM.N_GTD 				AS	INFO_N_DOC,
			U_SPR_CONFIRM.VALP					AS	INFO_VALP,
			U_SPR_CONFIRM.SUMP					AS	INFO_SUMP,
			U_SPR_CONFIRM.SUMK					AS	INFO_SUMK,
			U_RASPRED_OPLATA_SPR_CONFIRM.SUMK	AS	INFO_RASPRED_SUMK,
			U_RASPRED_OPLATA_SPR_CONFIRM.D_KOR	AS	INFO_RASPRED_DATE,
			NULL								AS	PRIZ_DR_PS
	FROM	U_OPLATA (NOLOCK)
	INNER	JOIN	U_USERS_RESIDENTS (NOLOCK) ON 
			U_USERS_RESIDENTS.RESIDENT_ID	= U_OPLATA.RESIDENT_ID	AND
			U_USERS_RESIDENTS.USER_ID		= @USER_ID
	INNER	JOIN 	U_RESIDENTS (NOLOCK) ON
			U_RESIDENTS.RESIDENT_ID			= U_OPLATA.RESIDENT_ID	AND
			U_RESIDENTS.DEL_FLAG			IS NULL
	INNER	JOIN	U_DOGOVOR (NOLOCK) ON
			U_DOGOVOR.RESIDENT_ID			= U_OPLATA.RESIDENT_ID	AND
			U_DOGOVOR.DOG_ID				= U_OPLATA.DOG_ID		AND
			U_DOGOVOR.DOG_NPP				= U_OPLATA.DOG_NPP		AND
			U_DOGOVOR.DEL_FLAG				IS NULL		
	INNER	JOIN U_IN_PART (NOLOCK) ON	
			U_IN_PART.PARTNER_ID			= U_DOGOVOR.PARTNER_ID	AND
			U_IN_PART.DEL_FLAG				IS NULL		
	LEFT	OUTER JOIN	U_RASPRED_OPLATA_SPR_CONFIRM (NOLOCK) ON
			U_RASPRED_OPLATA_SPR_CONFIRM.RESIDENT_ID	= U_OPLATA.RESIDENT_ID	AND 
			U_RASPRED_OPLATA_SPR_CONFIRM.OPL_ID			= U_OPLATA.OPL_ID 		
	LEFT	OUTER JOIN	U_SPR_CONFIRM (NOLOCK) ON
			U_SPR_CONFIRM.RESIDENT_ID 		= U_RASPRED_OPLATA_SPR_CONFIRM.RESIDENT_ID	AND 
			U_SPR_CONFIRM.PD_ID 			= U_RASPRED_OPLATA_SPR_CONFIRM.PD_ID	
	WHERE 	U_OPLATA.DEL_FLAG			IS NULL				AND
			U_OPLATA.SUMK -
			(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID) 
			- 
			(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND (R.OPL_ID = U_OPLATA.OPL_ID OR R.OPL_ID2 = U_OPLATA.OPL_ID)) > @OST_NOTRASPRED AND
			-- Платежи Экспорт товаров
			( U_OPLATA.DIRECTION = '1'	AND 
			( ( U_OPLATA.KODOP >= '10010'	AND U_OPLATA.KODOP <= '10090') 
			OR
		 	  ( U_OPLATA.KODOP = '35020'	AND U_OPLATA.TYPE = '1' ) ) 
			)												AND
			-- отбор по Участнику ВЭД
			(
				@RESIDENT_ID			= 0		OR
				U_OPLATA.RESIDENT_ID	= @RESIDENT_ID
			)												AND
			-- Платёжи по Договору (контракту) (без ПС)
			U_OPLATA.PS_ID	IS NULL							AND
			U_OPLATA.DOG_ID	IS NOT NULL						AND
			-- отбор по Договору (контракту)
			(
				@DOG_ID					= 0	OR
				U_DOGOVOR.DOG_ID		= @DOG_ID
			)												AND
			-- отбор по диапазону Даты завершения исполнения обязательств
			(	@D_END_BEG	IS NULL		OR
				ISNULL( [dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID), CONVERT(DATETIME, '30000606' ))	>= ISNULL(@D_END_BEG, CONVERT(DATETIME, '19000101'))
			)	AND
			(	@D_END_END	IS NULL		OR
				ISNULL( [dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID), CONVERT(DATETIME, '30000606' ))	<= ISNULL(@D_END_END, CONVERT(DATETIME, '30000606'))	
			)	


	UNION
	--	3.
	--	Выбираем Платежи Экспорт товаров, ссылка на ПС, распределение на Возвраты
	--
	SELECT	ISNULL(U_RESIDENTS.NAMER_S, U_RESIDENTS.NAMER)						AS NAMER,
			U_DOGOVOR.RESIDENT_ID, 
			U_DOGOVOR.DOG_ID, 
			U_DOGOVOR.N_KONTR,
			U_DOGOVOR.D_KONTR,
			U_IN_PART.NAMEP,
			--	Дата завершения исполнения обязательств по Договору 
			[dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID)	AS D_END_FOR_DOG_ID,
			U_PS.N_PS															AS N_PS,		
			U_OPLATA.OPL_ID, 
			U_OPLATA.NPP, 
			U_OPLATA.D_REFER, 
			U_OPLATA.N_REFER, 
			U_OPLATA.KODOP, 
			U_OPLATA.TYPE, 
			U_OPLATA.VALP,
			U_OPLATA.SUMP,
			U_OPLATA.VALK, 
			U_OPLATA.SUMK, 
			(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID) 
			+ 
			(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND (R.OPL_ID = U_OPLATA.OPL_ID OR R.OPL_ID2 = U_OPLATA.OPL_ID)) 
			AS	SUM_RASPR_ALL,
			U_OPLATA.SUMK - 
			(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID) 
			- 
			(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND (R.OPL_ID = U_OPLATA.OPL_ID OR R.OPL_ID2 = U_OPLATA.OPL_ID)) 
			AS	SUM_OST,
			'Воз: '	+ 	CONVERT( VARCHAR(15), U_OPLATA2.NPP)
			AS	INFO_PRIM,
			U_OPLATA2.KODOP					AS	INFO_KODD,
			U_OPLATA2.D_REFER 				AS	INFO_D_DOC,
			U_OPLATA2.N_REFER 				AS	INFO_N_DOC,
			U_OPLATA2.VALP					AS	INFO_VALP,
			U_OPLATA2.SUMP					AS	INFO_SUMP,
			U_OPLATA2.SUMK					AS	INFO_SUMK,
			U_RASPRED_OPLATA_OPLATA.SUMK	AS	INFO_RASPRED_SUMK,
			U_RASPRED_OPLATA_OPLATA.D_KOR	AS	INFO_RASPRED_DATE,
			CASE
				WHEN	U_OPLATA2.PS_ID		IS NOT NULL		AND
						U_OPLATA.PS_ID		<> U_OPLATA2.PS_ID
				THEN	'*'
				ELSE	NULL
			END								AS	PRIZ_DR_PS
	FROM	U_OPLATA (NOLOCK)
	INNER	JOIN	U_USERS_RESIDENTS (NOLOCK) ON 
			U_USERS_RESIDENTS.RESIDENT_ID	= U_OPLATA.RESIDENT_ID	AND
			U_USERS_RESIDENTS.USER_ID		= @USER_ID
	INNER	JOIN	U_RESIDENTS (NOLOCK) ON
			U_RESIDENTS.RESIDENT_ID			= U_OPLATA.RESIDENT_ID	AND
			U_RESIDENTS.DEL_FLAG			IS NULL
	INNER	JOIN	U_PS (NOLOCK) ON
			U_PS.RESIDENT_ID				= U_OPLATA.RESIDENT_ID	AND
			U_PS.PS_ID						= U_OPLATA.PS_ID		AND
			U_PS.DEL_FLAG					IS NULL					
	INNER	JOIN	U_DOGOVOR (NOLOCK) ON
			U_DOGOVOR.RESIDENT_ID			= U_PS.RESIDENT_ID		AND
			U_DOGOVOR.DOG_ID				= U_PS.DOG_ID			AND
			U_DOGOVOR.DOG_NPP				= U_PS.DOG_NPP			AND
			U_DOGOVOR.DEL_FLAG				IS NULL		
	INNER	JOIN U_IN_PART (NOLOCK) ON	
			U_IN_PART.PARTNER_ID			= U_DOGOVOR.PARTNER_ID	AND
			U_IN_PART.DEL_FLAG				IS NULL		
	LEFT	OUTER JOIN	U_RASPRED_OPLATA_OPLATA (NOLOCK)	ON
			U_RASPRED_OPLATA_OPLATA.RESIDENT_ID = U_OPLATA.RESIDENT_ID	AND 
			U_RASPRED_OPLATA_OPLATA.OPL_ID2 	= U_OPLATA.OPL_ID		
	LEFT	OUTER JOIN	U_OPLATA AS U_OPLATA2 (NOLOCK)	ON
			U_OPLATA2.RESIDENT_ID 			= U_RASPRED_OPLATA_OPLATA.RESIDENT_ID	AND 
			U_OPLATA2.OPL_ID 				= U_RASPRED_OPLATA_OPLATA.OPL_ID
	WHERE 	U_OPLATA.DEL_FLAG			IS NULL			AND
			U_OPLATA.SUMK -
			(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID) 
			- 
			(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND (R.OPL_ID = U_OPLATA.OPL_ID OR R.OPL_ID2 = U_OPLATA.OPL_ID)) > @OST_NOTRASPRED AND
			-- Платежи Экспорт товаров
			( U_OPLATA.DIRECTION = '1'	AND 
			( ( U_OPLATA.KODOP >= '10010'	AND U_OPLATA.KODOP <= '10090') 
			OR
		 	  ( U_OPLATA.KODOP = '35020'	AND U_OPLATA.TYPE = '1' ) ) 
			)											AND
			-- отбор по Участнику ВЭД
			(
				@RESIDENT_ID			= 0	OR
				U_OPLATA.RESIDENT_ID	= @RESIDENT_ID
			)											AND
			-- Платёжи по ПС
			U_OPLATA.PS_ID				IS NOT NULL		AND
			-- отбор по Договору (контракту)	
			(
				@DOG_ID					= 0	OR
				U_DOGOVOR.DOG_ID		= @DOG_ID
			)											AND
			-- отбор по диапазону Даты завершения исполнения обязательств
			(	@D_END_BEG	IS NULL		OR
				ISNULL( [dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID), CONVERT(DATETIME, '30000606' ))	>= ISNULL(@D_END_BEG, CONVERT(DATETIME, '19000101'))
			)	AND
			(	@D_END_END	IS NULL		OR
				ISNULL( [dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID), CONVERT(DATETIME, '30000606' ))	<= ISNULL(@D_END_END, CONVERT(DATETIME, '30000606'))	
			)	

	UNION
	--	4.
	--	Выбираем Платежи Экспорт товаров, ссылка на Договор (контракт), распределение на Возвраты
	--
	SELECT	ISNULL(U_RESIDENTS.NAMER_S, U_RESIDENTS.NAMER)						AS NAMER,
			U_DOGOVOR.RESIDENT_ID, 
			U_DOGOVOR.DOG_ID, 
			U_DOGOVOR.N_KONTR,
			U_DOGOVOR.D_KONTR,
			U_IN_PART.NAMEP,
			--	Дата завершения исполнения обязательств по Договору 
			[dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID)	AS D_END_FOR_DOG_ID,
			NULL																AS N_PS,		
			U_OPLATA.OPL_ID, 
			U_OPLATA.NPP, 
			U_OPLATA.D_REFER, 
			U_OPLATA.N_REFER, 
			U_OPLATA.KODOP, 
			U_OPLATA.TYPE, 
			U_OPLATA.VALP,
			U_OPLATA.SUMP,
			U_OPLATA.VALK, 
			U_OPLATA.SUMK, 
			(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID) 
			+ 
			(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND (R.OPL_ID = U_OPLATA.OPL_ID OR R.OPL_ID2 = U_OPLATA.OPL_ID)) 
			AS	SUM_RASPR_ALL,
			U_OPLATA.SUMK - 
			(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID) 
			- 
			(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND (R.OPL_ID = U_OPLATA.OPL_ID OR R.OPL_ID2 = U_OPLATA.OPL_ID)) 
			AS	SUM_OST,
			'Воз: '	+ 	CONVERT( VARCHAR(15), U_OPLATA2.NPP)
			AS	INFO_PRIM,
			U_OPLATA2.KODOP					AS	INFO_KODD,
			U_OPLATA2.D_REFER 				AS	INFO_D_DOC,
			U_OPLATA2.N_REFER 				AS	INFO_N_DOC,
			U_OPLATA2.VALP					AS	INFO_VALP,
			U_OPLATA2.SUMP					AS	INFO_SUMP,
			U_OPLATA2.SUMK					AS	INFO_SUMK,
			U_RASPRED_OPLATA_OPLATA.SUMK	AS	INFO_RASPRED_SUMK,
			U_RASPRED_OPLATA_OPLATA.D_KOR	AS	INFO_RASPRED_DATE,
			NULL							AS	PRIZ_DR_PS
	FROM	U_OPLATA (NOLOCK)
	INNER	JOIN	U_USERS_RESIDENTS (NOLOCK) ON 
			U_USERS_RESIDENTS.RESIDENT_ID	= U_OPLATA.RESIDENT_ID	AND
			U_USERS_RESIDENTS.USER_ID		= @USER_ID
	INNER	JOIN	U_RESIDENTS (NOLOCK) ON
			U_RESIDENTS.RESIDENT_ID			= U_OPLATA.RESIDENT_ID	AND
			U_RESIDENTS.DEL_FLAG			IS NULL
	INNER	JOIN	U_DOGOVOR (NOLOCK) ON
			U_DOGOVOR.RESIDENT_ID			= U_OPLATA.RESIDENT_ID	AND
			U_DOGOVOR.DOG_ID				= U_OPLATA.DOG_ID		AND
			U_DOGOVOR.DOG_NPP				= U_OPLATA.DOG_NPP		AND
			U_DOGOVOR.DEL_FLAG				IS NULL		
	INNER	JOIN U_IN_PART (NOLOCK) ON	
			U_IN_PART.PARTNER_ID			= U_DOGOVOR.PARTNER_ID	AND
			U_IN_PART.DEL_FLAG				IS NULL		
	LEFT	OUTER JOIN	U_RASPRED_OPLATA_OPLATA (NOLOCK)	ON
			U_RASPRED_OPLATA_OPLATA.RESIDENT_ID = U_OPLATA.RESIDENT_ID	AND 
			U_RASPRED_OPLATA_OPLATA.OPL_ID2 	= U_OPLATA.OPL_ID		
	LEFT	OUTER JOIN	U_OPLATA AS U_OPLATA2 (NOLOCK)	ON
			U_OPLATA2.RESIDENT_ID 			= U_RASPRED_OPLATA_OPLATA.RESIDENT_ID	AND 
			U_OPLATA2.OPL_ID 				= U_RASPRED_OPLATA_OPLATA.OPL_ID
	WHERE 	U_OPLATA.DEL_FLAG			IS NULL			AND
			U_OPLATA.SUMK -
			(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID) 
			- 
			(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND (R.OPL_ID = U_OPLATA.OPL_ID OR R.OPL_ID2 = U_OPLATA.OPL_ID)) > @OST_NOTRASPRED AND
			-- Платежи Экспорт товаров
			( U_OPLATA.DIRECTION = '1'	AND 
			( ( U_OPLATA.KODOP >= '10010'	AND U_OPLATA.KODOP <= '10090') 
			OR
		 	  ( U_OPLATA.KODOP = '35020'	AND U_OPLATA.TYPE = '1' ) ) 
			)											AND
			-- отбор по Участнику ВЭД
			(
				@RESIDENT_ID			= 0	OR
				U_OPLATA.RESIDENT_ID	= @RESIDENT_ID
			)											AND
			-- Платёжи по Договору (контракту) (без ПС)
			U_OPLATA.PS_ID	IS NULL						AND
			U_OPLATA.DOG_ID	IS NOT NULL					AND
			-- отбор по Договору (контракту)	
			(
				@DOG_ID					= 0	OR
				U_DOGOVOR.DOG_ID		= @DOG_ID
			)											AND
			-- отбор по диапазону Даты завершения исполнения обязательств
			(	@D_END_BEG	IS NULL		OR
				ISNULL( [dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID), CONVERT(DATETIME, '30000606' ))	>= ISNULL(@D_END_BEG, CONVERT(DATETIME, '19000101'))
			)	AND
			(	@D_END_END	IS NULL		OR
				ISNULL( [dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID), CONVERT(DATETIME, '30000606' ))	<= ISNULL(@D_END_END, CONVERT(DATETIME, '30000606'))	
			)	
	ORDER	BY NAMER, U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.D_KONTR, U_DOGOVOR.N_KONTR, U_DOGOVOR.DOG_ID, U_OPLATA.D_REFER
GO

GRANT  EXECUTE  ON [dbo].[U_CRP_RASPRED_EXPORT_TOV__OPLATA_PD]  TO [OPERS], [AUDITS]
GO

--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[U_CRP_RASPRED_IMPORT_USL]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[U_CRP_RASPRED_IMPORT_USL]
GO

CREATE PROCEDURE [dbo].[U_CRP_RASPRED_IMPORT_USL]
--	----------------------------------------------------------------------------------------------------------------
--	Отчёт "Контроль распределения: импорт услуг (Платежи на ПД)"
--	(основная форма)
--	----------------------------------------------------------------------------------------------------------------
--	Выборка списка Платежей (импорт услуг) по Договору (контракту) и распределения по Платежам на ПД и возвраты
--	
--	@USER_ID		- идентификатор Пользователя
--	@RESIDENT_ID 	- интендификатор Участника ВЭД (если = 0, то все Участники ВЭД)
--	@DOG_ID 		- интендификатор Договора (контракта) ( если = 0, то по всем Договорам (контрактам) )	
--	@D_END_BEG		- нижняя граница диапазона дат окончания исполнения обязательств по контракту	
--	@D_END_END		- верхняя граница диапазона дат окончания исполнения обязательств по контракту
--	@OST_NOTRASPRED - нераспределённый остаток по платежу (>) (0 - показать с ненулевым остатком, -1 - показать все)
--	----------------------------------------------------------------------------------------------------------------
--	(Модификация	в версии 2.1.0)
--	----------------------------------------------------------------------------------------------------------------
(
	@USER_ID		AS VARCHAR(30),
	@RESIDENT_ID	AS INTEGER,
	@DOG_ID			AS INTEGER,
	@D_END_BEG		AS DATETIME		=	NULL,
	@D_END_END		AS DATETIME		=	NULL,
	@OST_NOTRASPRED	AS INTEGER
)
AS
	SET NOCOUNT ON

	SELECT	@RESIDENT_ID	= 	ISNULL(@RESIDENT_ID, 0)
	SELECT	@DOG_ID 		= 	ISNULL(@DOG_ID , 0)
	SELECT	@OST_NOTRASPRED	= 	ISNULL(@OST_NOTRASPRED , 0)
	
	--	1.
	--	Выбираем Платежи Импорт услуг, ссылка на ПС, распределение на ПД
	--
	SELECT	ISNULL(U_RESIDENTS.NAMER_S, U_RESIDENTS.NAMER)						AS NAMER,
			U_DOGOVOR.RESIDENT_ID, 
			U_DOGOVOR.DOG_ID, 
			U_DOGOVOR.N_KONTR,
			U_DOGOVOR.D_KONTR,
			U_IN_PART.NAMEP,
			--	Дата завершения исполнения обязательств по Договору (контракту)
			[dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID)	AS D_END_FOR_DOG_ID,
			U_PS.N_PS															AS N_PS,
			U_OPLATA.OPL_ID, 	
			U_OPLATA.NPP, 
			U_OPLATA.D_REFER, 
			U_OPLATA.N_REFER, 
			U_OPLATA.KODOP, 
			U_OPLATA.TYPE, 
			U_OPLATA.VALP,
			U_OPLATA.SUMP,
			U_OPLATA.VALK, 
			U_OPLATA.SUMK, 
			(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID) 
			+ 
			(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND (R.OPL_ID = U_OPLATA.OPL_ID OR R.OPL_ID2 = U_OPLATA.OPL_ID)) 
			AS SUM_RASPR_ALL,
			U_OPLATA.SUMK - 
			(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID) 
			- 
			(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND (R.OPL_ID = U_OPLATA.OPL_ID OR R.OPL_ID2 = U_OPLATA.OPL_ID)) 
			AS	SUM_OST,
			'ПД : ' + CONVERT( VARCHAR(15), U_SPR_CONFIRM.SPR_ID ) + ' ( ' + + CONVERT( VARCHAR(15), U_SPR_CONFIRM.NPP ) + ' )'	
			AS	INFO_PRIM,
			U_SPR_CONFIRM.KODD					AS	INFO_KODD,
			U_SPR_CONFIRM.D_DOC 				AS	INFO_D_DOC,
			U_SPR_CONFIRM.N_GTD 				AS	INFO_N_DOC,
			U_SPR_CONFIRM.VALP					AS	INFO_VALP,
			U_SPR_CONFIRM.SUMP					AS	INFO_SUMP,
			U_SPR_CONFIRM.SUMK					AS	INFO_SUMK,
			U_RASPRED_OPLATA_SPR_CONFIRM.SUMK	AS	INFO_RASPRED_SUMK,
			U_RASPRED_OPLATA_SPR_CONFIRM.D_KOR	AS	INFO_RASPRED_DATE,
			CASE
				WHEN	U_SPR_CONFIRM.PS_ID	IS NOT NULL			AND
						U_OPLATA.PS_ID		<> U_SPR_CONFIRM.PS_ID
				THEN	'*'
				ELSE	NULL
			END									AS	PRIZ_DR_PS
	FROM	U_OPLATA (NOLOCK)
	INNER	JOIN	U_USERS_RESIDENTS (NOLOCK) ON 
			U_USERS_RESIDENTS.RESIDENT_ID	= U_OPLATA.RESIDENT_ID	AND
			U_USERS_RESIDENTS.USER_ID		= @USER_ID
	INNER	JOIN 	U_RESIDENTS (NOLOCK) ON
			U_RESIDENTS.RESIDENT_ID			= U_OPLATA.RESIDENT_ID	AND
			U_RESIDENTS.DEL_FLAG			IS NULL
	INNER	JOIN	U_PS (NOLOCK) ON
			U_PS.RESIDENT_ID				= U_OPLATA.RESIDENT_ID	AND
			U_PS.PS_ID						= U_OPLATA.PS_ID		AND
			U_PS.DEL_FLAG		IS NULL			
	INNER	JOIN	U_DOGOVOR (NOLOCK) ON
			U_DOGOVOR.RESIDENT_ID			= U_PS.RESIDENT_ID		AND
			U_DOGOVOR.DOG_ID				= U_PS.DOG_ID			AND
			U_DOGOVOR.DOG_NPP				= U_PS.DOG_NPP			AND
			U_DOGOVOR.DEL_FLAG				IS NULL					
	INNER	JOIN U_IN_PART (NOLOCK) ON	
			U_IN_PART.PARTNER_ID			= U_DOGOVOR.PARTNER_ID	AND
			U_IN_PART.DEL_FLAG				IS NULL		
	LEFT	OUTER JOIN	U_RASPRED_OPLATA_SPR_CONFIRM (NOLOCK) ON
			U_RASPRED_OPLATA_SPR_CONFIRM.RESIDENT_ID	= U_OPLATA.RESIDENT_ID	AND 
			U_RASPRED_OPLATA_SPR_CONFIRM.OPL_ID			= U_OPLATA.OPL_ID 		
	LEFT	OUTER JOIN	U_SPR_CONFIRM (NOLOCK) ON
			U_SPR_CONFIRM.RESIDENT_ID 		= U_RASPRED_OPLATA_SPR_CONFIRM.RESIDENT_ID	AND 
			U_SPR_CONFIRM.PD_ID 			= U_RASPRED_OPLATA_SPR_CONFIRM.PD_ID
	WHERE 	U_OPLATA.DEL_FLAG			IS NULL					AND
			U_OPLATA.SUMK -
			(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID) 
			- 
			(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND (R.OPL_ID = U_OPLATA.OPL_ID OR R.OPL_ID2 = U_OPLATA.OPL_ID)) > @OST_NOTRASPRED AND
			-- Платежи Импорт услуг
			( U_OPLATA.DIRECTION = '2'	AND
		       	 ( ( U_OPLATA.KODOP >= '21010'	AND U_OPLATA.KODOP <= '21040' ) 
				OR
		         ( U_OPLATA.KODOP = '35020'	AND U_OPLATA.TYPE = '4' ) )
			)													AND
			-- отбор по Участнику ВЭД
			(
				@RESIDENT_ID			= 0		OR
				U_OPLATA.RESIDENT_ID	= @RESIDENT_ID
			)													AND
			-- Платёжи по ПС
			U_OPLATA.PS_ID	IS NOT NULL							AND
			-- отбор по Договору (контракту)
			(
				@DOG_ID				= 0	OR
				U_DOGOVOR.DOG_ID	= @DOG_ID
			)													AND
			-- отбор по диапазону Даты завершения исполнения обязательств
			(	@D_END_BEG	IS NULL		OR
				ISNULL( [dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID), CONVERT(DATETIME, '30000606' ))	>= ISNULL(@D_END_BEG, CONVERT(DATETIME, '19000101'))
			)	AND
			(	@D_END_END	IS NULL		OR
				ISNULL( [dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID), CONVERT(DATETIME, '30000606' ))	<= ISNULL(@D_END_END, CONVERT(DATETIME, '30000606'))	
			)	
	
	UNION
	--	2.
	--	Выбираем Платежи Импорт услуг, ссылка на Договор (контракт), распределение на ПД
	--
	SELECT	ISNULL(U_RESIDENTS.NAMER_S, U_RESIDENTS.NAMER)							AS NAMER,
			U_DOGOVOR.RESIDENT_ID, 
			U_DOGOVOR.DOG_ID, 
			U_DOGOVOR.N_KONTR,
			U_DOGOVOR.D_KONTR,
			U_IN_PART.NAMEP,
			--	Дата завершения исполнения обязательств по Договору (контракту)
			[dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID)		AS D_END_FOR_DOG_ID,
			NULL																	AS N_PS,		
			U_OPLATA.OPL_ID, 	
			U_OPLATA.NPP, 
			U_OPLATA.D_REFER, 
			U_OPLATA.N_REFER, 
			U_OPLATA.KODOP, 
			U_OPLATA.TYPE, 
			U_OPLATA.VALP,
			U_OPLATA.SUMP,
			U_OPLATA.VALK, 
			U_OPLATA.SUMK, 
			(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID) 
			+ 
			(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND (R.OPL_ID = U_OPLATA.OPL_ID OR R.OPL_ID2 = U_OPLATA.OPL_ID)) 
			AS SUM_RASPR_ALL,
			U_OPLATA.SUMK - 
			(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID) 
			- 
			(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND (R.OPL_ID = U_OPLATA.OPL_ID OR R.OPL_ID2 = U_OPLATA.OPL_ID)) 
			AS	SUM_OST,
			'ПД : ' + CONVERT( VARCHAR(15), U_SPR_CONFIRM.SPR_ID ) + ' ( ' + + CONVERT( VARCHAR(15), U_SPR_CONFIRM.NPP ) + ' )'	
			AS	INFO_PRIM,
			U_SPR_CONFIRM.KODD					AS	INFO_KODD,
			U_SPR_CONFIRM.D_DOC 				AS	INFO_D_DOC,
			U_SPR_CONFIRM.N_GTD 				AS	INFO_N_DOC,
			U_SPR_CONFIRM.VALP					AS	INFO_VALP,
			U_SPR_CONFIRM.SUMP					AS	INFO_SUMP,
			U_SPR_CONFIRM.SUMK					AS	INFO_SUMK,
			U_RASPRED_OPLATA_SPR_CONFIRM.SUMK	AS	INFO_RASPRED_SUMK,
			U_RASPRED_OPLATA_SPR_CONFIRM.D_KOR	AS	INFO_RASPRED_DATE,
			NULL								AS	PRIZ_DR_PS
	FROM	U_OPLATA (NOLOCK)
	INNER	JOIN	U_USERS_RESIDENTS (NOLOCK) ON 
			U_USERS_RESIDENTS.RESIDENT_ID	= U_OPLATA.RESIDENT_ID	AND
			U_USERS_RESIDENTS.USER_ID		= @USER_ID
	INNER	JOIN 	U_RESIDENTS (NOLOCK) ON
			U_RESIDENTS.RESIDENT_ID			= U_OPLATA.RESIDENT_ID	AND
			U_RESIDENTS.DEL_FLAG			IS NULL
	INNER	JOIN	U_DOGOVOR (NOLOCK) ON
			U_DOGOVOR.RESIDENT_ID			= U_OPLATA.RESIDENT_ID	AND
			U_DOGOVOR.DOG_ID				= U_OPLATA.DOG_ID		AND
			U_DOGOVOR.DOG_NPP				= U_OPLATA.DOG_NPP		AND
			U_DOGOVOR.DEL_FLAG				IS NULL					
	INNER	JOIN U_IN_PART (NOLOCK) ON	
			U_IN_PART.PARTNER_ID			= U_DOGOVOR.PARTNER_ID	AND
			U_IN_PART.DEL_FLAG				IS NULL		
	LEFT	OUTER JOIN	U_RASPRED_OPLATA_SPR_CONFIRM (NOLOCK) ON
			U_RASPRED_OPLATA_SPR_CONFIRM.RESIDENT_ID	= U_OPLATA.RESIDENT_ID	AND 
			U_RASPRED_OPLATA_SPR_CONFIRM.OPL_ID			= U_OPLATA.OPL_ID 		
	LEFT	OUTER JOIN	U_SPR_CONFIRM (NOLOCK) ON
			U_SPR_CONFIRM.RESIDENT_ID 		= U_RASPRED_OPLATA_SPR_CONFIRM.RESIDENT_ID	AND 
			U_SPR_CONFIRM.PD_ID 			= U_RASPRED_OPLATA_SPR_CONFIRM.PD_ID
	WHERE 	U_OPLATA.DEL_FLAG		IS NULL						AND
			U_OPLATA.SUMK -
			(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID) 
			- 
			(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND (R.OPL_ID = U_OPLATA.OPL_ID OR R.OPL_ID2 = U_OPLATA.OPL_ID)) > @OST_NOTRASPRED AND
			-- Платежи Импорт услуг
			( U_OPLATA.DIRECTION = '2'	AND
		       	 ( ( U_OPLATA.KODOP >= '21010'	AND U_OPLATA.KODOP <= '21040' ) 
				OR
		         ( U_OPLATA.KODOP = '35020'	AND U_OPLATA.TYPE = '4' ) )
			)													AND
			-- отбор по Участнику ВЭД
			(
				@RESIDENT_ID			= 0		OR
				U_OPLATA.RESIDENT_ID	= @RESIDENT_ID
			)													AND
			-- Платёжи по Договору (контракту) (без ПС)
			U_OPLATA.PS_ID	IS NULL								AND
			U_OPLATA.DOG_ID	IS NOT NULL							AND
			-- отбор по Договору (контракту)
			(
				@DOG_ID				= 0	OR
				U_DOGOVOR.DOG_ID	= @DOG_ID
			)													AND
			-- отбор по диапазону Даты завершения исполнения обязательств
			(	@D_END_BEG	IS NULL		OR
				ISNULL( [dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID), CONVERT(DATETIME, '30000606' ))	>= ISNULL(@D_END_BEG, CONVERT(DATETIME, '19000101'))
			)	AND
			(	@D_END_END	IS NULL		OR
				ISNULL( [dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID), CONVERT(DATETIME, '30000606' ))	<= ISNULL(@D_END_END, CONVERT(DATETIME, '30000606'))	
			)	
	
	UNION
	--	3.
	--	Выбираем Платежи Импорт услуг, ссылка на ПС, распределение на Возвраты
	--
	SELECT	ISNULL(U_RESIDENTS.NAMER_S, U_RESIDENTS.NAMER)						AS NAMER,
			U_DOGOVOR.RESIDENT_ID, 
			U_DOGOVOR.DOG_ID, 
			U_DOGOVOR.N_KONTR,
			U_DOGOVOR.D_KONTR,
			U_IN_PART.NAMEP,
			--	Дата завершения исполнения обязательств по Договору 
			[dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID)	AS D_END_FOR_DOG_ID,
			U_PS.N_PS															AS N_PS,		
			U_OPLATA.OPL_ID, 
			U_OPLATA.NPP, 
			U_OPLATA.D_REFER, 
			U_OPLATA.N_REFER, 
			U_OPLATA.KODOP, 
			U_OPLATA.TYPE, 
			U_OPLATA.VALP,
			U_OPLATA.SUMP,
			U_OPLATA.VALK, 
			U_OPLATA.SUMK, 
			(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID) 
			+ 
			(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND (R.OPL_ID = U_OPLATA.OPL_ID OR R.OPL_ID2 = U_OPLATA.OPL_ID)) 
			AS	SUM_RASPR_ALL,
			U_OPLATA.SUMK - 
			(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID) 
			- 
			(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND (R.OPL_ID = U_OPLATA.OPL_ID OR R.OPL_ID2 = U_OPLATA.OPL_ID)) 
			AS	SUM_OST,
			'Воз: '	+ 	CONVERT( VARCHAR(15), U_OPLATA2.NPP)
			AS	INFO_PRIM,
			U_OPLATA2.KODOP					AS	INFO_KODD,
			U_OPLATA2.D_REFER 				AS	INFO_D_DOC,
			U_OPLATA2.N_REFER 				AS	INFO_N_DOC,
			U_OPLATA2.VALP					AS	INFO_VALP,
			U_OPLATA2.SUMP					AS	INFO_SUMP,
			U_OPLATA2.SUMK					AS	INFO_SUMK,
			U_RASPRED_OPLATA_OPLATA.SUMK	AS	INFO_RASPRED_SUMK,
			U_RASPRED_OPLATA_OPLATA.D_KOR	AS	INFO_RASPRED_DATE,
			CASE
				WHEN	U_OPLATA2.PS_ID		IS NOT NULL		AND
						U_OPLATA.PS_ID		<> U_OPLATA2.PS_ID
				THEN	'*'
				ELSE	NULL
			END	AS	PRIZ_DR_PS
	FROM	U_OPLATA (NOLOCK)
	INNER	JOIN	U_USERS_RESIDENTS (NOLOCK) ON 
			U_USERS_RESIDENTS.RESIDENT_ID	= U_OPLATA.RESIDENT_ID	AND
			U_USERS_RESIDENTS.USER_ID		= @USER_ID
	INNER	JOIN	U_RESIDENTS (NOLOCK) ON
			U_RESIDENTS.RESIDENT_ID			= U_OPLATA.RESIDENT_ID	AND
			U_RESIDENTS.DEL_FLAG			IS NULL
	INNER	JOIN	U_PS (NOLOCK) ON
			U_PS.RESIDENT_ID				= U_OPLATA.RESIDENT_ID	AND
			U_PS.PS_ID						= U_OPLATA.PS_ID		AND
			U_PS.DEL_FLAG					IS NULL					
	INNER	JOIN	U_DOGOVOR (NOLOCK) ON
			U_DOGOVOR.RESIDENT_ID			= U_PS.RESIDENT_ID		AND
			U_DOGOVOR.DOG_ID				= U_PS.DOG_ID			AND
			U_DOGOVOR.DOG_NPP				= U_PS.DOG_NPP			AND
			U_DOGOVOR.DEL_FLAG		IS NULL					
	INNER	JOIN U_IN_PART (NOLOCK) ON	
			U_IN_PART.PARTNER_ID			= U_DOGOVOR.PARTNER_ID	AND
			U_IN_PART.DEL_FLAG				IS NULL		
	LEFT	OUTER JOIN	U_RASPRED_OPLATA_OPLATA (NOLOCK)	ON
			U_RASPRED_OPLATA_OPLATA.RESIDENT_ID = U_OPLATA.RESIDENT_ID	AND 
			U_RASPRED_OPLATA_OPLATA.OPL_ID2 	= U_OPLATA.OPL_ID		
	LEFT	OUTER JOIN	U_OPLATA AS U_OPLATA2 (NOLOCK)	ON
			U_OPLATA2.RESIDENT_ID 			= U_RASPRED_OPLATA_OPLATA.RESIDENT_ID	AND 
			U_OPLATA2.OPL_ID 				= U_RASPRED_OPLATA_OPLATA.OPL_ID
	WHERE 	U_OPLATA.DEL_FLAG		IS NULL				AND
			U_OPLATA.SUMK -
			(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID) 
			- 
			(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND (R.OPL_ID = U_OPLATA.OPL_ID OR R.OPL_ID2 = U_OPLATA.OPL_ID)) > @OST_NOTRASPRED AND
			-- Платежи Импорт услуг
			( U_OPLATA.DIRECTION = '2'	AND
		        ( ( U_OPLATA.KODOP >= '21010'	AND U_OPLATA.KODOP <= '21040' ) 
				OR
		          ( U_OPLATA.KODOP = '35020'	AND U_OPLATA.TYPE = '4' ) )
			)											AND
			-- отбор по Участнику ВЭД
			(
				@RESIDENT_ID			= 0	OR
				U_OPLATA.RESIDENT_ID	= @RESIDENT_ID
			)											AND
			-- Платёжи по ПС
			U_OPLATA.PS_ID	IS NOT NULL					AND
			-- отбор по Договору (контракту)		
			(
				@DOG_ID				= 0	OR
				U_DOGOVOR.DOG_ID	= @DOG_ID
			)											AND
			-- отбор по диапазону Даты завершения исполнения обязательств
			(	@D_END_BEG	IS NULL		OR
				ISNULL( [dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID), CONVERT(DATETIME, '30000606' ))	>= ISNULL(@D_END_BEG, CONVERT(DATETIME, '19000101'))
			)	AND
			(	@D_END_END	IS NULL		OR
				ISNULL( [dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID), CONVERT(DATETIME, '30000606' ))	<= ISNULL(@D_END_END, CONVERT(DATETIME, '30000606'))	
			)	

	UNION
	--	4.
	--	Выбираем Платежи Импорт услуг, ссылка на Договор (контракт), распределение на Возвраты
	--
	SELECT	ISNULL(U_RESIDENTS.NAMER_S, U_RESIDENTS.NAMER)						AS NAMER,
			U_DOGOVOR.RESIDENT_ID, 
			U_DOGOVOR.DOG_ID, 
			U_DOGOVOR.N_KONTR,
			U_DOGOVOR.D_KONTR,
			U_IN_PART.NAMEP,
			--	Дата завершения исполнения обязательств по Договору 
			[dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID)	AS D_END_FOR_DOG_ID,
			NULL																AS N_PS,		
			U_OPLATA.OPL_ID, 
			U_OPLATA.NPP, 
			U_OPLATA.D_REFER, 
			U_OPLATA.N_REFER, 
			U_OPLATA.KODOP, 
			U_OPLATA.TYPE, 
			U_OPLATA.VALP,
			U_OPLATA.SUMP,
			U_OPLATA.VALK, 
			U_OPLATA.SUMK, 
			(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID) 
			+ 
			(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND (R.OPL_ID = U_OPLATA.OPL_ID OR R.OPL_ID2 = U_OPLATA.OPL_ID)) 
			AS	SUM_RASPR_ALL,
			U_OPLATA.SUMK - 
			(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID) 
			- 
			(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND (R.OPL_ID = U_OPLATA.OPL_ID OR R.OPL_ID2 = U_OPLATA.OPL_ID)) 
			AS	SUM_OST,
			'Воз: '	+ 	CONVERT( VARCHAR(15), U_OPLATA2.NPP)
			AS	INFO_PRIM,
			U_OPLATA2.KODOP					AS	INFO_KODD,
			U_OPLATA2.D_REFER 				AS	INFO_D_DOC,
			U_OPLATA2.N_REFER 				AS	INFO_N_DOC,
			U_OPLATA2.VALP					AS	INFO_VALP,
			U_OPLATA2.SUMP					AS	INFO_SUMP,
			U_OPLATA2.SUMK					AS	INFO_SUMK,
			U_RASPRED_OPLATA_OPLATA.SUMK	AS	INFO_RASPRED_SUMK,
			U_RASPRED_OPLATA_OPLATA.D_KOR	AS	INFO_RASPRED_DATE,
			NULL							AS	PRIZ_DR_PS
	FROM	U_OPLATA (NOLOCK)
	INNER	JOIN	U_USERS_RESIDENTS (NOLOCK) ON 
			U_USERS_RESIDENTS.RESIDENT_ID	= U_OPLATA.RESIDENT_ID	AND
			U_USERS_RESIDENTS.USER_ID		= @USER_ID
	INNER	JOIN	U_RESIDENTS (NOLOCK) ON
			U_RESIDENTS.RESIDENT_ID			= U_OPLATA.RESIDENT_ID	AND
			U_RESIDENTS.DEL_FLAG			IS NULL
	INNER	JOIN	U_DOGOVOR (NOLOCK) ON
			U_DOGOVOR.RESIDENT_ID			= U_OPLATA.RESIDENT_ID	AND
			U_DOGOVOR.DOG_ID				= U_OPLATA.DOG_ID		AND
			U_DOGOVOR.DOG_NPP				= U_OPLATA.DOG_NPP		AND
			U_DOGOVOR.DEL_FLAG				IS NULL	
	INNER	JOIN U_IN_PART (NOLOCK) ON	
			U_IN_PART.PARTNER_ID			= U_DOGOVOR.PARTNER_ID	AND
			U_IN_PART.DEL_FLAG				IS NULL		
	LEFT	OUTER JOIN	U_RASPRED_OPLATA_OPLATA (NOLOCK)	ON
			U_RASPRED_OPLATA_OPLATA.RESIDENT_ID = U_OPLATA.RESIDENT_ID	AND 
			U_RASPRED_OPLATA_OPLATA.OPL_ID2 	= U_OPLATA.OPL_ID		
	LEFT	OUTER JOIN	U_OPLATA AS U_OPLATA2 (NOLOCK)	ON
			U_OPLATA2.RESIDENT_ID 			= U_RASPRED_OPLATA_OPLATA.RESIDENT_ID	AND 
			U_OPLATA2.OPL_ID 				= U_RASPRED_OPLATA_OPLATA.OPL_ID
	WHERE 	U_OPLATA.DEL_FLAG		IS NULL				AND
			U_OPLATA.SUMK -
			(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID) 
			- 
			(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND (R.OPL_ID = U_OPLATA.OPL_ID OR R.OPL_ID2 = U_OPLATA.OPL_ID)) > @OST_NOTRASPRED AND
			-- Платежи Импорт услуг
			( U_OPLATA.DIRECTION = '2'	AND
		        ( ( U_OPLATA.KODOP >= '21010'	AND U_OPLATA.KODOP <= '21040' ) 
				OR
		          ( U_OPLATA.KODOP = '35020'	AND U_OPLATA.TYPE = '4' ) )
			)											AND
			-- отбор по Участнику ВЭД
			(
				@RESIDENT_ID			= 0	OR
				U_OPLATA.RESIDENT_ID	= @RESIDENT_ID
			)											AND
			-- Платёжи по договору (контракту) (без ПС)
			U_OPLATA.PS_ID	IS NULL						AND
			U_OPLATA.DOG_ID	IS NOT NULL					AND	
			-- отбор по Договору (контракту)			
			(
				@DOG_ID				= 0	OR
				U_DOGOVOR.DOG_ID	= @DOG_ID
			)											AND
			-- отбор по диапазону Даты завершения исполнения обязательств
			(	@D_END_BEG	IS NULL		OR
				ISNULL( [dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID), CONVERT(DATETIME, '30000606' ))	>= ISNULL(@D_END_BEG, CONVERT(DATETIME, '19000101'))
			)	AND
			(	@D_END_END	IS NULL		OR
				ISNULL( [dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID), CONVERT(DATETIME, '30000606' ))	<= ISNULL(@D_END_END, CONVERT(DATETIME, '30000606'))	
			)	
	ORDER	BY NAMER, U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.D_KONTR, U_DOGOVOR.N_KONTR, U_DOGOVOR.DOG_ID, U_OPLATA.D_REFER
GO

GRANT  EXECUTE  ON [dbo].[U_CRP_RASPRED_IMPORT_USL]  TO [OPERS], [AUDITS]
GO

--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[U_CRP_RASPRED_IMPORT_USL__PD_OPLATA]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[U_CRP_RASPRED_IMPORT_USL__PD_OPLATA]
GO

CREATE PROCEDURE [dbo].[U_CRP_RASPRED_IMPORT_USL__PD_OPLATA]
--	--------------------------------------------------------------------------------------------------------------
--	Отчёт "Контроль распределения: импорт услуг (ПД на Платежи)"
--	(дополнительная форма)
--	--------------------------------------------------------------------------------------------------------------
--	Выборка списка ПД (импорт услуг) по Договору (контракту) и распределения по ПД на Платежи
--	
--	@USER_ID		- идентификатор Пользователя
--	@RESIDENT_ID 	- интендификатор Участника ВЭД (если = 0, то все Участники ВЭД)
--	@DOG_ID 		- интендификатор Договора (контракта) ( если = 0, то по всем Договорам (контрактам) )	
--	@D_END_BEG		- нижняя граница диапазона дат окончания исполнения обязательств по контракту	
--	@D_END_END		- верхняя граница диапазона дат окончания исполнения обязательств по контракту
--	@OST_NOTRASPRED - нераспределённый остаток по ПД (>) (0 - показать с ненулевым остатком, -1 - показать все)
--	--------------------------------------------------------------------------------------------------------------
--	(Модификация	в версии 2.1.0)
--	--------------------------------------------------------------------------------------------------------------
(
	@USER_ID		AS VARCHAR(30),
	@RESIDENT_ID	AS INTEGER,
	@DOG_ID			AS INTEGER,
	@D_END_BEG		AS DATETIME		=	NULL,
	@D_END_END		AS DATETIME		=	NULL,
	@OST_NOTRASPRED	AS INTEGER
)
AS
	SET NOCOUNT ON

	SELECT	@RESIDENT_ID	= 	ISNULL(@RESIDENT_ID, 0)
	SELECT	@DOG_ID			= 	ISNULL(@DOG_ID , 0)
	SELECT	@OST_NOTRASPRED	= 	ISNULL(@OST_NOTRASPRED , 0)
	
	--	1.
	--	Выбираем ПД Импорт услуг, ссылка на ПС, распределение на Платежи
	--
	SELECT	ISNULL(U_RESIDENTS.NAMER_S, U_RESIDENTS.NAMER)						AS NAMER,
			U_DOGOVOR.RESIDENT_ID, 
			U_DOGOVOR.DOG_ID, 
			U_DOGOVOR.N_KONTR,
			U_DOGOVOR.D_KONTR,
			U_IN_PART.NAMEP,
			--	Дата завершения исполнения обязательств по Договору 
			[dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID)	AS D_END_FOR_DOG_ID,
			U_PS.N_PS															AS N_PS,
			U_SPR_CONFIRM.PD_ID, 	
			U_SPR_CONFIRM.SPR_ID, 
			U_SPR_CONFIRM.NPP, 
			U_SPR_CONFIRM.D_DOC, 
			U_SPR_CONFIRM.N_GTD, 
			U_SPR_CONFIRM.KODD, 
			U_SPR_CONFIRM.DIRECTION, 
			U_SPR_CONFIRM.VALP,		
			U_SPR_CONFIRM.SUMP, 
			U_SPR_CONFIRM.VALK, 
			U_SPR_CONFIRM.SUMK, 
			( SELECT SUM(SUMK) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_SPR_CONFIRM.RESIDENT_ID AND R.PD_ID = U_SPR_CONFIRM.PD_ID) 
			AS	SUM_RASPR_ALL,
			U_SPR_CONFIRM.SUMK - 
			( SELECT  ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_SPR_CONFIRM.RESIDENT_ID AND R.PD_ID = U_SPR_CONFIRM.PD_ID) 
			AS	SUM_OST,
			U_OPLATA.NPP						AS	INFO_NPP,  
			U_OPLATA.KODOP						AS	INFO_KODOP, 
			U_OPLATA.D_REFER					AS	INFO_D_REFER,  
			U_OPLATA.N_REFER					AS	INFO_N_REFER, 
			U_OPLATA.VALP						AS	INFO_VALP,
			U_OPLATA.SUMP						AS	INFO_SUMP,
			U_OPLATA.SUMK						AS	INFO_SUMK,
			U_RASPRED_OPLATA_SPR_CONFIRM.SUMK	AS	INFO_RASPRED_SUMK,
			U_RASPRED_OPLATA_SPR_CONFIRM.D_KOR	AS	INFO_RASPRED_DATE,
			CASE
				WHEN	U_OPLATA.PS_ID		IS NOT NULL		AND
						U_SPR_CONFIRM.PS_ID	<> U_OPLATA.PS_ID
				THEN	'*'
				ELSE	NULL
			END									AS	PRIZ_DR_PS
	FROM	U_SPR_CONFIRM (NOLOCK)
	INNER	JOIN 	U_USERS_RESIDENTS (NOLOCK) ON 
			U_USERS_RESIDENTS.RESIDENT_ID	= U_SPR_CONFIRM.RESIDENT_ID	AND
			U_USERS_RESIDENTS.USER_ID		= @USER_ID
	INNER	JOIN	U_RESIDENTS (NOLOCK) ON
			U_RESIDENTS.RESIDENT_ID			= U_SPR_CONFIRM.RESIDENT_ID	AND
			U_RESIDENTS.DEL_FLAG			IS NULL
	INNER	JOIN	U_PS (NOLOCK) ON
			U_PS.RESIDENT_ID				= U_SPR_CONFIRM.RESIDENT_ID	AND
			U_PS.PS_ID						= U_SPR_CONFIRM.PS_ID		AND
			U_PS.DEL_FLAG					IS NULL				
	INNER	JOIN	U_DOGOVOR (NOLOCK) ON
			U_DOGOVOR.RESIDENT_ID			= U_PS.RESIDENT_ID			AND
			U_DOGOVOR.DOG_ID				= U_PS.DOG_ID				AND
			U_DOGOVOR.DOG_NPP				= U_PS.DOG_NPP				AND
			U_DOGOVOR.DEL_FLAG				IS NULL		
	INNER	JOIN U_IN_PART (NOLOCK) ON	
			U_IN_PART.PARTNER_ID			= U_DOGOVOR.PARTNER_ID		AND
			U_IN_PART.DEL_FLAG				IS NULL		
	LEFT	OUTER JOIN	U_RASPRED_OPLATA_SPR_CONFIRM (NOLOCK) ON
			U_RASPRED_OPLATA_SPR_CONFIRM.RESIDENT_ID	= U_SPR_CONFIRM.RESIDENT_ID	AND 
			U_RASPRED_OPLATA_SPR_CONFIRM.PD_ID			= U_SPR_CONFIRM.PD_ID 	
	LEFT	OUTER JOIN	U_OPLATA (NOLOCK) ON
			U_OPLATA.RESIDENT_ID 			= U_RASPRED_OPLATA_SPR_CONFIRM.RESIDENT_ID	AND 
			U_OPLATA.OPL_ID					= U_RASPRED_OPLATA_SPR_CONFIRM.OPL_ID		
	WHERE	U_SPR_CONFIRM.PR_NOT_CALC	IS NULL				AND
			U_SPR_CONFIRM.DEL_FLAG		IS NULL				AND
			U_SPR_CONFIRM.SUMK - ( SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_SPR_CONFIRM.RESIDENT_ID AND R.PD_ID = U_SPR_CONFIRM.PD_ID) > @OST_NOTRASPRED AND
			-- ПД Импорт услуг
			U_SPR_CONFIRM.KODD = '04' AND U_SPR_CONFIRM.DIRECTION = '1'		AND
			-- отбор по Участнику ВЭД
			(
				@RESIDENT_ID				= 0	OR
				U_SPR_CONFIRM.RESIDENT_ID	= @RESIDENT_ID
			)												AND
			-- ПД по ПС
			U_SPR_CONFIRM.PS_ID				IS NOT NULL		AND
			-- отбор по Договору (контракту)
			(
				@DOG_ID						= 0	OR
				U_DOGOVOR.DOG_ID			= @DOG_ID
			)												AND
			-- отбор по диапазону Даты завершения исполнения обязательств
			(	@D_END_BEG	IS NULL		OR
				ISNULL( [dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID), CONVERT(DATETIME, '30000606' ))	>= ISNULL(@D_END_BEG, CONVERT(DATETIME, '19000101'))
			)	AND
			(	@D_END_END	IS NULL		OR
				ISNULL( [dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID), CONVERT(DATETIME, '30000606' ))	<= ISNULL(@D_END_END, CONVERT(DATETIME, '30000606'))	
			)	

	UNION
	--	2.
	--	Выбираем ПД Импорт услуг, ссылка на Договор (контракт), распределение на Платежи
	--
	SELECT	ISNULL(U_RESIDENTS.NAMER_S, U_RESIDENTS.NAMER)						AS NAMER,
			U_DOGOVOR.RESIDENT_ID, 
			U_DOGOVOR.DOG_ID, 
			U_DOGOVOR.N_KONTR,
			U_DOGOVOR.D_KONTR,
			U_IN_PART.NAMEP,
			--	Дата завершения исполнения обязательств по Договору 
			[dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID)	AS D_END_FOR_DOG_ID,
			NULL																AS N_PS,
			U_SPR_CONFIRM.PD_ID, 	
			U_SPR_CONFIRM.SPR_ID, 
			U_SPR_CONFIRM.NPP, 
			U_SPR_CONFIRM.D_DOC, 
			U_SPR_CONFIRM.N_GTD, 
			U_SPR_CONFIRM.KODD, 
			U_SPR_CONFIRM.DIRECTION, 
			U_SPR_CONFIRM.VALP,		
			U_SPR_CONFIRM.SUMP, 
			U_SPR_CONFIRM.VALK, 
			U_SPR_CONFIRM.SUMK, 
			( SELECT SUM(SUMK) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_SPR_CONFIRM.RESIDENT_ID AND R.PD_ID = U_SPR_CONFIRM.PD_ID) 
			AS	SUM_RASPR_ALL,
			U_SPR_CONFIRM.SUMK - 
			( SELECT  ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_SPR_CONFIRM.RESIDENT_ID AND R.PD_ID = U_SPR_CONFIRM.PD_ID) 
			AS	SUM_OST,
			U_OPLATA.NPP						AS	INFO_NPP,  
			U_OPLATA.KODOP						AS	INFO_KODOP, 
			U_OPLATA.D_REFER					AS	INFO_D_REFER,  
			U_OPLATA.N_REFER					AS	INFO_N_REFER, 
			U_OPLATA.VALP						AS	INFO_VALP,
			U_OPLATA.SUMP						AS	INFO_SUMP,
			U_OPLATA.SUMK						AS	INFO_SUMK,
			U_RASPRED_OPLATA_SPR_CONFIRM.SUMK	AS	INFO_RASPRED_SUMK,
			U_RASPRED_OPLATA_SPR_CONFIRM.D_KOR	AS	INFO_RASPRED_DATE,
			NULL								AS	PRIZ_DR_PS
	FROM	U_SPR_CONFIRM (NOLOCK)
	INNER	JOIN 	U_USERS_RESIDENTS (NOLOCK) ON 
			U_USERS_RESIDENTS.RESIDENT_ID	= U_SPR_CONFIRM.RESIDENT_ID	AND
			U_USERS_RESIDENTS.USER_ID		= @USER_ID
	INNER	JOIN	U_RESIDENTS (NOLOCK) ON
			U_RESIDENTS.RESIDENT_ID			= U_SPR_CONFIRM.RESIDENT_ID	AND
			U_RESIDENTS.DEL_FLAG			IS NULL
	INNER	JOIN	U_DOGOVOR (NOLOCK) ON
			U_DOGOVOR.RESIDENT_ID			= U_SPR_CONFIRM.RESIDENT_ID	AND
			U_DOGOVOR.DOG_ID				= U_SPR_CONFIRM.DOG_ID		AND
			U_DOGOVOR.DOG_NPP				= U_SPR_CONFIRM.DOG_NPP		AND
			U_DOGOVOR.DEL_FLAG				IS NULL		
	INNER	JOIN U_IN_PART (NOLOCK) ON	
			U_IN_PART.PARTNER_ID			= U_DOGOVOR.PARTNER_ID		AND
			U_IN_PART.DEL_FLAG				IS NULL		
	LEFT	OUTER JOIN	U_RASPRED_OPLATA_SPR_CONFIRM (NOLOCK) ON
			U_RASPRED_OPLATA_SPR_CONFIRM.RESIDENT_ID	= U_SPR_CONFIRM.RESIDENT_ID	AND 
			U_RASPRED_OPLATA_SPR_CONFIRM.PD_ID			= U_SPR_CONFIRM.PD_ID 	
	LEFT	OUTER JOIN	U_OPLATA (NOLOCK) ON
			U_OPLATA.RESIDENT_ID 			= U_RASPRED_OPLATA_SPR_CONFIRM.RESIDENT_ID	AND 
			U_OPLATA.OPL_ID					= U_RASPRED_OPLATA_SPR_CONFIRM.OPL_ID		
	WHERE	U_SPR_CONFIRM.PR_NOT_CALC	IS NULL				AND
			U_SPR_CONFIRM.DEL_FLAG		IS NULL				AND
			U_SPR_CONFIRM.SUMK - ( SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_SPR_CONFIRM.RESIDENT_ID AND R.PD_ID = U_SPR_CONFIRM.PD_ID) > @OST_NOTRASPRED AND
			-- ПД Импорт услуг
			U_SPR_CONFIRM.KODD = '04' AND U_SPR_CONFIRM.DIRECTION = '1'		AND
			-- отбор по Участнику ВЭД
			(
				@RESIDENT_ID				= 0	OR
				U_SPR_CONFIRM.RESIDENT_ID	= @RESIDENT_ID
			)												AND
			-- ПД по Договору (контракту) (без ПС)
			U_SPR_CONFIRM.PS_ID				IS NULL			AND
			U_SPR_CONFIRM.DOG_ID			IS NOT NULL		AND
			-- отбор по Договору (контракту)
			(
				@DOG_ID						= 0	OR
				U_DOGOVOR.DOG_ID			= @DOG_ID
			)												AND
			-- отбор по диапазону Даты завершения исполнения обязательств
			(	@D_END_BEG	IS NULL		OR
				ISNULL( [dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID), CONVERT(DATETIME, '30000606' ))	>= ISNULL(@D_END_BEG, CONVERT(DATETIME, '19000101'))
			)	AND
			(	@D_END_END	IS NULL		OR
				ISNULL( [dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID), CONVERT(DATETIME, '30000606' ))	<= ISNULL(@D_END_END, CONVERT(DATETIME, '30000606'))	
			)	
	ORDER	BY NAMER, U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.D_KONTR, U_DOGOVOR.N_KONTR, U_DOGOVOR.DOG_ID, U_SPR_CONFIRM.D_DOC
GO

GRANT  EXECUTE  ON [dbo].[U_CRP_RASPRED_IMPORT_USL__PD_OPLATA]  TO [OPERS], [AUDITS]
GO

--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[U_CRP_RASPRED_EXPORT_USL]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[U_CRP_RASPRED_EXPORT_USL]
GO

CREATE PROCEDURE [dbo].[U_CRP_RASPRED_EXPORT_USL]
--	--------------------------------------------------------------------------------------------------------------
--	Отчёт "Контроль распределения: экспорт услуг (ПД на Платежи)"
--	(основная форма)
--	--------------------------------------------------------------------------------------------------------------
--	Выборка списка ПД (экспорт услуг) по Договору (контракту) и распределения по ПД на Платежи
--	
--	@USER_ID		- идентификатор Пользователя
--	@RESIDENT_ID 	- интендификатор Участника ВЭД (если = 0, то все Участники ВЭД)
--	@DOG_ID 		- интендификатор Договора (контракта) ( если = 0, то по всем Договорам (контрактам) )	
--	@D_END_BEG		- нижняя граница диапазона дат окончания исполнения обязательств по контракту	
--	@D_END_END		- верхняя граница диапазона дат окончания исполнения обязательств по контракту
--	@OST_NOTRASPRED - нераспределённый остаток по ПД (>) (0 - показать с ненулевым остатком, -1 - показать все)
--	--------------------------------------------------------------------------------------------------------------
--	(Модификация	в версии 2.1.0)
--	--------------------------------------------------------------------------------------------------------------
(
	@USER_ID		AS VARCHAR(30),
	@RESIDENT_ID	AS INTEGER,
	@DOG_ID			AS INTEGER,
	@D_END_BEG		AS DATETIME		=	NULL,
	@D_END_END		AS DATETIME		=	NULL,
	@OST_NOTRASPRED	AS INTEGER
)
AS
	SET NOCOUNT ON

	SELECT	@RESIDENT_ID	= 	ISNULL(@RESIDENT_ID, 0)
	SELECT	@DOG_ID			= 	ISNULL(@DOG_ID , 0)
	SELECT	@OST_NOTRASPRED	= 	ISNULL(@OST_NOTRASPRED , 0)
	
	--	1.
	--	Выбираем ПД Экспорт услуг, ссылка на ПС, распределение на Платежи
	--
	SELECT	ISNULL(U_RESIDENTS.NAMER_S, U_RESIDENTS.NAMER)						AS NAMER,
			U_DOGOVOR.RESIDENT_ID, 
			U_DOGOVOR.DOG_ID, 
			U_DOGOVOR.N_KONTR,
			U_DOGOVOR.D_KONTR,
			U_IN_PART.NAMEP,
			--	Дата завершения исполнения обязательств по Договору 
			[dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID)	AS D_END_FOR_DOG_ID,
			U_PS.N_PS															AS N_PS,	
			U_SPR_CONFIRM.PD_ID, 	
			U_SPR_CONFIRM.SPR_ID, 
			U_SPR_CONFIRM.NPP, 
			U_SPR_CONFIRM.D_DOC, 
			U_SPR_CONFIRM.N_GTD, 
			U_SPR_CONFIRM.KODD, 
			U_SPR_CONFIRM.DIRECTION, 
			U_SPR_CONFIRM.VALP,		
			U_SPR_CONFIRM.SUMP, 
			U_SPR_CONFIRM.VALK, 
			U_SPR_CONFIRM.SUMK, 
			( SELECT SUM(SUMK) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_SPR_CONFIRM.RESIDENT_ID AND R.PD_ID = U_SPR_CONFIRM.PD_ID) 
			AS	SUM_RASPR_ALL,
			U_SPR_CONFIRM.SUMK - 
			( SELECT  ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_SPR_CONFIRM.RESIDENT_ID AND R.PD_ID = U_SPR_CONFIRM.PD_ID) 
			AS	SUM_OST,
			U_OPLATA.NPP						AS	INFO_NPP,  
			U_OPLATA.KODOP						AS	INFO_KODOP, 
			U_OPLATA.D_REFER					AS	INFO_D_REFER,  
			U_OPLATA.N_REFER					AS	INFO_N_REFER, 
			U_OPLATA.VALP						AS	INFO_VALP,
			U_OPLATA.SUMP						AS	INFO_SUMP,
			U_OPLATA.SUMK						AS	INFO_SUMK,
			U_RASPRED_OPLATA_SPR_CONFIRM.SUMK	AS	INFO_RASPRED_SUMK,
			U_RASPRED_OPLATA_SPR_CONFIRM.D_KOR	AS	INFO_RASPRED_DATE,
			CASE
				WHEN	U_OPLATA.PS_ID		IS NOT NULL		AND
						U_SPR_CONFIRM.PS_ID	<> U_OPLATA.PS_ID
				THEN	'*'
				ELSE	NULL
			END									AS	PRIZ_DR_PS
	FROM	U_SPR_CONFIRM (NOLOCK)
	INNER	JOIN 	U_USERS_RESIDENTS (NOLOCK) ON 
			U_USERS_RESIDENTS.RESIDENT_ID	= U_SPR_CONFIRM.RESIDENT_ID	AND
			U_USERS_RESIDENTS.USER_ID		= @USER_ID
	INNER	JOIN	U_RESIDENTS (NOLOCK) ON
			U_RESIDENTS.RESIDENT_ID			= U_SPR_CONFIRM.RESIDENT_ID	AND
			U_RESIDENTS.DEL_FLAG			IS NULL
	INNER	JOIN	U_PS (NOLOCK) ON
			U_PS.RESIDENT_ID				= U_SPR_CONFIRM.RESIDENT_ID	AND
			U_PS.PS_ID						= U_SPR_CONFIRM.PS_ID		AND
			U_PS.DEL_FLAG					IS NULL				
	INNER	JOIN	U_DOGOVOR (NOLOCK) ON
			U_DOGOVOR.RESIDENT_ID			= U_PS.RESIDENT_ID			AND
			U_DOGOVOR.DOG_ID				= U_PS.DOG_ID				AND
			U_DOGOVOR.DOG_NPP				= U_PS.DOG_NPP				AND
			U_DOGOVOR.DEL_FLAG				IS NULL		
	INNER	JOIN U_IN_PART (NOLOCK) ON	
			U_IN_PART.PARTNER_ID			= U_DOGOVOR.PARTNER_ID		AND
			U_IN_PART.DEL_FLAG				IS NULL		
	LEFT	OUTER JOIN	U_RASPRED_OPLATA_SPR_CONFIRM (NOLOCK) ON
			U_RASPRED_OPLATA_SPR_CONFIRM.RESIDENT_ID	= U_SPR_CONFIRM.RESIDENT_ID	AND 
			U_RASPRED_OPLATA_SPR_CONFIRM.PD_ID			= U_SPR_CONFIRM.PD_ID
	LEFT	OUTER JOIN	U_OPLATA (NOLOCK) ON
			U_OPLATA.RESIDENT_ID 			= U_RASPRED_OPLATA_SPR_CONFIRM.RESIDENT_ID	AND 
			U_OPLATA.OPL_ID					= U_RASPRED_OPLATA_SPR_CONFIRM.OPL_ID		
	WHERE	U_SPR_CONFIRM.PR_NOT_CALC	IS NULL				AND
			U_SPR_CONFIRM.DEL_FLAG		IS NULL				AND
			U_SPR_CONFIRM.SUMK - ( SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_SPR_CONFIRM.RESIDENT_ID AND R.PD_ID = U_SPR_CONFIRM.PD_ID) > @OST_NOTRASPRED AND
			-- ПД Экспорт услуг
			(
				U_SPR_CONFIRM.KODD = '04' AND U_SPR_CONFIRM.DIRECTION = '2' 
				OR 
				U_SPR_CONFIRM.KODD = '05'
			)												AND
			-- отбор по Участнику ВЭД
			(
				@RESIDENT_ID				= 0	OR
				U_SPR_CONFIRM.RESIDENT_ID	= @RESIDENT_ID
			)												AND
			-- ПД по ПС
			U_SPR_CONFIRM.PS_ID				IS NOT NULL		AND
			-- отбор по Договору (контракту)
			(
				@DOG_ID						= 0	OR
				U_DOGOVOR.DOG_ID			= @DOG_ID
			)												AND
			-- отбор по диапазону Даты завершения исполнения обязательств
			(	@D_END_BEG	IS NULL		OR
				ISNULL( [dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID), CONVERT(DATETIME, '30000606' ))	>= ISNULL(@D_END_BEG, CONVERT(DATETIME, '19000101'))
			)	AND
			(	@D_END_END	IS NULL		OR
				ISNULL( [dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID), CONVERT(DATETIME, '30000606' ))	<= ISNULL(@D_END_END, CONVERT(DATETIME, '30000606'))	
			)	

	UNION
	--	2.
	--	Выбираем ПД Экспорт услуг, ссылка на Договор (контракт), распределение на Платежи
	--
	SELECT	ISNULL(U_RESIDENTS.NAMER_S, U_RESIDENTS.NAMER)						AS NAMER,
			U_DOGOVOR.RESIDENT_ID, 
			U_DOGOVOR.DOG_ID, 
			U_DOGOVOR.N_KONTR,
			U_DOGOVOR.D_KONTR,
			U_IN_PART.NAMEP,
			--	Дата завершения исполнения обязательств по Договору 
			[dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID)	AS D_END_FOR_DOG_ID,
			NULL																AS N_PS,
			U_SPR_CONFIRM.PD_ID, 
			U_SPR_CONFIRM.SPR_ID, 
			U_SPR_CONFIRM.NPP, 
			U_SPR_CONFIRM.D_DOC, 
			U_SPR_CONFIRM.N_GTD, 
			U_SPR_CONFIRM.KODD, 
			U_SPR_CONFIRM.DIRECTION, 
			U_SPR_CONFIRM.VALP,		
			U_SPR_CONFIRM.SUMP, 
			U_SPR_CONFIRM.VALK, 
			U_SPR_CONFIRM.SUMK, 
			( SELECT SUM(SUMK) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_SPR_CONFIRM.RESIDENT_ID AND R.PD_ID = U_SPR_CONFIRM.PD_ID) 
			AS	SUM_RASPR_ALL,
			U_SPR_CONFIRM.SUMK - 
			( SELECT  ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_SPR_CONFIRM.RESIDENT_ID AND R.PD_ID = U_SPR_CONFIRM.PD_ID) 
			AS	SUM_OST,
			U_OPLATA.NPP						AS	INFO_NPP,  
			U_OPLATA.KODOP						AS	INFO_KODOP, 
			U_OPLATA.D_REFER					AS	INFO_D_REFER,  
			U_OPLATA.N_REFER					AS	INFO_N_REFER, 
			U_OPLATA.VALP						AS	INFO_VALP,
			U_OPLATA.SUMP						AS	INFO_SUMP,
			U_OPLATA.SUMK						AS	INFO_SUMK,
			U_RASPRED_OPLATA_SPR_CONFIRM.SUMK	AS	INFO_RASPRED_SUMK,
			U_RASPRED_OPLATA_SPR_CONFIRM.D_KOR	AS	INFO_RASPRED_DATE,
			NULL								AS	PRIZ_DR_PS
	FROM	U_SPR_CONFIRM (NOLOCK)
	INNER	JOIN 	U_USERS_RESIDENTS (NOLOCK) ON 
			U_USERS_RESIDENTS.RESIDENT_ID	= U_SPR_CONFIRM.RESIDENT_ID	AND
			U_USERS_RESIDENTS.USER_ID		= @USER_ID
	INNER	JOIN	U_RESIDENTS (NOLOCK) ON
			U_RESIDENTS.RESIDENT_ID			= U_SPR_CONFIRM.RESIDENT_ID	AND
			U_RESIDENTS.DEL_FLAG			IS NULL
	INNER	JOIN	U_DOGOVOR (NOLOCK) ON
			U_DOGOVOR.RESIDENT_ID			= U_SPR_CONFIRM.RESIDENT_ID	AND
			U_DOGOVOR.DOG_ID				= U_SPR_CONFIRM.DOG_ID		AND
			U_DOGOVOR.DOG_NPP				= U_SPR_CONFIRM.DOG_NPP		AND
			U_DOGOVOR.DEL_FLAG				IS NULL		
	INNER	JOIN U_IN_PART (NOLOCK) ON	
			U_IN_PART.PARTNER_ID			= U_DOGOVOR.PARTNER_ID		AND
			U_IN_PART.DEL_FLAG				IS NULL		
	LEFT	OUTER JOIN	U_RASPRED_OPLATA_SPR_CONFIRM (NOLOCK) ON
			U_RASPRED_OPLATA_SPR_CONFIRM.RESIDENT_ID	= U_SPR_CONFIRM.RESIDENT_ID	AND 
			U_RASPRED_OPLATA_SPR_CONFIRM.PD_ID			= U_SPR_CONFIRM.PD_ID
	LEFT	OUTER JOIN	U_OPLATA (NOLOCK) ON
			U_OPLATA.RESIDENT_ID 			= U_RASPRED_OPLATA_SPR_CONFIRM.RESIDENT_ID	AND 
			U_OPLATA.OPL_ID					= U_RASPRED_OPLATA_SPR_CONFIRM.OPL_ID		
	WHERE	U_SPR_CONFIRM.PR_NOT_CALC	IS NULL				AND
			U_SPR_CONFIRM.DEL_FLAG		IS NULL				AND
			U_SPR_CONFIRM.SUMK - ( SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_SPR_CONFIRM.RESIDENT_ID AND R.PD_ID = U_SPR_CONFIRM.PD_ID) > @OST_NOTRASPRED AND
			-- ПД Экспорт услуг
			(
				U_SPR_CONFIRM.KODD = '04' AND U_SPR_CONFIRM.DIRECTION = '2' 
				OR 
				U_SPR_CONFIRM.KODD = '05'
			)												AND
			-- отбор по Участнику ВЭД
			(
				@RESIDENT_ID				= 0	OR
				U_SPR_CONFIRM.RESIDENT_ID	= @RESIDENT_ID
			)												AND
			-- ПД по Договору (контракту) (без ПС)
			U_SPR_CONFIRM.PS_ID				IS NULL			AND
			U_SPR_CONFIRM.DOG_ID			IS NOT NULL		AND
			-- отбор по Договору (контракту)
			(
				@DOG_ID						= 0	OR
				U_DOGOVOR.DOG_ID			= @DOG_ID
			)												AND
			-- отбор по диапазону Даты завершения исполнения обязательств
			(	@D_END_BEG	IS NULL		OR
				ISNULL( [dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID), CONVERT(DATETIME, '30000606' ))	>= ISNULL(@D_END_BEG, CONVERT(DATETIME, '19000101'))
			)	AND
			(	@D_END_END	IS NULL		OR
				ISNULL( [dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID), CONVERT(DATETIME, '30000606' ))	<= ISNULL(@D_END_END, CONVERT(DATETIME, '30000606'))	
			)	
	ORDER	BY NAMER, U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.D_KONTR, U_DOGOVOR.N_KONTR, U_DOGOVOR.DOG_ID, U_SPR_CONFIRM.D_DOC		
GO

GRANT  EXECUTE  ON [dbo].[U_CRP_RASPRED_EXPORT_USL]  TO [OPERS], [AUDITS]
GO

--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[U_CRP_RASPRED_EXPORT_USL__OPLATA_PD]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[U_CRP_RASPRED_EXPORT_USL__OPLATA_PD]
GO

CREATE PROCEDURE [dbo].[U_CRP_RASPRED_EXPORT_USL__OPLATA_PD]
--	----------------------------------------------------------------------------------------------------------------
--	Отчёт "Контроль распределения: экспорт услуг (Платежи на ПД)"
--	(дополнительная форма)
--	----------------------------------------------------------------------------------------------------------------
--	Выборка списка Платежей (экспорт услуг) по Договору (контракту) и распределения по Платежам на ПД и возвраты
--	
--	@USER_ID		- идентификатор Пользователя
--	@RESIDENT_ID 	- интендификатор Участника ВЭД (если = 0, то все Участники ВЭД)
--	@DOG_ID 		- интендификатор Договора (контракта) ( если = 0, то по всем Договорам (контрактам) )	
--	@D_END_BEG		- нижняя граница диапазона дат окончания исполнения обязательств по контракту	
--	@D_END_END		- верхняя граница диапазона дат окончания исполнения обязательств по контракту
--	@OST_NOTRASPRED - нераспределённый остаток по платежу (>) (0 - показать с ненулевым остатком, -1 - показать все)
--	----------------------------------------------------------------------------------------------------------------
--	(Модификация	в версии 2.1.0)
--	----------------------------------------------------------------------------------------------------------------
(
	@USER_ID		AS VARCHAR(30),
	@RESIDENT_ID	AS INTEGER,
	@DOG_ID			AS INTEGER,
	@D_END_BEG		AS DATETIME		=	NULL,
	@D_END_END		AS DATETIME		=	NULL,
	@OST_NOTRASPRED	AS INTEGER
)
AS
	SET NOCOUNT ON

	SELECT	@RESIDENT_ID	= 	ISNULL(@RESIDENT_ID, 0)
	SELECT	@DOG_ID 		= 	ISNULL(@DOG_ID , 0)
	SELECT	@OST_NOTRASPRED	= 	ISNULL(@OST_NOTRASPRED , 0)
	
	--	1.
	--	Выбираем Платежи Экспорт услуг, ссылка на ПС, распределение на ПД
	--
	SELECT	ISNULL(U_RESIDENTS.NAMER_S, U_RESIDENTS.NAMER)						AS NAMER,
			U_DOGOVOR.RESIDENT_ID, 
			U_DOGOVOR.DOG_ID, 
			U_DOGOVOR.N_KONTR,
			U_DOGOVOR.D_KONTR,
			U_IN_PART.NAMEP,
			--	Дата завершения исполнения обязательств по Договору 
			[dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID)	AS D_END_FOR_DOG_ID,
			U_PS.N_PS															AS N_PS,		
			U_OPLATA.OPL_ID, 	
			U_OPLATA.NPP, 
			U_OPLATA.D_REFER, 
			U_OPLATA.N_REFER, 
			U_OPLATA.KODOP, 
			U_OPLATA.TYPE, 
			U_OPLATA.VALP,
			U_OPLATA.SUMP,
			U_OPLATA.VALK, 
			U_OPLATA.SUMK, 
			(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID) 
			+ 
			(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND (R.OPL_ID = U_OPLATA.OPL_ID OR R.OPL_ID2 = U_OPLATA.OPL_ID)) 
			AS SUM_RASPR_ALL,
			U_OPLATA.SUMK - 
			(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID) 
			- 
			(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND (R.OPL_ID = U_OPLATA.OPL_ID OR R.OPL_ID2 = U_OPLATA.OPL_ID)) 
			AS	SUM_OST,
			'ПД : ' + CONVERT( VARCHAR(15), U_SPR_CONFIRM.SPR_ID ) + ' ( ' + + CONVERT( VARCHAR(15), U_SPR_CONFIRM.NPP ) + ' )'	
			AS	INFO_PRIM,
			U_SPR_CONFIRM.KODD					AS	INFO_KODD,
			U_SPR_CONFIRM.D_DOC 				AS	INFO_D_DOC,
			U_SPR_CONFIRM.N_GTD 				AS	INFO_N_DOC,
			U_SPR_CONFIRM.VALP					AS	INFO_VALP,
			U_SPR_CONFIRM.SUMP					AS	INFO_SUMP,
			U_SPR_CONFIRM.SUMK					AS	INFO_SUMK,
			U_RASPRED_OPLATA_SPR_CONFIRM.SUMK	AS	INFO_RASPRED_SUMK,
			U_RASPRED_OPLATA_SPR_CONFIRM.D_KOR	AS	INFO_RASPRED_DATE,
			CASE
				WHEN	U_SPR_CONFIRM.PS_ID	IS NOT NULL		AND
						U_OPLATA.PS_ID		<> U_SPR_CONFIRM.PS_ID
				THEN	'*'
				ELSE	NULL
			END									AS	PRIZ_DR_PS
	FROM	U_OPLATA (NOLOCK)
	INNER	JOIN	U_USERS_RESIDENTS (NOLOCK) ON 
			U_USERS_RESIDENTS.RESIDENT_ID	= U_OPLATA.RESIDENT_ID	AND
			U_USERS_RESIDENTS.USER_ID		= @USER_ID
	INNER	JOIN 	U_RESIDENTS (NOLOCK) ON
			U_RESIDENTS.RESIDENT_ID			= U_OPLATA.RESIDENT_ID	AND
			U_RESIDENTS.DEL_FLAG			IS NULL
	INNER	JOIN	U_PS (NOLOCK) ON
			U_PS.RESIDENT_ID				= U_OPLATA.RESIDENT_ID	AND
			U_PS.PS_ID						= U_OPLATA.PS_ID		AND
			U_PS.DEL_FLAG		IS NULL			
	INNER	JOIN	U_DOGOVOR (NOLOCK) ON
			U_DOGOVOR.RESIDENT_ID			= U_PS.RESIDENT_ID		AND
			U_DOGOVOR.DOG_ID				= U_PS.DOG_ID			AND
			U_DOGOVOR.DOG_NPP				= U_PS.DOG_NPP			AND
			U_DOGOVOR.DEL_FLAG				IS NULL		
	INNER	JOIN U_IN_PART (NOLOCK) ON	
			U_IN_PART.PARTNER_ID			= U_DOGOVOR.PARTNER_ID	AND
			U_IN_PART.DEL_FLAG				IS NULL		
	LEFT	OUTER JOIN	U_RASPRED_OPLATA_SPR_CONFIRM (NOLOCK) ON
			U_RASPRED_OPLATA_SPR_CONFIRM.RESIDENT_ID	= U_OPLATA.RESIDENT_ID	AND 
			U_RASPRED_OPLATA_SPR_CONFIRM.OPL_ID			= U_OPLATA.OPL_ID 		
	LEFT	OUTER JOIN	U_SPR_CONFIRM (NOLOCK) ON
			U_SPR_CONFIRM.RESIDENT_ID 		= U_RASPRED_OPLATA_SPR_CONFIRM.RESIDENT_ID	AND 
			U_SPR_CONFIRM.PD_ID 			= U_RASPRED_OPLATA_SPR_CONFIRM.PD_ID	
	WHERE 	U_OPLATA.DEL_FLAG			IS NULL				AND
			U_OPLATA.SUMK -
			(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID) 
			- 
			(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND (R.OPL_ID = U_OPLATA.OPL_ID OR R.OPL_ID2 = U_OPLATA.OPL_ID)) > @OST_NOTRASPRED AND
			-- Платежи Экспорт услуг
			( U_OPLATA.DIRECTION = '1'	AND
		        ( ( U_OPLATA.KODOP >= '20010'	AND U_OPLATA.KODOP <= '20070' ) 
			OR
		        ( U_OPLATA.KODOP = '35020'	AND U_OPLATA.TYPE = '3' ) )
			)												AND
			-- отбор по Участнику ВЭД
			(
				@RESIDENT_ID			= 0		OR
				U_OPLATA.RESIDENT_ID	= @RESIDENT_ID
			)												AND
			-- Платёжи по ПС
			U_OPLATA.PS_ID				IS NOT NULL			AND
			-- отбор по Договору (контракту)
			(
				@DOG_ID					= 0	OR
				U_DOGOVOR.DOG_ID		= @DOG_ID
			)												AND
			-- отбор по диапазону Даты завершения исполнения обязательств
			(	@D_END_BEG	IS NULL		OR
				ISNULL( [dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID), CONVERT(DATETIME, '30000606' ))	>= ISNULL(@D_END_BEG, CONVERT(DATETIME, '19000101'))
			)	AND
			(	@D_END_END	IS NULL		OR
				ISNULL( [dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID), CONVERT(DATETIME, '30000606' ))	<= ISNULL(@D_END_END, CONVERT(DATETIME, '30000606'))	
			)	

	UNION
	--	2.
	--	Выбираем Платежи Экспорт услуг, ссылка на Договор (контракт), распределение на ПД
	--
	SELECT	ISNULL(U_RESIDENTS.NAMER_S, U_RESIDENTS.NAMER)						AS NAMER,
			U_DOGOVOR.RESIDENT_ID, 
			U_DOGOVOR.DOG_ID, 
			U_DOGOVOR.N_KONTR,
			U_DOGOVOR.D_KONTR,
			U_IN_PART.NAMEP,
			--	Дата завершения исполнения обязательств по Договору 
			[dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID)	AS D_END_FOR_DOG_ID,
			NULL																AS N_PS,		
			U_OPLATA.OPL_ID, 	
			U_OPLATA.NPP, 
			U_OPLATA.D_REFER, 
			U_OPLATA.N_REFER, 
			U_OPLATA.KODOP, 
			U_OPLATA.TYPE, 
			U_OPLATA.VALP,
			U_OPLATA.SUMP,
			U_OPLATA.VALK, 
			U_OPLATA.SUMK, 
			(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID) 
			+ 
			(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND (R.OPL_ID = U_OPLATA.OPL_ID OR R.OPL_ID2 = U_OPLATA.OPL_ID)) 
			AS SUM_RASPR_ALL,
			U_OPLATA.SUMK - 
			(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID) 
			- 
			(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND (R.OPL_ID = U_OPLATA.OPL_ID OR R.OPL_ID2 = U_OPLATA.OPL_ID)) 
			AS	SUM_OST,
			'ПД : ' + CONVERT( VARCHAR(15), U_SPR_CONFIRM.SPR_ID ) + ' ( ' + + CONVERT( VARCHAR(15), U_SPR_CONFIRM.NPP ) + ' )'	
			AS	INFO_PRIM,
			U_SPR_CONFIRM.KODD					AS	INFO_KODD,
			U_SPR_CONFIRM.D_DOC 				AS	INFO_D_DOC,
			U_SPR_CONFIRM.N_GTD 				AS	INFO_N_DOC,
			U_SPR_CONFIRM.VALP					AS	INFO_VALP,
			U_SPR_CONFIRM.SUMP					AS	INFO_SUMP,
			U_SPR_CONFIRM.SUMK					AS	INFO_SUMK,
			U_RASPRED_OPLATA_SPR_CONFIRM.SUMK	AS	INFO_RASPRED_SUMK,
			U_RASPRED_OPLATA_SPR_CONFIRM.D_KOR	AS	INFO_RASPRED_DATE,
			NULL								AS	PRIZ_DR_PS
	FROM	U_OPLATA (NOLOCK)
	INNER	JOIN	U_USERS_RESIDENTS (NOLOCK) ON 
			U_USERS_RESIDENTS.RESIDENT_ID	= U_OPLATA.RESIDENT_ID	AND
			U_USERS_RESIDENTS.USER_ID		= @USER_ID
	INNER	JOIN 	U_RESIDENTS (NOLOCK) ON
			U_RESIDENTS.RESIDENT_ID			= U_OPLATA.RESIDENT_ID	AND
			U_RESIDENTS.DEL_FLAG			IS NULL
	INNER	JOIN	U_DOGOVOR (NOLOCK) ON
			U_DOGOVOR.RESIDENT_ID			= U_OPLATA.RESIDENT_ID	AND
			U_DOGOVOR.DOG_ID				= U_OPLATA.DOG_ID		AND
			U_DOGOVOR.DOG_NPP				= U_OPLATA.DOG_NPP		AND
			U_DOGOVOR.DEL_FLAG				IS NULL			
	INNER	JOIN U_IN_PART (NOLOCK) ON	
			U_IN_PART.PARTNER_ID			= U_DOGOVOR.PARTNER_ID	AND
			U_IN_PART.DEL_FLAG				IS NULL		
	LEFT	OUTER JOIN	U_RASPRED_OPLATA_SPR_CONFIRM (NOLOCK) ON
			U_RASPRED_OPLATA_SPR_CONFIRM.RESIDENT_ID	= U_OPLATA.RESIDENT_ID	AND 
			U_RASPRED_OPLATA_SPR_CONFIRM.OPL_ID			= U_OPLATA.OPL_ID 		
	LEFT	OUTER JOIN	U_SPR_CONFIRM (NOLOCK) ON
			U_SPR_CONFIRM.RESIDENT_ID 		= U_RASPRED_OPLATA_SPR_CONFIRM.RESIDENT_ID	AND 
			U_SPR_CONFIRM.PD_ID 			= U_RASPRED_OPLATA_SPR_CONFIRM.PD_ID	
	WHERE 	U_OPLATA.DEL_FLAG			IS NULL				AND
			U_OPLATA.SUMK -
			(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID) 
			- 
			(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND (R.OPL_ID = U_OPLATA.OPL_ID OR R.OPL_ID2 = U_OPLATA.OPL_ID)) > @OST_NOTRASPRED AND
			-- Платежи Экспорт услуг
			( U_OPLATA.DIRECTION = '1'	AND
		        ( ( U_OPLATA.KODOP >= '20010'	AND U_OPLATA.KODOP <= '20070' ) 
			OR
		        ( U_OPLATA.KODOP = '35020'	AND U_OPLATA.TYPE = '3' ) )
			)												AND
			-- отбор по Участнику ВЭД
			(
				@RESIDENT_ID			= 0		OR
				U_OPLATA.RESIDENT_ID	= @RESIDENT_ID
			)												AND
			-- Платёжи по Договору (контракту) (без ПС)
			U_OPLATA.PS_ID				IS NULL				AND
			U_OPLATA.DOG_ID				IS NOT NULL			AND
			-- отбор по Договору (контракту)
			(
				@DOG_ID					= 0	OR
				U_DOGOVOR.DOG_ID		= @DOG_ID
			)												AND
			-- отбор по диапазону Даты завершения исполнения обязательств
			(	@D_END_BEG	IS NULL		OR
				ISNULL( [dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID), CONVERT(DATETIME, '30000606' ))	>= ISNULL(@D_END_BEG, CONVERT(DATETIME, '19000101'))
			)	AND
			(	@D_END_END	IS NULL		OR
				ISNULL( [dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID), CONVERT(DATETIME, '30000606' ))	<= ISNULL(@D_END_END, CONVERT(DATETIME, '30000606'))	
			)	

	UNION
	--	3.
	--	Выбираем Платежи Экспорт услуг, ссылка на ПС, распределение на Возвраты
	--
	SELECT	ISNULL(U_RESIDENTS.NAMER_S, U_RESIDENTS.NAMER)						AS NAMER,
			U_DOGOVOR.RESIDENT_ID, 
			U_DOGOVOR.DOG_ID, 
			U_DOGOVOR.N_KONTR,
			U_DOGOVOR.D_KONTR,
			U_IN_PART.NAMEP,
			--	Дата завершения исполнения обязательств по Договору 
			[dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID)	AS D_END_FOR_DOG_ID,
			U_PS.N_PS															AS N_PS,		
			U_OPLATA.OPL_ID, 
			U_OPLATA.NPP, 
			U_OPLATA.D_REFER, 
			U_OPLATA.N_REFER, 
			U_OPLATA.KODOP, 
			U_OPLATA.TYPE, 
			U_OPLATA.VALP,
			U_OPLATA.SUMP,
			U_OPLATA.VALK, 
			U_OPLATA.SUMK, 
			(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID) 
			+ 
			(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND (R.OPL_ID = U_OPLATA.OPL_ID OR R.OPL_ID2 = U_OPLATA.OPL_ID)) 
			AS	SUM_RASPR_ALL,
			U_OPLATA.SUMK - 
			(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID) 
			- 
			(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND (R.OPL_ID = U_OPLATA.OPL_ID OR R.OPL_ID2 = U_OPLATA.OPL_ID)) 
			AS	SUM_OST,
			'Воз: '	+ 	CONVERT( VARCHAR(15), U_OPLATA2.NPP)
			AS	INFO_PRIM,
			U_OPLATA2.KODOP					AS	INFO_KODD,
			U_OPLATA2.D_REFER 				AS	INFO_D_DOC,
			U_OPLATA2.N_REFER 				AS	INFO_N_DOC,
			U_OPLATA2.VALP					AS	INFO_VALP,
			U_OPLATA2.SUMP					AS	INFO_SUMP,
			U_OPLATA2.SUMK					AS	INFO_SUMK,
			U_RASPRED_OPLATA_OPLATA.SUMK	AS	INFO_RASPRED_SUMK,
			U_RASPRED_OPLATA_OPLATA.D_KOR	AS	INFO_RASPRED_DATE,
			CASE
				WHEN	U_OPLATA2.PS_ID		IS NOT NULL		AND
						U_OPLATA.PS_ID		<> U_OPLATA2.PS_ID
				THEN	'*'
				ELSE	NULL
			END								AS	PRIZ_DR_PS
	FROM	U_OPLATA (NOLOCK)
	INNER	JOIN	U_USERS_RESIDENTS (NOLOCK) ON 
			U_USERS_RESIDENTS.RESIDENT_ID	= U_OPLATA.RESIDENT_ID		AND
			U_USERS_RESIDENTS.USER_ID		= @USER_ID
	INNER	JOIN	U_RESIDENTS (NOLOCK) ON
			U_RESIDENTS.RESIDENT_ID			= U_OPLATA.RESIDENT_ID		AND
			U_RESIDENTS.DEL_FLAG			IS NULL
	INNER	JOIN	U_PS (NOLOCK) ON
			U_PS.RESIDENT_ID				= U_OPLATA.RESIDENT_ID		AND
			U_PS.PS_ID						= U_OPLATA.PS_ID			AND
			U_PS.DEL_FLAG					IS NULL					
	INNER	JOIN	U_DOGOVOR (NOLOCK) ON
			U_DOGOVOR.RESIDENT_ID			= U_PS.RESIDENT_ID			AND
			U_DOGOVOR.DOG_ID				= U_PS.DOG_ID				AND
			U_DOGOVOR.DOG_NPP				= U_PS.DOG_NPP				AND
			U_DOGOVOR.DEL_FLAG				IS NULL		
	INNER	JOIN U_IN_PART (NOLOCK) ON	
			U_IN_PART.PARTNER_ID			= U_DOGOVOR.PARTNER_ID		AND
			U_IN_PART.DEL_FLAG				IS NULL		
	LEFT	OUTER JOIN	U_RASPRED_OPLATA_OPLATA (NOLOCK)	ON
			U_RASPRED_OPLATA_OPLATA.RESIDENT_ID = U_OPLATA.RESIDENT_ID	AND 
			U_RASPRED_OPLATA_OPLATA.OPL_ID2 	= U_OPLATA.OPL_ID		
	LEFT	OUTER JOIN	U_OPLATA AS U_OPLATA2 (NOLOCK)	ON
			U_OPLATA2.RESIDENT_ID 			= U_RASPRED_OPLATA_OPLATA.RESIDENT_ID	AND 
			U_OPLATA2.OPL_ID 				= U_RASPRED_OPLATA_OPLATA.OPL_ID
	WHERE 	U_OPLATA.DEL_FLAG			IS NULL			AND
			U_OPLATA.SUMK -
			(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID) 
			- 
			(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND (R.OPL_ID = U_OPLATA.OPL_ID OR R.OPL_ID2 = U_OPLATA.OPL_ID)) > @OST_NOTRASPRED AND
			-- Платежи Экспорт услуг
			( U_OPLATA.DIRECTION = '1'	AND
		        ( ( U_OPLATA.KODOP >= '20010'	AND U_OPLATA.KODOP <= '20070' ) 
			OR
		        ( U_OPLATA.KODOP = '35020'	AND U_OPLATA.TYPE = '3' ) )
			)											AND
			-- отбор по Участнику ВЭД
			(
				@RESIDENT_ID			= 0	OR
				U_OPLATA.RESIDENT_ID	= @RESIDENT_ID
			)											AND
			-- Платёжи по ПС
			U_OPLATA.PS_ID				IS NOT NULL		AND
			-- отбор по Договору (контракту)	
			(
				@DOG_ID					= 0	OR
				U_DOGOVOR.DOG_ID		= @DOG_ID
			)											AND
			-- отбор по диапазону Даты завершения исполнения обязательств
			(	@D_END_BEG	IS NULL		OR
				ISNULL( [dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID), CONVERT(DATETIME, '30000606' ))	>= ISNULL(@D_END_BEG, CONVERT(DATETIME, '19000101'))
			)	AND
			(	@D_END_END	IS NULL		OR
				ISNULL( [dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID), CONVERT(DATETIME, '30000606' ))	<= ISNULL(@D_END_END, CONVERT(DATETIME, '30000606'))	
			)	

	UNION
	--	4.
	--	Выбираем Платежи Экспорт услуг, ссылка на Договор (контракт), распределение на Возвраты
	--
	SELECT	ISNULL(U_RESIDENTS.NAMER_S, U_RESIDENTS.NAMER)						AS NAMER,
			U_DOGOVOR.RESIDENT_ID, 
			U_DOGOVOR.DOG_ID, 
			U_DOGOVOR.N_KONTR,
			U_DOGOVOR.D_KONTR,
			U_IN_PART.NAMEP,
			--	Дата завершения исполнения обязательств по Договору 
			[dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID)	AS D_END_FOR_DOG_ID,
			NULL																AS N_PS,		
			U_OPLATA.OPL_ID, 
			U_OPLATA.NPP, 
			U_OPLATA.D_REFER, 
			U_OPLATA.N_REFER, 
			U_OPLATA.KODOP, 
			U_OPLATA.TYPE, 
			U_OPLATA.VALP,
			U_OPLATA.SUMP,
			U_OPLATA.VALK, 
			U_OPLATA.SUMK, 
			(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID) 
			+ 
			(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND (R.OPL_ID = U_OPLATA.OPL_ID OR R.OPL_ID2 = U_OPLATA.OPL_ID)) 
			AS	SUM_RASPR_ALL,
			U_OPLATA.SUMK - 
			(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID) 
			- 
			(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND (R.OPL_ID = U_OPLATA.OPL_ID OR R.OPL_ID2 = U_OPLATA.OPL_ID)) 
			AS	SUM_OST,
			'Воз: '	+ 	CONVERT( VARCHAR(15), U_OPLATA2.NPP)
			AS	INFO_PRIM,
			U_OPLATA2.KODOP					AS	INFO_KODD,
			U_OPLATA2.D_REFER 				AS	INFO_D_DOC,
			U_OPLATA2.N_REFER 				AS	INFO_N_DOC,
			U_OPLATA2.VALP					AS	INFO_VALP,
			U_OPLATA2.SUMP					AS	INFO_SUMP,
			U_OPLATA2.SUMK					AS	INFO_SUMK,
			U_RASPRED_OPLATA_OPLATA.SUMK	AS	INFO_RASPRED_SUMK,
			U_RASPRED_OPLATA_OPLATA.D_KOR	AS	INFO_RASPRED_DATE,
			NULL							AS	PRIZ_DR_PS
	FROM	U_OPLATA (NOLOCK)
	INNER	JOIN	U_USERS_RESIDENTS (NOLOCK) ON 
			U_USERS_RESIDENTS.RESIDENT_ID	= U_OPLATA.RESIDENT_ID		AND
			U_USERS_RESIDENTS.USER_ID		= @USER_ID
	INNER	JOIN	U_RESIDENTS (NOLOCK) ON
			U_RESIDENTS.RESIDENT_ID			= U_OPLATA.RESIDENT_ID		AND
			U_RESIDENTS.DEL_FLAG			IS NULL
	INNER	JOIN	U_DOGOVOR (NOLOCK) ON
			U_DOGOVOR.RESIDENT_ID			= U_OPLATA.RESIDENT_ID	AND
			U_DOGOVOR.DOG_ID				= U_OPLATA.DOG_ID		AND
			U_DOGOVOR.DOG_NPP				= U_OPLATA.DOG_NPP		AND
			U_DOGOVOR.DEL_FLAG				IS NULL		
	INNER	JOIN U_IN_PART (NOLOCK) ON	
			U_IN_PART.PARTNER_ID			= U_DOGOVOR.PARTNER_ID		AND
			U_IN_PART.DEL_FLAG				IS NULL		
	LEFT	OUTER JOIN	U_RASPRED_OPLATA_OPLATA (NOLOCK)	ON
			U_RASPRED_OPLATA_OPLATA.RESIDENT_ID = U_OPLATA.RESIDENT_ID	AND 
			U_RASPRED_OPLATA_OPLATA.OPL_ID2 	= U_OPLATA.OPL_ID		
	LEFT	OUTER JOIN	U_OPLATA AS U_OPLATA2 (NOLOCK)	ON
			U_OPLATA2.RESIDENT_ID 			= U_RASPRED_OPLATA_OPLATA.RESIDENT_ID	AND 
			U_OPLATA2.OPL_ID 				= U_RASPRED_OPLATA_OPLATA.OPL_ID
	WHERE 	U_OPLATA.DEL_FLAG			IS NULL			AND
			U_OPLATA.SUMK -
			(SELECT ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_SPR_CONFIRM AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND R.OPL_ID = U_OPLATA.OPL_ID) 
			- 
			(SELECT	ISNULL(SUM(SUMK), 0) FROM U_RASPRED_OPLATA_OPLATA AS R (NOLOCK) WHERE R.RESIDENT_ID = U_OPLATA.RESIDENT_ID AND (R.OPL_ID = U_OPLATA.OPL_ID OR R.OPL_ID2 = U_OPLATA.OPL_ID)) > @OST_NOTRASPRED AND
			-- Платежи Экспорт услуг
			( U_OPLATA.DIRECTION = '1'	AND
		        ( ( U_OPLATA.KODOP >= '20010'	AND U_OPLATA.KODOP <= '20070' ) 
			OR
		        ( U_OPLATA.KODOP = '35020'	AND U_OPLATA.TYPE = '3' ) )
			)											AND
			-- отбор по Участнику ВЭД
			(
				@RESIDENT_ID			= 0	OR
				U_OPLATA.RESIDENT_ID	= @RESIDENT_ID
			)											AND
			-- Платёжи по Договору (контракту) (без ПС)
			U_OPLATA.PS_ID				IS NULL			AND
			U_OPLATA.DOG_ID				IS NOT NULL		AND
			-- отбор по Договору (контракту)	
			(
				@DOG_ID					= 0	OR
				U_DOGOVOR.DOG_ID		= @DOG_ID
			)											AND
			-- отбор по диапазону Даты завершения исполнения обязательств
			(	@D_END_BEG	IS NULL		OR
				ISNULL( [dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID), CONVERT(DATETIME, '30000606' ))	>= ISNULL(@D_END_BEG, CONVERT(DATETIME, '19000101'))
			)	AND
			(	@D_END_END	IS NULL		OR
				ISNULL( [dbo].U_D_END_FOR_DOGOVOR(U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.DOG_ID), CONVERT(DATETIME, '30000606' ))	<= ISNULL(@D_END_END, CONVERT(DATETIME, '30000606'))	
			)	
	ORDER	BY NAMER, U_DOGOVOR.RESIDENT_ID, U_DOGOVOR.D_KONTR, U_DOGOVOR.N_KONTR, U_DOGOVOR.DOG_ID, U_OPLATA.D_REFER
GO

GRANT  EXECUTE  ON [dbo].[U_CRP_RASPRED_EXPORT_USL__OPLATA_PD]  TO [OPERS], [AUDITS]
GO

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

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

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

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

--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
--	************************************************************
--	************************************************************
--	(7*) Модификация существующих представлений (VIEWS)
--	************************************************************
--	************************************************************
--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[ГРАФИК ВОЗВРАТОВ]') and OBJECTPROPERTY(id, N'IsView') = 1)
drop view [dbo].[ГРАФИК ВОЗВРАТОВ]
GO

CREATE VIEW [dbo].[ГРАФИК ВОЗВРАТОВ]
--	-------------------------------------------------------------------------------------------------------------------
--	Чтение информации графика возврата платежей для ПС
--	-------------------------------------------------------------------------------------------------------------------
--	(Модификация	в версии 2.1.0)
--	-------------------------------------------------------------------------------------------------------------------
AS
	SELECT	
			U_GRAF_VOZVR.GRAF_ID		AS	[Номер п/п],
			U_GRAF_VOZVR.D_VOZV        	AS 	[Дата осуществления возврата заёмных средств],
			U_GRAF_VOZVR.VALK      		AS	[Код валюты цены кредитного договора],
			VALW.NAMEV 		        	AS	[Наименование валюты цены кредитного договора],
			U_GRAF_VOZVR.SUM_VOZV   	AS	[Сумма платежа в валюте цены кредитного договора],
			U_GRAF_VOZVR.D_PROC 	    AS	[Дата осуществления процентных платежей],
			U_GRAF_VOZVR.SUM_PROC		AS 	[Сумма процентных платежей в валюте цены кредитного договора],
			U_PS.F2_R64_USL 			AS	[Особые условия для графика возвратов],
			U_PS.N_PS   				AS	[Номер ПС],
			U_PS.D_PS					AS	[Дата подписания ПС],
			U_DOGOVOR.VID_KONTR			AS	[Код вида кредитного договора],
			U_DOGOVOR.N_KONTR			AS 	[Номер кредитного договора],
			U_DOGOVOR.D_KONTR			AS	[Дата подписания кредитного договора],
			U_DOGOVOR.N_DOPSOGL			AS 	[Номер дополнительного соглашения к кредитному договору],
			U_DOGOVOR.D_DOPSOGL			AS	[Дата дополнительного соглашения к кредитному договору],
			U_DOGOVOR.SUMK 				AS 	[Сумма кредитного договора],
			U_PS.D_PS_MOD				AS	[Дата последнего переоформления ПС],
			U_PS.N_PS_MOD				AS	[Номер переоформления ПС],
			U_PS.D_CLOSE				AS	[Дата закрытия ПС],
			U_PS.PRIM					AS	[Особые отметки Банка],
			U_UPOLNOMR.FIO				AS	[Уполномоченное лицо Участника ВЭД, наделённое правом первой подписи],
			U_PS.D_UPOLNOMR1			AS	[Дата подписи уполномоченного лица Участника ВЭД, наделённого правом первой подписи],
			U_UPOLNOMR1.FIO				AS	[Уполномоченное лицо Участника ВЭД, наделённое правом второй подписи],
			U_PS.D_UPOLNOMR2			AS	[Дата подписи уполномоченного лица Участника ВЭД, наделённого правом второй подписи],
			U_UPOLNOMB.FIO				AS	[Уполномоченное лицо Банка с правом подписи],
			U_PS.D_UPOLNOMB				AS	[Дата подписи уполномоченного лица Банка],		
			U_IN_PART.NAMEP 			AS	[Наименование Иностранного Контрагента],
			U_IN_PART.KODS 				AS	[Код страны Иностранного Контрагента],
			OKSMT.NAMES 				AS	[Наименование страны Иностранного Контрагента],
			U_IN_PART.INN				AS	[ИНН Иностранного Контрагента],
			U_IN_PART.ADRES				AS	[Адрес Иностранного Контрагента],
			U_IN_PART.TYPE				AS	[Признак физического лица Иностранного Контрагента],
			U_RESIDENTS.NAMER			AS 	[Наименование Участника ВЭД],
			U_RESIDENTS.INN 			AS	[ИНН Участника ВЭД],
			U_RESIDENTS.KPP 			AS	[КПП Участника ВЭД],
			U_RESIDENTS.OGRN 			AS	[Основной государственный регистрационный номер Участника ВЭД],
			U_RESIDENTS.DGR 			AS	[Дата внесения записи в государственный реестр Участника ВЭД],
			U_USERS_RESIDENTS.USER_ID	AS	[Пользователь],
			U_BANKS.REGNB  				AS	[Регистрационный и порядковый номер Банка],
			U_BANKS.NAMEB 				AS	[Полное наименование Банка],
			U_BANKS.ADRES 				AS	[Юридический адрес Банка],
			U_GRAF_VOZVR.D_LOAD 		AS	[Дата загрузки/приёма из XML-файла],
			U_GRAF_VOZVR.SRC_LOAD 		AS	[Источник XML-файла]
 	FROM	U_GRAF_VOZVR (NOLOCK)  
	INNER	JOIN U_USERS_RESIDENTS (NOLOCK) ON 
			U_GRAF_VOZVR.RESIDENT_ID	= U_USERS_RESIDENTS.RESIDENT_ID	
	INNER	JOIN U_RESIDENTS (NOLOCK)	ON
			U_GRAF_VOZVR.RESIDENT_ID	= U_RESIDENTS.RESIDENT_ID	AND
			U_RESIDENTS.DEL_FLAG		IS NULL
	INNER	JOIN U_PS (NOLOCK)		ON
			U_GRAF_VOZVR.RESIDENT_ID	= U_PS.RESIDENT_ID	AND
			U_GRAF_VOZVR.PS_ID			= U_PS.PS_ID		AND
			U_PS.DEL_FLAG				IS NULL
	INNER	JOIN U_DOGOVOR (NOLOCK)		ON
			U_DOGOVOR.RESIDENT_ID		= U_PS.RESIDENT_ID	AND
			U_DOGOVOR.DOG_ID			= U_PS.DOG_ID		AND
			U_DOGOVOR.DOG_NPP			= U_PS.DOG_NPP		AND
			U_DOGOVOR.DEL_FLAG			IS NULL
	INNER	JOIN U_BANKS (NOLOCK)		ON
			U_PS.BANK_ID 				= U_BANKS.BANK_ID	AND
			U_BANKS.DEL_FLAG			IS NULL	
	INNER	JOIN VALW (NOLOCK)		ON
			U_GRAF_VOZVR.VALK 			= VALW.KOD	
	LEFT	OUTER JOIN U_UPOLNOMR (NOLOCK)	ON
			U_PS.RESIDENT_ID			= U_UPOLNOMR.RESIDENT_ID	AND	
			U_PS.UPOLNOMR_ID1			= U_UPOLNOMR.UPOLNOMR_ID	AND
			U_UPOLNOMR.DEL_FLAG			IS NULL
	LEFT	OUTER JOIN U_UPOLNOMR AS U_UPOLNOMR1 (NOLOCK) ON
			U_PS.RESIDENT_ID			= U_UPOLNOMR1.RESIDENT_ID	AND
			U_PS.UPOLNOMR_ID2			= U_UPOLNOMR1.UPOLNOMR_ID	AND
			U_UPOLNOMR1.DEL_FLAG		IS NULL
	LEFT	OUTER JOIN U_UPOLNOMB (NOLOCK)	ON
			U_PS.BANK_ID				= U_UPOLNOMB.BANK_ID		AND
			U_PS.UPOLNOMB_ID			= U_UPOLNOMB.UPOLNOMB_ID	AND
			U_UPOLNOMB.DEL_FLAG			IS NULL
	INNER	JOIN U_IN_PART (NOLOCK)		ON
			U_IN_PART.PARTNER_ID		= U_DOGOVOR.PARTNER_ID		AND
			U_IN_PART.DEL_FLAG			IS NULL
	INNER	JOIN OKSMT (NOLOCK)		ON
			U_IN_PART.KODS				= OKSMT.KOD 
	WHERE	U_GRAF_VOZVR.DEL_FLAG		IS NULL	
GO

GRANT  SELECT  ON [dbo].[ГРАФИК ВОЗВРАТОВ]  TO [OPERS], [AUDITS]
GO

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

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

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

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

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