1
0
mirror of https://github.com/BlizD/Tasks.git synced 2025-03-19 21:07:53 +02:00

Merge pull request #223 from d-hurricane/feature212

Реализация кэширования статистики взаимодействий по задачам
This commit is contained in:
Anton Ivanov 2020-06-27 19:21:22 +03:00 committed by GitHub
commit 3ff097065b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
19 changed files with 1524 additions and 4 deletions

View File

@ -2085,6 +2085,96 @@
<DataHistory>Use</DataHistory>
</Properties>
</Attribute>
<Attribute uuid="418d95cf-fb72-41c3-9887-0cb1471e2fe0">
<Properties>
<Name>КоличествоЗадачЧекЛиста</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Количество задач чек-листа</v8:content>
</v8:item>
</Synonym>
<Comment/>
<Type>
<v8:Type>xs:decimal</v8:Type>
<v8:NumberQualifiers>
<v8:Digits>10</v8:Digits>
<v8:FractionDigits>0</v8:FractionDigits>
<v8:AllowedSign>Nonnegative</v8:AllowedSign>
</v8:NumberQualifiers>
</Type>
<PasswordMode>false</PasswordMode>
<Format/>
<EditFormat/>
<ToolTip/>
<MarkNegatives>false</MarkNegatives>
<Mask/>
<MultiLine>false</MultiLine>
<ExtendedEdit>false</ExtendedEdit>
<MinValue xsi:nil="true"/>
<MaxValue xsi:nil="true"/>
<FillFromFillingValue>false</FillFromFillingValue>
<FillValue xsi:nil="true"/>
<FillChecking>DontCheck</FillChecking>
<ChoiceFoldersAndItems>Items</ChoiceFoldersAndItems>
<ChoiceParameterLinks/>
<ChoiceParameters/>
<QuickChoice>Auto</QuickChoice>
<CreateOnInput>Auto</CreateOnInput>
<ChoiceForm/>
<LinkByType/>
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
<Use>ForItem</Use>
<Indexing>DontIndex</Indexing>
<FullTextSearch>Use</FullTextSearch>
<DataHistory>Use</DataHistory>
</Properties>
</Attribute>
<Attribute uuid="332b47ad-4765-4af4-8b02-b6c616b1c185">
<Properties>
<Name>КоличествоВыполненныхЗадачЧекЛиста</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Количество выполененных задач чек-листа</v8:content>
</v8:item>
</Synonym>
<Comment/>
<Type>
<v8:Type>xs:decimal</v8:Type>
<v8:NumberQualifiers>
<v8:Digits>10</v8:Digits>
<v8:FractionDigits>0</v8:FractionDigits>
<v8:AllowedSign>Nonnegative</v8:AllowedSign>
</v8:NumberQualifiers>
</Type>
<PasswordMode>false</PasswordMode>
<Format/>
<EditFormat/>
<ToolTip/>
<MarkNegatives>false</MarkNegatives>
<Mask/>
<MultiLine>false</MultiLine>
<ExtendedEdit>false</ExtendedEdit>
<MinValue xsi:nil="true"/>
<MaxValue xsi:nil="true"/>
<FillFromFillingValue>false</FillFromFillingValue>
<FillValue xsi:nil="true"/>
<FillChecking>DontCheck</FillChecking>
<ChoiceFoldersAndItems>Items</ChoiceFoldersAndItems>
<ChoiceParameterLinks/>
<ChoiceParameters/>
<QuickChoice>Auto</QuickChoice>
<CreateOnInput>Auto</CreateOnInput>
<ChoiceForm/>
<LinkByType/>
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
<Use>ForItem</Use>
<Indexing>DontIndex</Indexing>
<FullTextSearch>Use</FullTextSearch>
<DataHistory>Use</DataHistory>
</Properties>
</Attribute>
<TabularSection uuid="0d958c66-1f6d-4b4a-a9ce-2a378e7394ad">
<InternalInfo>
<xr:GeneratedType name="CatalogTabularSection.узЗадачи.История" category="TabularSection">

View File

@ -1,5 +1,14 @@

Процедура ПередЗаписью(Отказ)
//+ УрянскийД 2020-06-22 (начало)
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(ЭтотОбъект);
//- УрянскийД 2020-06-22 (окончание)
Если Отказ Тогда
Возврат;
Конецесли;
@ -102,6 +111,11 @@
ДополнительныеСвойства.Вставить("СобытияВИстории",СобытияВИстории);
//+ УрянскийД 2020-06-22 (начало)
КоличествоЗадачЧекЛиста = ЭтотОбъект.Комментарии.Количество();
КоличествоВыполненныхЗадачЧекЛиста = ЭтотОбъект.Комментарии.Итог("Выполнено");
//- УрянскийД 2020-06-22 (окончание)
КонецПроцедуры
Процедура ЗаполнитьСтатусЗадачиЕслиОнНеЗаполнен(Отказ)
@ -1141,6 +1155,13 @@
КонецПроцедуры
Процедура ПриЗаписи(Отказ)
//***АиБ*** УрянскийД 2020-06-22 (начало)
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
//***АиБ*** УрянскийД 2020-06-22 (окончание)
Если ДополнительныеСвойства.Свойство("узЭтоОбработка") Тогда
Возврат;
Конецесли;
@ -1157,6 +1178,7 @@
//- ##122 Дзеса Ігор (capitoshko) 21.01.2019
ДополнительныеСвойства.Удалить("СобытияВИстории");
КонецПроцедуры
Процедура СформироватьЗаписиВРССвязанныеЗадачи(Отказ) Экспорт

View File

@ -8,6 +8,11 @@
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
//+ УрянскийД 2020-06-22 (начало)
ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(Объект, ЭтотОбъект);
//- УрянскийД 2020-06-22 (окончание)
// СтандартныеПодсистемы.ВерсионированиеОбъектов
ВерсионированиеОбъектов.ПриСозданииНаСервере(ЭтотОбъект);
// Конец СтандартныеПодсистемы.ВерсионированиеОбъектов

View File

