РассчитатьРассмотреноПоПредметам (БСП)

Автор: 1С
ОбщийМодуль.Взаимодействия
БСП

Рассчитать рассмотрено по предметам. Рассчитывает состояния предметов взаимодействий.

// Рассчитывает состояния предметов взаимодействий.
//
// Параметры:
//  ТаблицаПредметов  - ТаблицаЗначений, Неопределено - таблица предметов, которые необходимо рассчитать.
//             Если Неопределено, то рассчитываются состояния всех предметов.
//
Процедура РассчитатьРассмотреноПоПредметам(ДанныеДляРасчета) Экспорт

	УстановитьПривилегированныйРежим(Истина);
	Запрос = Новый Запрос;
	
	Если ДанныеДляРасчета = Неопределено Тогда
		
		РегистрыСведений.СостоянияПредметовВзаимодействий.УдалитьЗаписьИзРегистра(Неопределено);
		
		Запрос.Текст = "
		|ВЫБРАТЬ
		|	ПредметыПапкиВзаимодействий.Предмет,
		|	СУММА(ВЫБОР
		|			КОГДА ПредметыПапкиВзаимодействий.Рассмотрено
		|				ТОГДА 0
		|			ИНАЧЕ 1
		|		КОНЕЦ) КАК КоличествоНеРассмотрено,
		|	МАКСИМУМ(Взаимодействия.Дата) КАК ДатаПоследнегоВзаимодействия,
		|	МАКСИМУМ(ЕСТЬNULL(СостоянияПредметовВзаимодействий.Активен, ЛОЖЬ)) КАК Активен
		|ИЗ
		|	РегистрСведений.ПредметыПапкиВзаимодействий КАК ПредметыПапкиВзаимодействий
		|		ЛЕВОЕ СОЕДИНЕНИЕ ЖурналДокументов.Взаимодействия КАК Взаимодействия
		|		ПО ПредметыПапкиВзаимодействий.Взаимодействие = Взаимодействия.Ссылка
		|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СостоянияПредметовВзаимодействий КАК СостоянияПредметовВзаимодействий
		|		ПО ПредметыПапкиВзаимодействий.Предмет = СостоянияПредметовВзаимодействий.Предмет
		|
		|СГРУППИРОВАТЬ ПО
		|	ПредметыПапкиВзаимодействий.Предмет";
		
	Иначе
		
		Если ДанныеДляРасчета.Количество() = 0 Тогда
			Возврат;
		КонецЕсли;
		
		Если ТипЗнч(ДанныеДляРасчета) = Тип("ТаблицаЗначений") Тогда
			
			ТекстПредметыДляРасчета = "
			|ВЫБРАТЬ
			|	ПредметыДляРасчета.ПоЧемуРассчитывать КАК Предмет
			|ПОМЕСТИТЬ ПредметыДляРасчета
			|ИЗ
			|	&ПредметыДляРасчета КАК ПредметыДляРасчета
			|
			|ИНДЕКСИРОВАТЬ ПО
			|	Предмет
			|;
			|
			|////////////////////////////////////////////////////////////////////////////////";
			
			Запрос.УстановитьПараметр("ПредметыДляРасчета", ДанныеДляРасчета);
			
		ИначеЕсли ТипЗнч(ДанныеДляРасчета) = Тип("Массив") Тогда
			
			ТекстПредметыДляРасчета = "
			|ВЫБРАТЬ РАЗЛИЧНЫЕ
			|	ПредметыПапкиВзаимодействий.Предмет КАК Предмет
			|ПОМЕСТИТЬ ПредметыДляРасчета
			|ИЗ
			|	РегистрСведений.ПредметыПапкиВзаимодействий КАК ПредметыПапкиВзаимодействий
			|ГДЕ
			|	ПредметыПапкиВзаимодействий.Взаимодействие В(&МассивВзаимодействий)
			|
			|ИНДЕКСИРОВАТЬ ПО
			|	Предмет
			|;
			|
			|////////////////////////////////////////////////////////////////////////////////";
			
			Запрос.УстановитьПараметр("МассивВзаимодействий", ДанныеДляРасчета);
			
		Иначе
			
			Возврат;
			
		КонецЕсли;
		
		Запрос.Текст = ТекстПредметыДляРасчета + "
		|ВЫБРАТЬ
		|	ПредметыПапкиВзаимодействий.Предмет КАК Предмет,
		|	СУММА(ВЫБОР
		|			КОГДА ПредметыПапкиВзаимодействий.Рассмотрено
		|				ТОГДА 0
		|			ИНАЧЕ 1
		|		КОНЕЦ) КАК КоличествоНеРассмотрено,
		|	МАКСИМУМ(Взаимодействия.Дата) КАК ДатаПоследнегоВзаимодействия,
		|	МАКСИМУМ(ЕСТЬNULL(СостоянияПредметовВзаимодействий.Активен, ЛОЖЬ)) КАК Активен
		|ПОМЕСТИТЬ РассчитанныеПредметы
		|ИЗ
		|	РегистрСведений.ПредметыПапкиВзаимодействий КАК ПредметыПапкиВзаимодействий
		|		ЛЕВОЕ СОЕДИНЕНИЕ ЖурналДокументов.Взаимодействия КАК Взаимодействия
		|		ПО ПредметыПапкиВзаимодействий.Взаимодействие = Взаимодействия.Ссылка
		|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СостоянияПредметовВзаимодействий КАК СостоянияПредметовВзаимодействий
		|		ПО ПредметыПапкиВзаимодействий.Предмет = СостоянияПредметовВзаимодействий.Предмет
		|ГДЕ
		|	ПредметыПапкиВзаимодействий.Предмет В
		|			(ВЫБРАТЬ
		|				ПредметыДляРасчета.Предмет
		|			ИЗ
		|				ПредметыДляРасчета)
		|
		|СГРУППИРОВАТЬ ПО
		|	ПредметыПапкиВзаимодействий.Предмет
		|
		|ИНДЕКСИРОВАТЬ ПО
		|	Предмет
		|;
		|
		|////////////////////////////////////////////////////////////////////////////////
		|ВЫБРАТЬ
		|	ПредметыДляРасчета.Предмет,
		|	ЕСТЬNULL(РассчитанныеПредметы.КоличествоНеРассмотрено, 0) КАК КоличествоНеРассмотрено,
		|	ЕСТЬNULL(РассчитанныеПредметы.ДатаПоследнегоВзаимодействия, ДАТАВРЕМЯ(1, 1, 1)) КАК ДатаПоследнегоВзаимодействия,
		|	ВЫБОР
		|		КОГДА РассчитанныеПредметы.Активен ЕСТЬ NULL 
		|			ТОГДА ЕСТЬNULL(СостоянияПредметовВзаимодействий.Активен, ЛОЖЬ)
		|		ИНАЧЕ РассчитанныеПредметы.Активен
		|	КОНЕЦ КАК Активен
		|ИЗ
		|	ПредметыДляРасчета КАК ПредметыДляРасчета
		|		ЛЕВОЕ СОЕДИНЕНИЕ РассчитанныеПредметы КАК РассчитанныеПредметы
		|		ПО ПредметыДляРасчета.Предмет = РассчитанныеПредметы.Предмет
		|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СостоянияПредметовВзаимодействий КАК СостоянияПредметовВзаимодействий
		|		ПО ПредметыДляРасчета.Предмет = СостоянияПредметовВзаимодействий.Предмет";
		
		
	КонецЕсли;
	
	Выборка = Запрос.Выполнить().Выбрать();

	Пока Выборка.Следующий() Цикл
		
		Если Выборка.ДатаПоследнегоВзаимодействия <> Дата(1,1,1) ИЛИ Выборка.Активен = Истина  Тогда
			РегистрыСведений.СостоянияПредметовВзаимодействий.ВыполнитьЗаписьВРегистр(Выборка.Предмет, 
			                                                                          Выборка.КоличествоНеРассмотрено,
			                                                                          Выборка.ДатаПоследнегоВзаимодействия,
			                                                                          Выборка.Активен);
		Иначе
			
			РегистрыСведений.СостоянияПредметовВзаимодействий.УдалитьЗаписьИзРегистра(Выборка.Предмет);
			
		КонецЕсли;
	
	КонецЦикла;

КонецПроцедуры

///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются 
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////

Рекомендации

Похожие публикации

РассчитатьРассмотреноПоПапкам (БСП)

РассчитатьРассмотреноПоКонтактам (БСП)

НапомнитьДоВремениПредмета (БСП)

РассчитыватьРассмотрено (БСП)

ПодключитьНапоминаниеДоВремениПредмета (БСП)

ТаблицаДанныхДляРасчетаРассмотрено (БСП)

ПредметыВзаимодействий (БСП)

РассчитанныеДатыЗапретаИзменения (БСП)

УстановитьПризнакРассмотрено (БСП)

Обновлятор-1С: групповое (пакетное) обновление и обслуживание всех баз за один раз