Рассчитать рассмотрено по предметам. Рассчитывает состояния предметов взаимодействий.
// Рассчитывает состояния предметов взаимодействий.
//
// Параметры:
// ТаблицаПредметов - ТаблицаЗначений, Неопределено - таблица предметов, которые необходимо рассчитать.
// Если Неопределено, то рассчитываются состояния всех предметов.
//
Процедура РассчитатьРассмотреноПоПредметам(ДанныеДляРасчета) Экспорт
УстановитьПривилегированныйРежим(Истина);
Запрос = Новый Запрос;
Если ДанныеДляРасчета = Неопределено Тогда
РегистрыСведений.СостоянияПредметовВзаимодействий.УдалитьЗаписьИзРегистра(Неопределено);
Запрос.Текст = "
|ВЫБРАТЬ
| ПредметыПапкиВзаимодействий.Предмет,
| СУММА(ВЫБОР
| КОГДА ПредметыПапкиВзаимодействий.Рассмотрено
| ТОГДА 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
///////////////////////////////////////////////////////////////////////////////////////////////////////
РассчитатьРассмотреноПоПапкам (БСП)
РассчитатьРассмотреноПоКонтактам (БСП)
НапомнитьДоВремениПредмета (БСП)
ПодключитьНапоминаниеДоВремениПредмета (БСП)
ТаблицаДанныхДляРасчетаРассмотрено (БСП)