@ -1,7 +1,13 @@
Процедура ПриДобавленииПодсистемы(Описание) Экспорт
Описание.Имя = "УправлениеЗадачами";
Описание.Версия = "1.0.5.002";
// Требуется библиотека стандартных подсистем.
Описание.Версия = "1.0.5.003";
//+ УрянскийД 2020-06-22 (начало)
Описание.РежимВыполненияОтложенныхОбработчиков = "Параллельно";
Описание.ПараллельноеОтложенноеОбновлениеСВерсии = "1.0.5.003";
//- УрянскийД 2020-06-22 (окончание)
// Требуется библиотека стандартных подсистем.
Описание.ТребуемыеПодсистемы.Добавить("СтандартныеПодсистемы");
КонецПроцедуры
Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт
@ -239,7 +245,45 @@
Обработчик.НачальноеЗаполнение = Ложь;
Обработчик.Процедура = "узОбновлениеИнформационнойБазы.ОбновлениеНаВерсию_1_0_4_034";
Обработчик.ОбщиеДанные = Истина;
Обработчик.Комментарий = "Обновление на версию 1.0.4.034";
Обработчик.Комментарий = "Обновление на версию 1.0.4.034";
//+ УрянскийД 2020-06-22 (начало)
Обработчик = Обработчики.Добавить();
Обработчик.Версия = "1.0.5.003";
Обработчик.Процедура = "узОбновлениеИнформационнойБазы.ОбновлениеИтоговЧекЛистаОперативное";
Обработчик = Обработчики.Добавить();
Обработчик.Версия = "1.0.5.003";
Обработчик.Процедура = "узОбновлениеИнформационнойБазы.ОбновлениеИтоговЧекЛистаВФоне";
Обработчик.Идентификатор = Новый УникальныйИдентификатор("0c980bcc-9483-4a76-b15b-80b6dac3dbf4");
Обработчик.Комментарий = НСтр("ru = 'Заполняет общее количество и количество выполненных подзадач чек-листа.'");
Обработчик.РежимВыполнения = "Отложенно";
Обработчик.ОчередьОтложеннойОбработки = 1;
Обработчик.ПроцедураЗаполненияДанныхОбновления = "узОбновлениеИнформационнойБазы.ЗарегистрироватьДанныеКОбновлениюИтоговЧекЛиста";
Обработчик.ПроцедураПроверки = "ОбновлениеИнформационнойБазы.ДанныеОбновленыНаНовуюВерсиюПрограммы";
Обработчик.ЧитаемыеОбъекты = "Справочник.узЗадачи";
Обработчик.ИзменяемыеОбъекты = "Справочник.узЗадачи";
Обработчик = Обработчики.Добавить();
Обработчик.Версия = "1.0.5.003";
Обработчик.Процедура = "узОбновлениеИнформационнойБазы.ОбновлениеСостоянийВзаимодействияПоЗадачамОперативное";
Обработчик = Обработчики.Добавить();
Обработчик.Версия = "1.0.5.003";
Обработчик.Процедура = "узОбновлениеИнформационнойБазы.ОбновлениеСостоянийВзаимодействияПоЗадачамВФоне";
Обработчик.Идентификатор = Новый УникальныйИдентификатор("454eb93c-3fc1-45bf-99c6-1045a4f18142");
Обработчик.Комментарий = НСтр("ru = 'Заполняет сводную информацию о почтовых взаимодействиях по задачам.'");
Обработчик.РежимВыполнения = "Отложенно";
Обработчик.ОчередьОтложеннойОбработки = 2;
Обработчик.ПроцедураЗаполненияДанныхОбновления = "узОбновлениеИнформационнойБазы.ЗарегистрироватьДанныеКОбновлениюВзаимодействийПоЗадачам";
Обработчик.ПроцедураПроверки = "ОбновлениеИнформационнойБазы.ДанныеОбновленыНаНовуюВерсиюПрограммы";
Обработчик.ИзменяемыеОбъекты = "РегистрСведений.узСостояниеВзаимодействийПоЗадачам";
Обработчик.ЧитаемыеОбъекты = "Справочник.узЗадачиПрисоединенныеФайлы,"
+ "Документ.ЭлектронноеПисьмоВходящее,"
+ "Документ.ЭлектронноеПисьмоИсходящее,"
+ "Справочник.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы,"
+ "Справочник.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы";;
//- УрянскийД 2020-06-22 (окончание)
КонецПроцедуры
Процедура ПередОбновлениемИнформационнойБазы() Экспорт
@ -1217,6 +1261,377 @@
КонецПроцедуры
// УрянскийД 2020-06-22
Процедура ОбновлениеИтоговЧекЛистаОперативное() Экспорт
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ ПЕРВЫЕ 1000
| ЧекЛист.Ссылка КАК Ссылка
|ИЗ
| Справочник.узЗадачи.Комментарии КАК ЧекЛист
|
|УПОРЯДОЧИТЬ ПО
| ЧекЛист.Ссылка.ДатаСоздания УБЫВ";
ВыборкаЗадач = Запрос.Выполнить().Выбрать();
Пока ВыборкаЗадач.Следующий() Цикл
НачатьТранзакцию();
Попытка
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить("Справочник.узЗадачи");
ЭлементБлокировки.УстановитьЗначение("Ссылка", ВыборкаЗадач.Ссылка);
Блокировка.Заблокировать();
ЗадачаОбъект = ВыборкаЗадач.Ссылка.ПолучитьОбъект();
Если ЗадачаОбъект = Неопределено Тогда
ОтменитьТранзакцию();
Продолжить;
КонецЕсли;
КоличествоПодзадач = ЗадачаОбъект.Комментарии.Количество();
КоличествоВыполненных = ЗадачаОбъект.Комментарии.Итог("Выполнено");
Если ЗадачаОбъект.КоличествоЗадачЧекЛиста <> КоличествоПодзадач Тогда
ЗадачаОбъект.КоличествоЗадачЧекЛиста = КоличествоПодзадач;
КонецЕсли;
Если ЗадачаОбъект.КоличествоВыполненныхЗадачЧекЛиста <> КоличествоВыполненных Тогда
ЗадачаОбъект.КоличествоВыполненныхЗадачЧекЛиста = КоличествоВыполненных;
КонецЕсли;
Если ЗадачаОбъект.Модифицированность() Тогда
ОбновлениеИнформационнойБазы.ЗаписатьДанные(ЗадачаОбъект);
КонецЕсли;
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
ТекстСообщения = НСтр("ru = 'Процедуре %ИмяПроцедуры% не удалось обработать %ИмяОбъекта%: %Ссылка% по причине: %Причина%'");
ТекстСообщения = СтрЗаменить(ТекстСообщения, "%ИмяПроцедуры%", "узОбновлениеИнформационнойБазы.ОбновлениеИтоговЧекЛистаОперативное");
ТекстСообщения = СтрЗаменить(ТекстСообщения, "%ИмяОбъекта%", ВыборкаЗадач.Ссылка.Метаданные().ПолноеИмя());
ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Ссылка%", ВыборкаЗадач.Ссылка);
ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Причина%", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
ВызватьИсключение ТекстСообщения;
КонецПопытки;
КонецЦикла;
КонецПроцедуры
// УрянскийД 2020-06-22
Процедура ОбновлениеИтоговЧекЛистаВФоне(ПараметрыОбновления) Экспорт
ПолноеИмяОбъекта = "Справочник.узЗадачи";
ОбъектовОбработано = 0;
ПроблемныхОбъектов = 0;
ОбработкаЗавершена = Истина;
ВыборкаЗадач = ОбновлениеИнформационнойБазы.ВыбратьСсылкиДляОбработки(ПараметрыОбновления.Очередь, ПолноеИмяОбъекта);
Пока ВыборкаЗадач.Следующий() Цикл
НачатьТранзакцию();
Попытка
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить(ПолноеИмяОбъекта);
ЭлементБлокировки.УстановитьЗначение("Ссылка", ВыборкаЗадач.Ссылка);
Блокировка.Заблокировать();
ЗадачаОбъект = ВыборкаЗадач.Ссылка.ПолучитьОбъект();
Если ЗадачаОбъект = Неопределено Тогда
ОбновлениеИнформационнойБазы.ОтметитьВыполнениеОбработки(ВыборкаЗадач.Ссылка);
ЗафиксироватьТранзакцию();
Продолжить;
КонецЕсли;
КоличествоПодзадач = ЗадачаОбъект.Комментарии.Количество();
КоличествоВыполненных = ЗадачаОбъект.Комментарии.Итог("Выполнено");
Если ЗадачаОбъект.КоличествоЗадачЧекЛиста <> КоличествоПодзадач Тогда
ЗадачаОбъект.КоличествоЗадачЧекЛиста = КоличествоПодзадач;
КонецЕсли;
Если ЗадачаОбъект.КоличествоВыполненныхЗадачЧекЛиста <> КоличествоВыполненных Тогда
ЗадачаОбъект.КоличествоВыполненныхЗадачЧекЛиста = КоличествоВыполненных;
КонецЕсли;
Если ЗадачаОбъект.Модифицированность() Тогда
ОбновлениеИнформационнойБазы.ЗаписатьДанные(ЗадачаОбъект);
Иначе
ОбновлениеИнформационнойБазы.ОтметитьВыполнениеОбработки(ЗадачаОбъект);
КонецЕсли;
ЗафиксироватьТранзакцию();
ОбъектовОбработано = ОбъектовОбработано + 1;
Исключение
ОтменитьТранзакцию();
ПроблемныхОбъектов = ПроблемныхОбъектов + 1;
ТекстСообщения = НСтр("ru = 'Не удалось обработать %ИмяОбъекта%: %Ссылка% по причине: %Причина%'");
ТекстСообщения = СтрЗаменить(ТекстСообщения, "%ИмяОбъекта%", ПолноеИмяОбъекта);
ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Ссылка%", ВыборкаЗадач.Ссылка);
ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Причина%", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(),
УровеньЖурналаРегистрации.Предупреждение,
ВыборкаЗадач.Ссылка.Метаданные(),
ВыборкаЗадач.Ссылка,
ТекстСообщения);
КонецПопытки;
КонецЦикла;
Если Не ОбновлениеИнформационнойБазы.ОбработкаДанныхЗавершена(ПараметрыОбновления.Очередь, ПолноеИмяОбъекта) Тогда
ОбработкаЗавершена = Ложь;
КонецЕсли;
Если ОбъектовОбработано = 0 И ПроблемныхОбъектов <> 0 Тогда
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Процедуре %1 не удалось обработать задачи (пропущены): %2'"),
"узОбновлениеИнформационнойБазы.ОбновлениеИтоговЧекЛистаВФоне",
ПроблемныхОбъектов);
ВызватьИсключение ТекстСообщения;
Иначе
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Процедура %1 обработала очередную порцию задач: %2'"),
"узОбновлениеИнформационнойБазы.ОбновлениеИтоговЧекЛистаВФоне",
ОбъектовОбработано);
ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(),
УровеньЖурналаРегистрации.Информация,
, ,
ТекстСообщения);
КонецЕсли;
ПараметрыОбновления.ОбработкаЗавершена = ОбработкаЗавершена;
КонецПроцедуры
// УрянскийД 2020-06-22
Процедура ЗарегистрироватьДанныеКОбновлениюИтоговЧекЛиста(ПараметрыОбновления) Экспорт
РазмерПорции = 1000;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ЧекЛист.Ссылка КАК Ссылка
|ИЗ
| Справочник.узЗадачи.Комментарии КАК ЧекЛист
|ГДЕ
| ЧекЛист.Ссылка > &Граница
| И ЧекЛист.НомерСтроки = 1
|
|УПОРЯДОЧИТЬ ПО
| ЧекЛист.Ссылка";
Запрос.Текст = СтрЗаменить(Запрос.Текст, "ВЫБРАТЬ", "ВЫБРАТЬ ПЕРВЫЕ " + Формат(РазмерПорции, "ЧН=; ЧГ="));
Запрос.УстановитьПараметр("Граница", Справочники.узЗадачи.ПустаяСсылка());
ЕстьДанныеДляОбработки = Истина;
Пока ЕстьДанныеДляОбработки Цикл
МассивСсылок = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку(0);
Если ЗначениеЗаполнено(МассивСсылок) Тогда
ОбновлениеИнформационнойБазы.ОтметитьКОбработке(ПараметрыОбновления, МассивСсылок);
Запрос.УстановитьПараметр("Граница", МассивСсылок[МассивСсылок.ВГраница()]);
КонецЕсли;
ЕстьДанныеДляОбработки = Не (МассивСсылок.Количество() < РазмерПорции);
КонецЦикла;
КонецПроцедуры
// УрянскийД 2020-06-22
Процедура ОбновлениеСостоянийВзаимодействияПоЗадачамОперативное() Экспорт
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1000
| узЗадачи.Ссылка КАК Ссылка
|ИЗ
| Справочник.узЗадачи КАК узЗадачи
|
|УПОРЯДОЧИТЬ ПО
| узЗадачи.ДатаСоздания УБЫВ";
Результат = Запрос.Выполнить();
МассивСсылок = Результат.Выгрузить().ВыгрузитьКолонку(0);
НачатьТранзакцию();
Попытка
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.узСостояниеВзаимодействийПоЗадачам");
ЭлементБлокировки.ИсточникДанных = Результат;
ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Задача", "Ссылка");
Блокировка.Заблокировать();
РегистрыСведений.узСостояниеВзаимодействийПоЗадачам.ОтразитьСостояниеЗадачи(МассивСсылок, Ложь);
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
ТекстСообщения = НСтр("ru = 'Процедуре %ИмяПроцедуры% не удалось обработать задачи по причине: %Причина%'");
ТекстСообщения = СтрЗаменить(ТекстСообщения, "%ИмяПроцедуры%", "узОбновлениеИнформационнойБазы.ОбновлениеСостоянийВзаимодействияПоЗадачамОперативное");
ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Причина%", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
ВызватьИсключение ТекстСообщения;
КонецПопытки;
КонецПроцедуры
// УрянскийД 2020-06-22
Процедура ОбновлениеСостоянийВзаимодействияПоЗадачамВФоне(ПараметрыОбновления) Экспорт
ПолноеИмяОбъекта = "Справочник.узЗадачи";
ОбъектовОбработано = 0;
ПроблемныхОбъектов = 0;
ОбработкаЗавершена = Истина;
ДополнительныеПараметры = ОбновлениеИнформационнойБазы.ДополнительныеПараметрыВыборкиДанныхДляОбработки();
ДополнительныеПараметры.МаксимумВыборки = 1000;
ВыборкаЗадач = ОбновлениеИнформационнойБазы.ВыбратьСсылкиДляОбработки(ПараметрыОбновления.Очередь,
ПолноеИмяОбъекта,
ДополнительныеПараметры);
МассивСсылок = Новый Массив;
НачатьТранзакцию();
Попытка
Пока ВыборкаЗадач.Следующий() Цикл
МассивСсылок.Добавить(ВыборкаЗадач.Ссылка);
КонецЦикла;
РегистрыСведений.узСостояниеВзаимодействийПоЗадачам.ОтразитьСостояниеЗадачи(
МассивСсылок,
Ложь,
ПараметрыОбновления.Очередь);
ОбновлениеИнформационнойБазы.ОтметитьВыполнениеОбработки(МассивСсылок);
ЗафиксироватьТранзакцию();
ОбъектовОбработано = ОбъектовОбработано + МассивСсылок.Количество();
Исключение
ОтменитьТранзакцию();
ПроблемныхОбъектов = ПроблемныхОбъектов + МассивСсылок.Количество();
МетаданныеОбъекта = Метаданные.НайтиПоПолномуИмени(ПолноеИмяОбъекта);
ТекстСообщения = НСтр("ru = 'Не удалось обработать %ИмяОбъекта% по причине: %Причина%'");
ТекстСообщения = СтрЗаменить(ТекстСообщения, "%ИмяОбъекта%", ПолноеИмяОбъекта);
ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Причина%", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(),
УровеньЖурналаРегистрации.Предупреждение,
МетаданныеОбъекта,
,
ТекстСообщения);
КонецПопытки;
Если Не ОбновлениеИнформационнойБазы.ОбработкаДанныхЗавершена(ПараметрыОбновления.Очередь, ПолноеИмяОбъекта) Тогда
ОбработкаЗавершена = Ложь;
КонецЕсли;
Если ОбъектовОбработано = 0 И ПроблемныхОбъектов <> 0 Тогда
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Процедуре %1 не удалось обработать задачи (пропущены): %2'"),
"узОбновлениеИнформационнойБазы.ОбновлениеСостоянийВзаимодействияПоЗадачамВФоне",
ПроблемныхОбъектов);
ВызватьИсключение ТекстСообщения;
Иначе
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Процедура %1 обработала очередную порцию задач: %2'"),
"узОбновлениеИнформационнойБазы.ОбновлениеСостоянийВзаимодействияПоЗадачамВФоне",
ОбъектовОбработано);
ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(),
УровеньЖурналаРегистрации.Информация,
, ,
ТекстСообщения);
КонецЕсли;
ПараметрыОбновления.ОбработкаЗавершена = ОбработкаЗавершена;
КонецПроцедуры
// УрянскийД 2020-06-22
Процедура ЗарегистрироватьДанныеКОбновлениюВзаимодействийПоЗадачам(ПараметрыОбновления) Экспорт
РазмерПорции = 1000;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Задачи.Ссылка КАК Ссылка
|ИЗ
| Справочник.узЗадачи КАК Задачи
|ГДЕ
| Задачи.Ссылка > &Граница
|
|УПОРЯДОЧИТЬ ПО
| Задачи.Ссылка";
Запрос.Текст = СтрЗаменить(Запрос.Текст, "ВЫБРАТЬ", "ВЫБРАТЬ ПЕРВЫЕ " + Формат(РазмерПорции, "ЧН=; ЧГ="));
Запрос.УстановитьПараметр("Граница", Справочники.узЗадачи.ПустаяСсылка());
ЕстьДанныеДляОбработки = Истина;
Пока ЕстьДанныеДляОбработки Цикл
МассивСсылок = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку(0);
Если ЗначениеЗаполнено(МассивСсылок) Тогда
ОбновлениеИнформационнойБазы.ОтметитьКОбработке(ПараметрыОбновления, МассивСсылок);
Запрос.УстановитьПараметр("Граница", МассивСсылок[МассивСсылок.ВГраница()]);
КонецЕсли;
ЕстьДанныеДляОбработки = Не (МассивСсылок.Количество() < РазмерПорции);
КонецЦикла;
КонецПроцедуры
//#Область ПрограммныйИнтерфейс

