Рассчитать рассмотрено по контактам. Рассчитывает состояния контактов взаимодействий.
// Рассчитывает состояния контактов взаимодействий.
//
// Параметры:
// ТаблицаПредметов - ТаблицаЗначений, Неопределено - таблица контактов, которые необходимо рассчитать.
// Если Неопределено, то рассчитываются состояния всех контактов.
//
Процедура РассчитатьРассмотреноПоКонтактам(ДанныеДляРасчета) Экспорт
УстановитьПривилегированныйРежим(Истина);
Если ДанныеДляРасчета = Неопределено Тогда
РегистрыСведений.СостоянияКонтактовВзаимодействий.УдалитьЗаписьИзРегистра(Неопределено);
Пока Истина Цикл
Запрос = Новый Запрос;
Запрос.Текст = "
|ВЫБРАТЬ РАЗЛИЧНЫЕ ПЕРВЫЕ 100
| КонтактыВзаимодействий.Контакт
|ПОМЕСТИТЬ КонтактыДляРасчета
|ИЗ
| РегистрСведений.КонтактыВзаимодействий КАК КонтактыВзаимодействий
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СостоянияКонтактовВзаимодействий КАК СостоянияКонтактовВзаимодействий
| ПО КонтактыВзаимодействий.Контакт = СостоянияКонтактовВзаимодействий.Контакт
|ГДЕ
| СостоянияКонтактовВзаимодействий.Контакт ЕСТЬ NULL
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| КонтактыВзаимодействий.Контакт,
| МАКСИМУМ(Взаимодействия.Дата) КАК ДатаПоследнегоВзаимодействия,
| СУММА(ВЫБОР
| КОГДА ПредметыПапкиВзаимодействий.Рассмотрено
| ТОГДА 0
| ИНАЧЕ 1
| КОНЕЦ) КАК КоличествоНеРассмотрено
|ИЗ
| КонтактыДляРасчета КАК КонтактыДляРасчета
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КонтактыВзаимодействий КАК КонтактыВзаимодействий
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ЖурналДокументов.Взаимодействия КАК Взаимодействия
| ПО КонтактыВзаимодействий.Взаимодействие = Взаимодействия.Ссылка
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ПредметыПапкиВзаимодействий КАК ПредметыПапкиВзаимодействий
| ПО КонтактыВзаимодействий.Взаимодействие = ПредметыПапкиВзаимодействий.Взаимодействие
| ПО КонтактыДляРасчета.Контакт = КонтактыВзаимодействий.Контакт
|
|СГРУППИРОВАТЬ ПО
| КонтактыВзаимодействий.Контакт";
Результат = Запрос.Выполнить();
Если Результат.Пустой() Тогда
Возврат;
КонецЕсли;
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
РегистрыСведений.СостоянияКонтактовВзаимодействий.ВыполнитьЗаписьВРегистр(Выборка.Контакт,
Выборка.КоличествоНеРассмотрено,
Выборка.ДатаПоследнегоВзаимодействия);
КонецЦикла;
КонецЦикла;
Иначе
Запрос = Новый Запрос;
Если ТипЗнч(ДанныеДляРасчета) = Тип("ТаблицаЗначений") Тогда
ТекстКонтактыДляРасчета =
"ВЫБРАТЬ
| КонтактыДляРасчета.ПоЧемуРассчитывать КАК Контакт
|ПОМЕСТИТЬ КонтактыДляРасчета
|ИЗ
| &КонтактыДляРасчета КАК КонтактыДляРасчета
|
|ИНДЕКСИРОВАТЬ ПО
| Контакт
|;
|
|////////////////////////////////////////////////////////////////////////////////";
Запрос.УстановитьПараметр("КонтактыДляРасчета", ДанныеДляРасчета);
ИначеЕсли ТипЗнч(ДанныеДляРасчета) = Тип("ВыборкаИзРезультатаЗапроса") Тогда
МассивВзаимодействий = Новый Массив;
Пока ДанныеДляРасчета.Следующий() Цикл
МассивВзаимодействий.Добавить(ДанныеДляРасчета.Взаимодействие);
КонецЦикла;
ТекстКонтактыДляРасчета =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| КонтактыВзаимодействий.Контакт
|ПОМЕСТИТЬ КонтактыДляРасчета
|ИЗ
| РегистрСведений.КонтактыВзаимодействий КАК КонтактыВзаимодействий
|ГДЕ
| КонтактыВзаимодействий.Взаимодействие В(&МассивВзаимодействий)
|
|ИНДЕКСИРОВАТЬ ПО
| Контакт
|;
|
|////////////////////////////////////////////////////////////////////////////////";
Запрос.УстановитьПараметр("МассивВзаимодействий", МассивВзаимодействий);
ИначеЕсли ТипЗнч(ДанныеДляРасчета) = Тип("Массив") Тогда
ТекстКонтактыДляРасчета =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| КонтактыВзаимодействий.Контакт
|ПОМЕСТИТЬ КонтактыДляРасчета
|ИЗ
| РегистрСведений.КонтактыВзаимодействий КАК КонтактыВзаимодействий
|ГДЕ
| КонтактыВзаимодействий.Взаимодействие В(&МассивВзаимодействий)
|
|ИНДЕКСИРОВАТЬ ПО
| Контакт
|;
|
|////////////////////////////////////////////////////////////////////////////////";
Запрос.УстановитьПараметр("МассивВзаимодействий", ДанныеДляРасчета);
Иначе
Возврат;
КонецЕсли;
Запрос.Текст = ТекстКонтактыДляРасчета + "
|ВЫБРАТЬ
| ВложенныйЗапрос.Контакт,
| МАКСИМУМ(ВложенныйЗапрос.ДатаПоследнегоВзаимодействия) КАК ДатаПоследнегоВзаимодействия,
| СУММА(ВложенныйЗапрос.КоличествоНеРассмотрено) КАК КоличествоНеРассмотрено
|ИЗ
| (ВЫБРАТЬ РАЗЛИЧНЫЕ
| КонтактыВзаимодействий.Контакт КАК Контакт,
| Взаимодействия.Ссылка КАК Ссылка,
| ЕСТЬNULL(Взаимодействия.Дата, ДАТАВРЕМЯ(1, 1, 1)) КАК ДатаПоследнегоВзаимодействия,
| ВЫБОР
| КОГДА ЕСТЬNULL(ПредметыПапкиВзаимодействий.Рассмотрено, ИСТИНА)
| ТОГДА 0
| ИНАЧЕ 1
| КОНЕЦ КАК КоличествоНеРассмотрено
| ИЗ
| КонтактыДляРасчета КАК КонтактыДляРасчета
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактыВзаимодействий КАК КонтактыВзаимодействий
| ЛЕВОЕ СОЕДИНЕНИЕ ЖурналДокументов.Взаимодействия КАК Взаимодействия
| ПО КонтактыВзаимодействий.Взаимодействие = Взаимодействия.Ссылка
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПредметыПапкиВзаимодействий КАК ПредметыПапкиВзаимодействий
| ПО КонтактыВзаимодействий.Взаимодействие = ПредметыПапкиВзаимодействий.Взаимодействие
| ПО КонтактыДляРасчета.Контакт = КонтактыВзаимодействий.Контакт) КАК ВложенныйЗапрос
|
|СГРУППИРОВАТЬ ПО
| ВложенныйЗапрос.Контакт";
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
Если Выборка.ДатаПоследнегоВзаимодействия = Дата(1, 1, 1) Тогда
РегистрыСведений.СостоянияКонтактовВзаимодействий.УдалитьЗаписьИзРегистра(Выборка.Контакт);
Иначе
РегистрыСведений.СостоянияКонтактовВзаимодействий.ВыполнитьЗаписьВРегистр(Выборка.Контакт,
Выборка.КоличествоНеРассмотрено,
Выборка.ДатаПоследнегоВзаимодействия);
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////
РассчитатьРассмотреноПоПапкам (БСП)
РассчитатьРассмотреноПоПредметам (БСП)
РассчитанныеДатыЗапретаИзменения (БСП)
УстановитьПризнакРассмотрено (БСП)