View File

@ -1136,3 +1136,126 @@
ПолеВвода.Вид = ВидПоляФормы.ПолеВвода;
КонецПроцедуры
//+ #212 Урянский Д.В. 2020-03-08
Процедура ОбновитьСостояниеВзаимодействияПоЗадачеПриЗаписиФайла(Источник, Отказ) Экспорт
Если Источник.ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
УстановитьПривилегированныйРежим(Истина);
Если ТипЗнч(Источник.ВладелецФайла) = Тип("СправочникСсылка.узЗадачи") Тогда
РегистрыСведений.узСостояниеВзаимодействийПоЗадачам.ОтразитьСостояниеЗадачи(Источник.ВладелецФайла, Отказ);
ИначеЕсли ВзаимодействияКлиентСервер.ЯвляетсяПрисоединеннымФайломВзаимодействий(Источник.Ссылка) Тогда
ПредметВзаимодействия = Взаимодействия.ПолучитьЗначениеПредмета(Источник.ВладелецФайла);
Если ТипЗнч(ПредметВзаимодействия) = Тип("СправочникСсылка.узЗадачи") Тогда
РегистрыСведений.узСостояниеВзаимодействийПоЗадачам.ОтразитьСостояниеЗадачи(ПредметВзаимодействия, Отказ);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
//+ #212 Урянский Д.В. 2020-03-08
Процедура ОбновитьСостояниеВзаимодействияПоЗадачеПриЗаписиПисьма(Источник, Отказ) Экспорт
Если Источник.ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
Если Источник.ЭтоНовый() Тогда
Возврат; // предмет письма (задача) еще не записан
КонецЕсли;
Если ТипЗнч(Источник) = Тип("ДокументОбъект.ЭлектронноеПисьмоВходящее") Тогда
ДатаВзаимодействия = Источник.ДатаПолучения;
ИначеЕсли ТипЗнч(Источник) = Тип("ДокументОбъект.ЭлектронноеПисьмоИсходящее") Тогда
ДатаВзаимодействия = Источник.ДатаОтправления;
Иначе
ДатаВзаимодействия = Неопределено;
КонецЕсли;
Если Не ЗначениеЗаполнено(ДатаВзаимодействия) Тогда
Возврат;
КонецЕсли;
УстановитьПривилегированныйРежим(Истина);
Предмет = Взаимодействия.ПолучитьЗначениеПредмета(Источник.Ссылка);
Если ТипЗнч(Предмет) = Тип("СправочникСсылка.узЗадачи") Тогда
РегистрыСведений.узСостояниеВзаимодействийПоЗадачам.ОтразитьСостояниеЗадачи(Предмет, Отказ);
КонецЕсли;
КонецПроцедуры
//+ #212 Урянский Д.В. 2020-03-08
Процедура ОбновитьСостояниеВзаимодействияПоЗадачеПередЗаписьюПредмета(Источник, Отказ, Замещение) Экспорт
Если Источник.ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
Если Источник.Отбор.Количество() = 0 Тогда
Возврат;
КонецЕсли;
УстановитьПривилегированныйРежим(Истина);
Взаимодействие = Источник.Отбор.Взаимодействие.Значение;
Предмет = Взаимодействия.ПолучитьЗначениеПредмета(Взаимодействие);
Если ТипЗнч(Предмет) = Тип("СправочникСсылка.узЗадачи") Тогда
Источник.ДополнительныеСвойства.Вставить("ЗадачаДляОбновленияСостояния", Предмет);
КонецЕсли;
КонецПроцедуры
//+ #212 Урянский Д.В. 2020-03-08
Процедура ОбновитьСостояниеВзаимодействияПоЗадачеПриЗаписиПредмета(Источник, Отказ, Замещение) Экспорт
Если Источник.ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
Если Источник.Отбор.Количество() = 0 Тогда
Возврат;
КонецЕсли;
МассивЗадач = Новый Массив;
Для каждого Запись Из Источник Цикл
Если ТипЗнч(Запись.Предмет) = Тип("СправочникСсылка.узЗадачи") Тогда
МассивЗадач.Добавить(Запись.Предмет);
КонецЕсли;
КонецЦикла;
СтараяЗадача = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Источник.ДополнительныеСвойства, "ЗадачаДляОбновленияСостояния");
Если ЗначениеЗаполнено(СтараяЗадача) Тогда
ИндексЗадачи = МассивЗадач.Найти(СтараяЗадача);
Если ИндексЗадачи = Неопределено Тогда
// Изменили предмет взаимодействия: нужен расчет как для нового, так и для старого предмета.
МассивЗадач.Добавить(СтараяЗадача);
Иначе
// Предмет взаимодействия не менялся: расчет не нужен.
МассивЗадач.Удалить(ИндексЗадачи);
КонецЕсли;
КонецЕсли;
Если МассивЗадач.Количество() <> 0 Тогда
УстановитьПривилегированныйРежим(Истина);
РегистрыСведений.узСостояниеВзаимодействийПоЗадачам.ОтразитьСостояниеЗадачи(МассивЗадач, Отказ);
КонецЕсли;
КонецПроцедуры

View File

@ -49,7 +49,7 @@
<xr:Item xsi:type="xr:MDObjectRef">Role.ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок</xr:Item>
</DefaultRoles>
<Vendor>Управление задачами</Vendor>
<Version>1.0.5.002</Version>
<Version>1.0.5.003</Version>
<UpdateCatalogAddress/>
<IncludeHelpInContents>false</IncludeHelpInContents>
<UseManagedFormInOrdinaryApplication>true</UseManagedFormInOrdinaryApplication>
@ -1089,6 +1089,10 @@
<EventSubscription>СвойстваПередУдалениемСсылочногоОбъекта</EventSubscription>
<EventSubscription>СкопироватьРеквизитыВерсииФайловВФайл</EventSubscription>
<EventSubscription>СоздатьПредопределенныеПапкиЭлектронныхПисем</EventSubscription>
<EventSubscription>узОбновитьСостояниеВзаимодействияПоЗадачеПриЗаписиФайла</EventSubscription>
<EventSubscription>узОбновитьСостояниеВзаимодействияПоЗадачеПередЗаписьюПредмета</EventSubscription>
<EventSubscription>узОбновитьСостояниеВзаимодействияПоЗадачеПриЗаписиПисьма</EventSubscription>
<EventSubscription>узОбновитьСостояниеВзаимодействияПоЗадачеПриЗаписиПредмета</EventSubscription>
<EventSubscription>узПереопределитьПолучаемуюФормуПрисоединенногоФайла</EventSubscription>
<EventSubscription>узПроверитьНаличиеЗаметокПоПредмету</EventSubscription>
<EventSubscription>узУстановитьПометкуУдаленияПрисоединенныхФайловДокументов</EventSubscription>
@ -1773,6 +1777,7 @@
<InformationRegister>узПроксиСерверы</InformationRegister>
<InformationRegister>узСвязанныеЗадачи</InformationRegister>
<InformationRegister>узСловарь</InformationRegister>
<InformationRegister>узСостояниеВзаимодействийПоЗадачам</InformationRegister>
<InformationRegister>узСпринтыЗадач</InformationRegister>
<InformationRegister>узСтатусыЗадач</InformationRegister>
<AccumulationRegister>узФактПоЗадачам</AccumulationRegister>

View File

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.9">
<EventSubscription uuid="327c9f0e-beee-452a-9372-f01a7eb8f996">
<Properties>
<Name>узОбновитьСостояниеВзаимодействияПоЗадачеПередЗаписьюПредмета</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Обновить состояние взаимодействия по задаче перед записью предмета</v8:content>
</v8:item>
</Synonym>
<Comment/>
<Source>
<v8:Type>cfg:InformationRegisterRecordSet.ПредметыПапкиВзаимодействий</v8:Type>
</Source>
<Event>BeforeWrite</Event>
<Handler>CommonModule.узОбщийМодульСервер.ОбновитьСостояниеВзаимодействияПоЗадачеПередЗаписьюПредмета</Handler>
</Properties>
</EventSubscription>
</MetaDataObject>

View File

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="UTF-8"?>
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.9">
<EventSubscription uuid="647b89da-637c-43dc-b43b-ba6d108fda36">
<Properties>
<Name>узОбновитьСостояниеВзаимодействияПоЗадачеПриЗаписиПисьма</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Обновить состояние взаимодействия по задаче при записи письма</v8:content>
</v8:item>
</Synonym>
<Comment/>
<Source>
<v8:Type>cfg:DocumentObject.ЭлектронноеПисьмоВходящее</v8:Type>
<v8:Type>cfg:DocumentObject.ЭлектронноеПисьмоИсходящее</v8:Type>
</Source>
<Event>OnWrite</Event>
<Handler>CommonModule.узОбщийМодульСервер.ОбновитьСостояниеВзаимодействияПоЗадачеПриЗаписиПисьма</Handler>
</Properties>
</EventSubscription>
</MetaDataObject>

View File

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.9">
<EventSubscription uuid="26fd8285-8051-4982-9b0f-cf9d3383400f">
<Properties>
<Name>узОбновитьСостояниеВзаимодействияПоЗадачеПриЗаписиПредмета</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Обновить состояние взаимодействия по задаче при записи предмета</v8:content>
</v8:item>
</Synonym>
<Comment/>
<Source>
<v8:Type>cfg:InformationRegisterRecordSet.ПредметыПапкиВзаимодействий</v8:Type>
</Source>
<Event>OnWrite</Event>
<Handler>CommonModule.узОбщийМодульСервер.ОбновитьСостояниеВзаимодействияПоЗадачеПриЗаписиПредмета</Handler>
</Properties>
</EventSubscription>
</MetaDataObject>

View File

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.9">
<EventSubscription uuid="5b3a8e93-6fe9-49a3-82e8-ebeefd3500ff">
<Properties>
<Name>узОбновитьСостояниеВзаимодействияПоЗадачеПриЗаписиФайла</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Обновить состояние взаимодействия по задаче при записи файла</v8:content>
</v8:item>
</Synonym>
<Comment/>
<Source>
<v8:TypeSet>cfg:DefinedType.ПрисоединенныйФайлОбъект</v8:TypeSet>
</Source>
<Event>OnWrite</Event>
<Handler>CommonModule.узОбщийМодульСервер.ОбновитьСостояниеВзаимодействияПоЗадачеПриЗаписиФайла</Handler>
</Properties>
</EventSubscription>
</MetaDataObject>

View File

@ -208,6 +208,10 @@
<Metadata>InformationRegister.НастройкиСинхронизацииФайлов</Metadata>
<AutoRecord>Deny</AutoRecord>
</Item>
<Item>
<Metadata>Catalog.узЗадачи</Metadata>
<AutoRecord>Deny</AutoRecord>
</Item>
<Item>
<Metadata>Catalog.ВидыПроверок</Metadata>
<AutoRecord>Deny</AutoRecord>
@ -724,6 +728,10 @@
<Metadata>Catalog.ЗначенияСвойствОбъектов</Metadata>
<AutoRecord>Deny</AutoRecord>
</Item>
<Item>
<Metadata>InformationRegister.узСостояниеВзаимодействийПоЗадачам</Metadata>
<AutoRecord>Deny</AutoRecord>
</Item>
<Item>
<Metadata>InformationRegister.ДатыПоследнейЗагрузкиПочтовыхСообщений</Metadata>
<AutoRecord>Deny</AutoRecord>

View File

@ -0,0 +1,391 @@
<?xml version="1.0" encoding="UTF-8"?>
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.9">
<InformationRegister uuid="b1c2f838-149b-4b70-9307-8b1fa9344c4e">
<InternalInfo>
<xr:GeneratedType name="InformationRegisterRecord.узСостояниеВзаимодействийПоЗадачам" category="Record">
<xr:TypeId>d179ab20-4a99-402b-b399-0998100401a7</xr:TypeId>
<xr:ValueId>59f274c4-5ad6-4fa0-84c2-15e44535a696</xr:ValueId>
</xr:GeneratedType>
<xr:GeneratedType name="InformationRegisterManager.узСостояниеВзаимодействийПоЗадачам" category="Manager">
<xr:TypeId>f170d1b9-b6fe-44d9-9a91-ea9a70e77aac</xr:TypeId>
<xr:ValueId>a05b23e8-2e1d-4553-8a61-c74773c7fc9c</xr:ValueId>
</xr:GeneratedType>
<xr:GeneratedType name="InformationRegisterSelection.узСостояниеВзаимодействийПоЗадачам" category="Selection">
<xr:TypeId>44e16ca9-548b-47a8-9a69-04511a7454e0</xr:TypeId>
<xr:ValueId>66aff692-2e20-4096-af85-d108e3f7831d</xr:ValueId>
</xr:GeneratedType>
<xr:GeneratedType name="InformationRegisterList.узСостояниеВзаимодействийПоЗадачам" category="List">
<xr:TypeId>eec26afa-4dfc-4711-8a80-74dfac1186a1</xr:TypeId>
<xr:ValueId>792c31e0-d61e-43dd-88b0-a5a16bc9f338</xr:ValueId>
</xr:GeneratedType>
<xr:GeneratedType name="InformationRegisterRecordSet.узСостояниеВзаимодействийПоЗадачам" category="RecordSet">
<xr:TypeId>dc975ee1-90e5-43b7-b1f3-0113521d3be0</xr:TypeId>
<xr:ValueId>cbdbf75f-5eaf-469a-bba8-96708bea5bef</xr:ValueId>
</xr:GeneratedType>
<xr:GeneratedType name="InformationRegisterRecordKey.узСостояниеВзаимодействийПоЗадачам" category="RecordKey">
<xr:TypeId>4f23fcd6-5a93-4336-b436-89a5a5bd156b</xr:TypeId>
<xr:ValueId>1e043485-3170-4281-81c0-e3639915691f</xr:ValueId>
</xr:GeneratedType>
<xr:GeneratedType name="InformationRegisterRecordManager.узСостояниеВзаимодействийПоЗадачам" category="RecordManager">
<xr:TypeId>ef30312d-113a-4256-af60-625232954fa5</xr:TypeId>
<xr:ValueId>fe0bebdb-d767-4421-8299-0ad4ee7f296d</xr:ValueId>
</xr:GeneratedType>
</InternalInfo>
<Properties>
<Name>узСостояниеВзаимодействийПоЗадачам</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Состояние взаимодействий по задачам</v8:content>
</v8:item>
</Synonym>
<Comment/>
<UseStandardCommands>false</UseStandardCommands>
<EditType>InDialog</EditType>
<DefaultRecordForm/>
<DefaultListForm/>
<AuxiliaryRecordForm/>
<AuxiliaryListForm/>
<InformationRegisterPeriodicity>Nonperiodical</InformationRegisterPeriodicity>
<WriteMode>Independent</WriteMode>
<MainFilterOnPeriod>false</MainFilterOnPeriod>
<IncludeHelpInContents>false</IncludeHelpInContents>
<DataLockControlMode>Managed</DataLockControlMode>
<FullTextSearch>DontUse</FullTextSearch>
<EnableTotalsSliceFirst>false</EnableTotalsSliceFirst>
<EnableTotalsSliceLast>false</EnableTotalsSliceLast>
<RecordPresentation/>
<ExtendedRecordPresentation/>
<ListPresentation/>
<ExtendedListPresentation/>
<Explanation/>
<DataHistory>DontUse</DataHistory>
<UpdateDataHistoryImmediatelyAfterWrite>false</UpdateDataHistoryImmediatelyAfterWrite>
<ExecuteAfterWriteDataHistoryVersionProcessing>false</ExecuteAfterWriteDataHistoryVersionProcessing>
</Properties>
<ChildObjects>
<Resource uuid="305eed7a-646d-4b47-acb3-752b10b31306">
<Properties>
<Name>КоличествоПрисоединенныхФайлов</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Количество присоединенных файлов</v8:content>
</v8:item>
</Synonym>
<Comment/>
<Type>
<v8:Type>xs:decimal</v8:Type>
<v8:NumberQualifiers>
<v8:Digits>10</v8:Digits>
<v8:FractionDigits>0</v8:FractionDigits>
<v8:AllowedSign>Nonnegative</v8:AllowedSign>
</v8:NumberQualifiers>
</Type>
<PasswordMode>false</PasswordMode>
<Format/>
<EditFormat/>
<ToolTip>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Количество файлов, присоединенных непосредственно к задаче</v8:content>
</v8:item>
</ToolTip>
<MarkNegatives>false</MarkNegatives>
<Mask/>
<MultiLine>false</MultiLine>
<ExtendedEdit>false</ExtendedEdit>
<MinValue xsi:nil="true"/>
<MaxValue xsi:nil="true"/>
<FillFromFillingValue>false</FillFromFillingValue>
<FillValue xsi:nil="true"/>
<FillChecking>DontCheck</FillChecking>
<ChoiceFoldersAndItems>Items</ChoiceFoldersAndItems>
<ChoiceParameterLinks/>
<ChoiceParameters/>
<QuickChoice>Auto</QuickChoice>
<CreateOnInput>Auto</CreateOnInput>
<ChoiceForm/>
<LinkByType/>
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
<Indexing>DontIndex</Indexing>
<FullTextSearch>Use</FullTextSearch>
<DataHistory>Use</DataHistory>
</Properties>
</Resource>
<Resource uuid="43fc444e-f3d9-49ae-8e1e-fb444c6871d9">
<Properties>
<Name>КоличествоВходящихПисем</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Количество входящих писем</v8:content>
</v8:item>
</Synonym>
<Comment/>
<Type>
<v8:Type>xs:decimal</v8:Type>
<v8:NumberQualifiers>
<v8:Digits>10</v8:Digits>
<v8:FractionDigits>0</v8:FractionDigits>
<v8:AllowedSign>Nonnegative</v8:AllowedSign>
</v8:NumberQualifiers>
</Type>
<PasswordMode>false</PasswordMode>
<Format/>
<EditFormat/>
<ToolTip>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Количество связанных с задачей входящих электронных писем</v8:content>
</v8:item>
</ToolTip>
<MarkNegatives>false</MarkNegatives>
<Mask/>
<MultiLine>false</MultiLine>
<ExtendedEdit>false</ExtendedEdit>
<MinValue xsi:nil="true"/>
<MaxValue xsi:nil="true"/>
<FillFromFillingValue>false</FillFromFillingValue>
<FillValue xsi:nil="true"/>
<FillChecking>DontCheck</FillChecking>
<ChoiceFoldersAndItems>Items</ChoiceFoldersAndItems>
<ChoiceParameterLinks/>
<ChoiceParameters/>
<QuickChoice>Auto</QuickChoice>
<CreateOnInput>Auto</CreateOnInput>
<ChoiceForm/>
<LinkByType/>
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
<Indexing>DontIndex</Indexing>
<FullTextSearch>Use</FullTextSearch>
<DataHistory>Use</DataHistory>
</Properties>
</Resource>
<Resource uuid="d0119260-8d5f-4b76-9a4e-4405ecf90c84">
<Properties>
<Name>КоличествоИсходящихПисем</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Количество исходящих писем</v8:content>
</v8:item>
</Synonym>
<Comment/>
<Type>
<v8:Type>xs:decimal</v8:Type>
<v8:NumberQualifiers>
<v8:Digits>10</v8:Digits>
<v8:FractionDigits>0</v8:FractionDigits>
<v8:AllowedSign>Nonnegative</v8:AllowedSign>
</v8:NumberQualifiers>
</Type>
<PasswordMode>false</PasswordMode>
<Format/>
<EditFormat/>
<ToolTip>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Количество связанных с задачей исходящих электронных писем</v8:content>
</v8:item>
</ToolTip>
<MarkNegatives>false</MarkNegatives>
<Mask/>
<MultiLine>false</MultiLine>
<ExtendedEdit>false</ExtendedEdit>
<MinValue xsi:nil="true"/>
<MaxValue xsi:nil="true"/>
<FillFromFillingValue>false</FillFromFillingValue>
<FillValue xsi:nil="true"/>
<FillChecking>DontCheck</FillChecking>
<ChoiceFoldersAndItems>Items</ChoiceFoldersAndItems>
<ChoiceParameterLinks/>
<ChoiceParameters/>
<QuickChoice>Auto</QuickChoice>
<CreateOnInput>Auto</CreateOnInput>
<ChoiceForm/>
<LinkByType/>
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
<Indexing>DontIndex</Indexing>
<FullTextSearch>Use</FullTextSearch>
<DataHistory>Use</DataHistory>
</Properties>
</Resource>
<Resource uuid="b76ab876-ae5a-41c5-b868-7213bd9e4ca5">
<Properties>
<Name>ДатаПоследнегоВходящегоПисьма</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Дата последнего входящего письма</v8:content>
</v8:item>
</Synonym>
<Comment/>
<Type>
<v8:Type>xs:dateTime</v8:Type>
<v8:DateQualifiers>
<v8:DateFractions>DateTime</v8:DateFractions>
</v8:DateQualifiers>
</Type>
<PasswordMode>false</PasswordMode>
<Format/>
<EditFormat/>
<ToolTip/>
<MarkNegatives>false</MarkNegatives>
<Mask/>
<MultiLine>false</MultiLine>
<ExtendedEdit>false</ExtendedEdit>
<MinValue xsi:nil="true"/>
<MaxValue xsi:nil="true"/>
<FillFromFillingValue>false</FillFromFillingValue>
<FillValue xsi:nil="true"/>
<FillChecking>DontCheck</FillChecking>
<ChoiceFoldersAndItems>Items</ChoiceFoldersAndItems>
<ChoiceParameterLinks/>
<ChoiceParameters/>
<QuickChoice>Auto</QuickChoice>
<CreateOnInput>Auto</CreateOnInput>
<ChoiceForm/>
<LinkByType/>
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
<Indexing>DontIndex</Indexing>
<FullTextSearch>Use</FullTextSearch>
<DataHistory>Use</DataHistory>
</Properties>
</Resource>
<Resource uuid="572c8ed0-0862-413c-94ce-1821f01bfacb">
<Properties>
<Name>ДатаПоследнегоИсходящегоПисьма</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Дата последнего исходящего письма</v8:content>
</v8:item>
</Synonym>
<Comment/>
<Type>
<v8:Type>xs:dateTime</v8:Type>
<v8:DateQualifiers>
<v8:DateFractions>DateTime</v8:DateFractions>
</v8:DateQualifiers>
</Type>
<PasswordMode>false</PasswordMode>
<Format/>
<EditFormat/>
<ToolTip/>
<MarkNegatives>false</MarkNegatives>
<Mask/>
<MultiLine>false</MultiLine>
<ExtendedEdit>false</ExtendedEdit>
<MinValue xsi:nil="true"/>
<MaxValue xsi:nil="true"/>
<FillFromFillingValue>false</FillFromFillingValue>
<FillValue xsi:nil="true"/>
<FillChecking>DontCheck</FillChecking>
<ChoiceFoldersAndItems>Items</ChoiceFoldersAndItems>
<ChoiceParameterLinks/>
<ChoiceParameters/>
<QuickChoice>Auto</QuickChoice>
<CreateOnInput>Auto</CreateOnInput>
<ChoiceForm/>
<LinkByType/>
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
<Indexing>DontIndex</Indexing>
<FullTextSearch>Use</FullTextSearch>
<DataHistory>Use</DataHistory>
</Properties>
</Resource>
<Resource uuid="df7e6b33-a2d6-4c95-82ed-22cc9de26b10">
<Properties>
<Name>КоличествоВложенийПисем</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Количество вложений писем</v8:content>
</v8:item>
</Synonym>
<Comment/>
<Type>
<v8:Type>xs:decimal</v8:Type>
<v8:NumberQualifiers>
<v8:Digits>10</v8:Digits>
<v8:FractionDigits>0</v8:FractionDigits>
<v8:AllowedSign>Nonnegative</v8:AllowedSign>
</v8:NumberQualifiers>
</Type>
<PasswordMode>false</PasswordMode>
<Format/>
<EditFormat/>
<ToolTip>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Количество файлов, прикрепленных к связанным с задачей электронным письмам</v8:content>
</v8:item>
</ToolTip>
<MarkNegatives>false</MarkNegatives>
<Mask/>
<MultiLine>false</MultiLine>
<ExtendedEdit>false</ExtendedEdit>
<MinValue xsi:nil="true"/>
<MaxValue xsi:nil="true"/>
<FillFromFillingValue>false</FillFromFillingValue>
<FillValue xsi:nil="true"/>
<FillChecking>DontCheck</FillChecking>
<ChoiceFoldersAndItems>Items</ChoiceFoldersAndItems>
<ChoiceParameterLinks/>
<ChoiceParameters/>
<QuickChoice>Auto</QuickChoice>
<CreateOnInput>Auto</CreateOnInput>
<ChoiceForm/>
<LinkByType/>
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
<Indexing>DontIndex</Indexing>
<FullTextSearch>Use</FullTextSearch>
<DataHistory>Use</DataHistory>
</Properties>
</Resource>
<Dimension uuid="6447add9-ca3e-4ae0-9c27-ecf9ddf71c5b">
<Properties>
<Name>Задача</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Задача</v8:content>
</v8:item>
</Synonym>
<Comment/>
<Type>
<v8:Type>cfg:CatalogRef.узЗадачи</v8:Type>
</Type>
<PasswordMode>false</PasswordMode>
<Format/>
<EditFormat/>
<ToolTip/>
<MarkNegatives>false</MarkNegatives>
<Mask/>
<MultiLine>false</MultiLine>
<ExtendedEdit>false</ExtendedEdit>
<MinValue xsi:nil="true"/>
<MaxValue xsi:nil="true"/>
<FillFromFillingValue>true</FillFromFillingValue>
<FillValue xsi:nil="true"/>
<FillChecking>ShowError</FillChecking>
<ChoiceFoldersAndItems>Items</ChoiceFoldersAndItems>
<ChoiceParameterLinks/>
<ChoiceParameters/>
<QuickChoice>Auto</QuickChoice>
<CreateOnInput>Auto</CreateOnInput>
<ChoiceForm/>
<LinkByType/>
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
<Master>true</Master>
<MainFilter>true</MainFilter>
<DenyIncompleteValues>true</DenyIncompleteValues>
<Indexing>DontIndex</Indexing>
<FullTextSearch>Use</FullTextSearch>
<DataHistory>Use</DataHistory>
</Properties>
</Dimension>
</ChildObjects>
</InformationRegister>
</MetaDataObject>

View File

@ -0,0 +1,266 @@
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область ПрограммныйИнтерфейс
// Процедура по переданной ссылке на задачу расчитывает и записывает в регистр сведения о взаимодействиях по задаче.
//
// Параметры:
// Задачи - СправочникСсылка.узЗадачи, Массив - задачи, в рамках которых рассчитываются показатели.
// Отказ - Булево - признак прерывания обработки проведения
//
Процедура ОтразитьСостояниеЗадачи(Задачи, Отказ, Очередь = Неопределено) Экспорт
Если Отказ Тогда
Возврат;
КонецЕсли;
Если ТипЗнч(Задачи) = Тип("Массив") Тогда
МассивСсылок = Задачи;
ИначеЕсли ТипЗнч(Задачи) = Тип("СправочникСсылка.узЗадачи") Тогда
МассивСсылок = Новый Массив;
МассивСсылок.Добавить(Задачи);
Иначе
Возврат;
КонецЕсли;
СтруктураПоиска = СтруктураПоискаПредыдущихСостояний();
ТаблицаСостоянийЗадач = ТаблицаСостоянийЗадач(МассивСсылок);
ТаблицаПредыдущихСостоянийЗадач = ТаблицаПредыдущихСостоянийЗадач(МассивСсылок);
Для Каждого СтрокаТаблицы Из ТаблицаСостоянийЗадач Цикл
ЗаполнитьЗначенияСвойств(СтруктураПоиска, СтрокаТаблицы);
МассивДействующихСостояний = ТаблицаПредыдущихСостоянийЗадач.НайтиСтроки(СтруктураПоиска);
СостояниеИзменено = НЕ Булево(МассивДействующихСостояний.Количество());
Если СостояниеИзменено Тогда
НаборЗаписей = РегистрыСведений.узСостояниеВзаимодействийПоЗадачам.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Задача.Установить(СтрокаТаблицы.Задача);
Если Не ЭтоПустаяЗапись(СтрокаТаблицы) Тогда
СтрокаНабора = НаборЗаписей.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаНабора, СтрокаТаблицы);
КонецЕсли;
Попытка
Если Очередь <> Неопределено Тогда
ОбновлениеИнформационнойБазы.ЗаписатьДанные(НаборЗаписей);
Иначе
НаборЗаписей.Записать(Истина);
КонецЕсли;
Исключение
ТекстСообщения = НСтр("ru = 'Не удалось отразить состояние взаимодействий по задаче: %Ссылка% по причине: %Причина%'");
ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Ссылка%", СтрокаТаблицы.Задача);
ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Причина%", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Предупреждение,
Метаданные.Справочники.узЗадачи, СтрокаТаблицы.Задача, ТекстСообщения);
КонецПопытки;
ИначеЕсли Очередь <> Неопределено Тогда
НаборЗаписей = РегистрыСведений.узСостояниеВзаимодействийПоЗадачам.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Задача.Установить(СтрокаТаблицы.Задача);
ОбновлениеИнформационнойБазы.ОтметитьВыполнениеОбработки(НаборЗаписей);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
Функция ТаблицаСостоянийЗадач(МассивЗадач)
ПакетЗапросов = Новый Массив;
ПакетЗапросов.Добавить(ТекстЗапросаКоличестваФайловЗадачи());
ПакетЗапросов.Добавить(ТекстЗапросаИнформацииОПисьмах("Входящее"));
ПакетЗапросов.Добавить(ТекстЗапросаИнформацииОПисьмах("Исходящее"));
ПакетЗапросов.Добавить(ТекстЗапросаСостоянияЗадач());
ТекстЗапроса = СтрСоединить(ПакетЗапросов, ОбщегоНазначения.РазделительПакетаЗапросов());
Запрос = Новый Запрос;
Запрос.Текст = ТекстЗапроса;
Запрос.УстановитьПараметр("МассивЗадач", МассивЗадач);
ТаблицаСостояний = Запрос.Выполнить().Выгрузить();
Возврат ТаблицаСостояний;
КонецФункции
Функция ТаблицаПредыдущихСостоянийЗадач(МассивЗадач)
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("МассивЗадач", МассивЗадач);
Запрос.Текст =
"ВЫБРАТЬ
| СостояниеВзаимодействий.Задача КАК Задача,
| СостояниеВзаимодействий.КоличествоПрисоединенныхФайлов КАК КоличествоПрисоединенныхФайлов,
| СостояниеВзаимодействий.КоличествоВходящихПисем КАК КоличествоВходящихПисем,
| СостояниеВзаимодействий.КоличествоИсходящихПисем КАК КоличествоИсходящихПисем,
| СостояниеВзаимодействий.ДатаПоследнегоВходящегоПисьма КАК ДатаПоследнегоВходящегоПисьма,
| СостояниеВзаимодействий.ДатаПоследнегоИсходящегоПисьма КАК ДатаПоследнегоИсходящегоПисьма,
| СостояниеВзаимодействий.КоличествоВложенийПисем КАК КоличествоВложенийПисем
|ИЗ
| РегистрСведений.узСостояниеВзаимодействийПоЗадачам КАК СостояниеВзаимодействий
|ГДЕ
| СостояниеВзаимодействий.Задача В(&МассивЗадач)";
Возврат Запрос.Выполнить().Выгрузить();
КонецФункции
Функция ТекстЗапросаКоличестваФайловЗадачи()
ТекстЗапроса =
"ВЫБРАТЬ
| ФайлыЗадач.ВладелецФайла КАК Задача,
| КОЛИЧЕСТВО(*) КАК Количество
|ПОМЕСТИТЬ ВтПрисоединенныеФайлы
|ИЗ
| ЗадачиПрисоединенныеФайлы КАК ФайлыЗадач
|ГДЕ
| ФайлыЗадач.ВладелецФайла В(&МассивЗадач)
| И &ЭтоГруппа = ЛОЖЬ
| И &ЭтоСлужебный = ЛОЖЬ
|
|СГРУППИРОВАТЬ ПО
| ФайлыЗадач.ВладелецФайла
|
|ИНДЕКСИРОВАТЬ ПО
| Задача";
ПустаяСсылка = Справочники.узЗадачи.ПустаяСсылка();
ИмяСправочникаФайлов = РаботаСФайламиСлужебный.ИмяСправочникаХраненияФайлов(ПустаяСсылка);
МетаданныеСправочникаФайлов = Метаданные.Справочники[ИмяСправочникаФайлов];
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ЗадачиПрисоединенныеФайлы",
МетаданныеСправочникаФайлов.ПолноеИмя());
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ЭтоГруппа",
?(МетаданныеСправочникаФайлов.Иерархический, "ФайлыЗадач.ЭтоГруппа", "ЛОЖЬ"));
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ЭтоСлужебный",
?(ОбщегоНазначения.ЕстьРеквизитОбъекта("Служебный", МетаданныеСправочникаФайлов), "ФайлыЗадач.Служебный", "ЛОЖЬ"));
Возврат ТекстЗапроса;
КонецФункции
Функция ТекстЗапросаИнформацииОПисьмах(НаправлениеПисьма)
ТекстЗапроса =
"ВЫБРАТЬ
| ВЫРАЗИТЬ(ПредметыВзаимодействий.Предмет КАК Справочник.узЗадачи) КАК Задача,
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ЭлектронноеПисьмо.Ссылка) КАК КоличествоПисем,
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВложенияПисьма.Ссылка) КАК КоличествоВложений,
| МАКСИМУМ(ЭлектронноеПисьмо.Дата) КАК ДатаПоследнегоПисьма
|ПОМЕСТИТЬ ВтВзаимодействие
|ИЗ
| РегистрСведений.ПредметыПапкиВзаимодействий КАК ПредметыВзаимодействий
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ДокументЭлектронноеПисьмо КАК ЭлектронноеПисьмо
| ПО ПредметыВзаимодействий.Взаимодействие = ЭлектронноеПисьмо.Ссылка
| ЛЕВОЕ СОЕДИНЕНИЕ ЭлектронноеПисьмоПрисоединенныеФайлы КАК ВложенияПисьма
| ПО ПредметыВзаимодействий.Взаимодействие = ВложенияПисьма.ВладелецФайла
| И &ЭтоГруппа = ЛОЖЬ
| И &ЭтоСлужебный = ЛОЖЬ
|ГДЕ
| ПредметыВзаимодействий.Предмет В(&МассивЗадач)
|
|СГРУППИРОВАТЬ ПО
| ПредметыВзаимодействий.Предмет
|
|ИНДЕКСИРОВАТЬ ПО
| Задача";
ИмяДокументаПисьма = "ЭлектронноеПисьмо" + НаправлениеПисьма;
ПустаяСсылка = Документы[ИмяДокументаПисьма].ПустаяСсылка();
ИмяСправочникаФайлов = РаботаСФайламиСлужебный.ИмяСправочникаХраненияФайлов(ПустаяСсылка);
МетаданныеСправочникаФайлов = Метаданные.Справочники[ИмяСправочникаФайлов];
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ВтВзаимодействие",
"ВтВзаимодействие" + НаправлениеПисьма);
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ДокументЭлектронноеПисьмо",
"Документ." + ИмяДокументаПисьма);
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ЭлектронноеПисьмо.Дата",
?(НаправлениеПисьма = "Входящее", "ЭлектронноеПисьмо.ДатаПолучения", "ЭлектронноеПисьмо.ДатаОтправления"));
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ЭлектронноеПисьмоПрисоединенныеФайлы",
МетаданныеСправочникаФайлов.ПолноеИмя());
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ЭтоГруппа",
?(МетаданныеСправочникаФайлов.Иерархический, "ВложенияПисьма.ЭтоГруппа", "ЛОЖЬ"));
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ЭтоСлужебный",
?(ОбщегоНазначения.ЕстьРеквизитОбъекта("Служебный", МетаданныеСправочникаФайлов), "ВложенияПисьма.Служебный", "ЛОЖЬ"));
Возврат ТекстЗапроса;
КонецФункции
Функция ТекстЗапросаСостоянияЗадач()
ТекстЗапроса =
"ВЫБРАТЬ
| СправочникЗадач.Ссылка КАК Задача,
| ЕСТЬNULL(ВтПрисоединенныеФайлы.Количество, 0) КАК КоличествоПрисоединенныхФайлов,
| ЕСТЬNULL(ВтВзаимодействиеВходящее.КоличествоПисем, 0) КАК КоличествоВходящихПисем,
| ЕСТЬNULL(ВтВзаимодействиеИсходящее.КоличествоПисем, 0) КАК КоличествоИсходящихПисем,
| ЕСТЬNULL(ВтВзаимодействиеВходящее.ДатаПоследнегоПисьма, ДАТАВРЕМЯ(1,1,1)) КАК ДатаПоследнегоВходящегоПисьма,
| ЕСТЬNULL(ВтВзаимодействиеИсходящее.ДатаПоследнегоПисьма, ДАТАВРЕМЯ(1,1,1)) КАК ДатаПоследнегоИсходящегоПисьма,
| ЕСТЬNULL(ВтВзаимодействиеВходящее.КоличествоВложений, 0) + ЕСТЬNULL(ВтВзаимодействиеИсходящее.КоличествоВложений, 0) КАК КоличествоВложенийПисем
|ИЗ
| Справочник.узЗадачи КАК СправочникЗадач
| ЛЕВОЕ СОЕДИНЕНИЕ ВтПрисоединенныеФайлы КАК ВтПрисоединенныеФайлы
| ПО СправочникЗадач.Ссылка = ВтПрисоединенныеФайлы.Задача
| ЛЕВОЕ СОЕДИНЕНИЕ ВтВзаимодействиеВходящее КАК ВтВзаимодействиеВходящее
| ПО СправочникЗадач.Ссылка = ВтВзаимодействиеВходящее.Задача
| ЛЕВОЕ СОЕДИНЕНИЕ ВтВзаимодействиеИсходящее КАК ВтВзаимодействиеИсходящее
| ПО СправочникЗадач.Ссылка = ВтВзаимодействиеИсходящее.Задача
|ГДЕ
| СправочникЗадач.Ссылка В(&МассивЗадач)";
Возврат ТекстЗапроса;
КонецФункции
Функция СтруктураПоискаПредыдущихСостояний()
СтруктураПоиска = Новый Структура;
МетаданныеРегистра = Метаданные.РегистрыСведений.узСостояниеВзаимодействийПоЗадачам;
Для каждого Поле Из МетаданныеРегистра.Измерения Цикл
СтруктураПоиска.Вставить(Поле.Имя);
КонецЦикла;
Для каждого Поле Из МетаданныеРегистра.Ресурсы Цикл
СтруктураПоиска.Вставить(Поле.Имя);
КонецЦикла;
Возврат СтруктураПоиска;
КонецФункции
Функция ЭтоПустаяЗапись(ЗаписьНабора)
Возврат ЗаписьНабора.КоличествоПрисоединенныхФайлов = 0
И ЗаписьНабора.КоличествоВходящихПисем = 0
И ЗаписьНабора.КоличествоИсходящихПисем = 0;
КонецФункции
#КонецОбласти
#КонецЕсли

View File

@ -0,0 +1,17 @@
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область ОбработчикиСобытий
Процедура ПередЗаписью(Отказ, Замещение)
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(ЭтотОбъект);
КонецПроцедуры
#КонецОбласти
#КонецЕсли

View File

@ -6507,6 +6507,65 @@
<value>true</value>
</right>
</object>
<object>
<name>InformationRegister.узСостояниеВзаимодействийПоЗадачам</name>
<right>
<name>Read</name>
<value>true</value>
</right>
<right>
<name>Update</name>
<value>true</value>
</right>
<right>
<name>View</name>
<value>true</value>
</right>
<right>
<name>Edit</name>
<value>true</value>
</right>
<right>
<name>TotalsControl</name>
<value>true</value>
</right>
<right>
<name>ReadDataHistory</name>
<value>true</value>
</right>
<right>
<name>ReadDataHistoryOfMissingData</name>
<value>true</value>
</right>
<right>
<name>UpdateDataHistory</name>
<value>true</value>
</right>
<right>
<name>UpdateDataHistoryOfMissingData</name>
<value>true</value>
</right>
<right>
<name>UpdateDataHistorySettings</name>
<value>true</value>
</right>
<right>
<name>UpdateDataHistoryVersionComment</name>
<value>true</value>
</right>
<right>
<name>ViewDataHistory</name>
<value>true</value>
</right>
<right>
<name>EditDataHistoryVersionComment</name>
<value>true</value>
</right>
<right>
<name>SwitchToDataHistoryVersion</name>
<value>true</value>
</right>
</object>
<object>
<name>DataProcessor.НастройкиПользователей.Command.НастройкиПользователя</name>
<right>

View File

@ -4335,6 +4335,17 @@
<value>true</value>
</right>
</object>
<object>
<name>InformationRegister.узСостояниеВзаимодействийПоЗадачам</name>
<right>
<name>Read</name>
<value>true</value>
</right>
<right>
<name>View</name>
<value>true</value>
</right>
</object>
<object>
<name>Catalog.узШаблоны</name>
<right>

View File

@ -4625,6 +4625,17 @@
<value>true</value>
</right>
</object>
<object>
<name>InformationRegister.узСостояниеВзаимодействийПоЗадачам</name>
<right>
<name>Read</name>
<value>true</value>
</right>
<right>
<name>View</name>
<value>true</value>
</right>
</object>
<object>
<name>Catalog.узШаблоны</name>
<right>

View File

@ -5145,6 +5145,17 @@
<value>true</value>
</right>
</object>
<object>
<name>InformationRegister.узСостояниеВзаимодействийПоЗадачам</name>
<right>
<name>Read</name>
<value>true</value>
</right>
<right>
<name>View</name>
<value>true</value>
</right>
</object>
<object>
<name>Catalog.узШаблоны</name>
<right>

View File

@ -124,6 +124,11 @@
<xr:Item xsi:type="xr:MDObjectRef">CommonCommand.узПрисоединенныеФайлыПисемПоЗадаче</xr:Item>
<xr:Item xsi:type="xr:MDObjectRef">Role.узПользовательОграничениеДоступаЧтение</xr:Item>
<xr:Item xsi:type="xr:MDObjectRef">Catalog.узГруппыДоступаЗадач</xr:Item>
<xr:Item xsi:type="xr:MDObjectRef">InformationRegister.узСостояниеВзаимодействийПоЗадачам</xr:Item>
<xr:Item xsi:type="xr:MDObjectRef">EventSubscription.узОбновитьСостояниеВзаимодействияПоЗадачеПриЗаписиФайла</xr:Item>
<xr:Item xsi:type="xr:MDObjectRef">EventSubscription.узОбновитьСостояниеВзаимодействияПоЗадачеПриЗаписиПредмета</xr:Item>
<xr:Item xsi:type="xr:MDObjectRef">EventSubscription.узОбновитьСостояниеВзаимодействияПоЗадачеПриЗаписиПисьма</xr:Item>
<xr:Item xsi:type="xr:MDObjectRef">EventSubscription.узОбновитьСостояниеВзаимодействияПоЗадачеПередЗаписьюПредмета</xr:Item>
<xr:Item xsi:type="xr:MDObjectRef">CommonModule.узРаботаСБуферомОбменаКлиент</xr:Item>
<xr:Item xsi:type="xr:MDObjectRef">CommonTemplate.узКомпонентаРаботыСБуферомОбмена</xr:Item>
</Content>