diff --git a/src/cf/Catalogs/узЗадачи.xml b/src/cf/Catalogs/узЗадачи.xml index f63fbbf63..b2306f9e1 100644 --- a/src/cf/Catalogs/узЗадачи.xml +++ b/src/cf/Catalogs/узЗадачи.xml @@ -2085,6 +2085,96 @@ Use + + + КоличествоЗадачЧекЛиста + + + ru + Количество задач чек-листа + + + + + xs:decimal + + 10 + 0 + Nonnegative + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + ForItem + DontIndex + Use + Use + + + + + КоличествоВыполненныхЗадачЧекЛиста + + + ru + Количество выполененных задач чек-листа + + + + + xs:decimal + + 10 + 0 + Nonnegative + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + ForItem + DontIndex + Use + Use + + diff --git a/src/cf/Catalogs/узЗадачи/Ext/ObjectModule.bsl b/src/cf/Catalogs/узЗадачи/Ext/ObjectModule.bsl index 8b77187dc..7676776d8 100644 --- a/src/cf/Catalogs/узЗадачи/Ext/ObjectModule.bsl +++ b/src/cf/Catalogs/узЗадачи/Ext/ObjectModule.bsl @@ -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 ДополнительныеСвойства.Удалить("СобытияВИстории"); + КонецПроцедуры Процедура СформироватьЗаписиВРССвязанныеЗадачи(Отказ) Экспорт diff --git a/src/cf/Catalogs/узЗадачи/Forms/ФормаЭлемента/Ext/Form/Module.bsl b/src/cf/Catalogs/узЗадачи/Forms/ФормаЭлемента/Ext/Form/Module.bsl index bbbc42574..c353637e4 100644 --- a/src/cf/Catalogs/узЗадачи/Forms/ФормаЭлемента/Ext/Form/Module.bsl +++ b/src/cf/Catalogs/узЗадачи/Forms/ФормаЭлемента/Ext/Form/Module.bsl @@ -8,6 +8,11 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + //+ УрянскийД 2020-06-22 (начало) + ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(Объект, ЭтотОбъект); + //- УрянскийД 2020-06-22 (окончание) + // СтандартныеПодсистемы.ВерсионированиеОбъектов ВерсионированиеОбъектов.ПриСозданииНаСервере(ЭтотОбъект); // Конец СтандартныеПодсистемы.ВерсионированиеОбъектов diff --git a/src/cf/CommonModules/узОбновлениеИнформационнойБазы/Ext/Module.bsl b/src/cf/CommonModules/узОбновлениеИнформационнойБазы/Ext/Module.bsl index 887f86a40..5ce1e0d0d 100644 --- a/src/cf/CommonModules/узОбновлениеИнформационнойБазы/Ext/Module.bsl +++ b/src/cf/CommonModules/узОбновлениеИнформационнойБазы/Ext/Module.bsl @@ -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); + + Если ЗначениеЗаполнено(МассивСсылок) Тогда + + ОбновлениеИнформационнойБазы.ОтметитьКОбработке(ПараметрыОбновления, МассивСсылок); + + Запрос.УстановитьПараметр("Граница", МассивСсылок[МассивСсылок.ВГраница()]); + + КонецЕсли; + + ЕстьДанныеДляОбработки = Не (МассивСсылок.Количество() < РазмерПорции); + + КонецЦикла; + +КонецПроцедуры + //#Область ПрограммныйИнтерфейс diff --git a/src/cf/CommonModules/узОбщийМодульСервер/Ext/Module.bsl b/src/cf/CommonModules/узОбщийМодульСервер/Ext/Module.bsl index 64e2ef678..8887eb10a 100644 --- a/src/cf/CommonModules/узОбщийМодульСервер/Ext/Module.bsl +++ b/src/cf/CommonModules/узОбщийМодульСервер/Ext/Module.bsl @@ -1136,3 +1136,126 @@ ПолеВвода.Вид = ВидПоляФормы.ПолеВвода; КонецПроцедуры + +//+ #212 Урянский Д.В. 2020-03-08 +Процедура ОбновитьСостояниеВзаимодействияПоЗадачеПриЗаписиФайла(Источник, Отказ) Экспорт + + Если Источник.ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + + Если ТипЗнч(Источник.ВладелецФайла) = Тип("СправочникСсылка.узЗадачи") Тогда + + РегистрыСведений.узСостояниеВзаимодействийПоЗадачам.ОтразитьСостояниеЗадачи(Источник.ВладелецФайла, Отказ); + + ИначеЕсли ВзаимодействияКлиентСервер.ЯвляетсяПрисоединеннымФайломВзаимодействий(Источник.Ссылка) Тогда + + ПредметВзаимодействия = Взаимодействия.ПолучитьЗначениеПредмета(Источник.ВладелецФайла); + + Если ТипЗнч(ПредметВзаимодействия) = Тип("СправочникСсылка.узЗадачи") Тогда + + РегистрыСведений.узСостояниеВзаимодействийПоЗадачам.ОтразитьСостояниеЗадачи(ПредметВзаимодействия, Отказ); + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +//+ #212 Урянский Д.В. 2020-03-08 +Процедура ОбновитьСостояниеВзаимодействияПоЗадачеПриЗаписиПисьма(Источник, Отказ) Экспорт + + Если Источник.ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + + Если Источник.ЭтоНовый() Тогда + Возврат; // предмет письма (задача) еще не записан + КонецЕсли; + + Если ТипЗнч(Источник) = Тип("ДокументОбъект.ЭлектронноеПисьмоВходящее") Тогда + ДатаВзаимодействия = Источник.ДатаПолучения; + ИначеЕсли ТипЗнч(Источник) = Тип("ДокументОбъект.ЭлектронноеПисьмоИсходящее") Тогда + ДатаВзаимодействия = Источник.ДатаОтправления; + Иначе + ДатаВзаимодействия = Неопределено; + КонецЕсли; + + Если Не ЗначениеЗаполнено(ДатаВзаимодействия) Тогда + Возврат; + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + + Предмет = Взаимодействия.ПолучитьЗначениеПредмета(Источник.Ссылка); + + Если ТипЗнч(Предмет) = Тип("СправочникСсылка.узЗадачи") Тогда + РегистрыСведений.узСостояниеВзаимодействийПоЗадачам.ОтразитьСостояниеЗадачи(Предмет, Отказ); + КонецЕсли; + +КонецПроцедуры + +//+ #212 Урянский Д.В. 2020-03-08 +Процедура ОбновитьСостояниеВзаимодействияПоЗадачеПередЗаписьюПредмета(Источник, Отказ, Замещение) Экспорт + + Если Источник.ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + + Если Источник.Отбор.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + + Взаимодействие = Источник.Отбор.Взаимодействие.Значение; + Предмет = Взаимодействия.ПолучитьЗначениеПредмета(Взаимодействие); + + Если ТипЗнч(Предмет) = Тип("СправочникСсылка.узЗадачи") Тогда + Источник.ДополнительныеСвойства.Вставить("ЗадачаДляОбновленияСостояния", Предмет); + КонецЕсли; + +КонецПроцедуры + +//+ #212 Урянский Д.В. 2020-03-08 +Процедура ОбновитьСостояниеВзаимодействияПоЗадачеПриЗаписиПредмета(Источник, Отказ, Замещение) Экспорт + + Если Источник.ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + + Если Источник.Отбор.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + МассивЗадач = Новый Массив; + + Для каждого Запись Из Источник Цикл + Если ТипЗнч(Запись.Предмет) = Тип("СправочникСсылка.узЗадачи") Тогда + МассивЗадач.Добавить(Запись.Предмет); + КонецЕсли; + КонецЦикла; + + СтараяЗадача = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Источник.ДополнительныеСвойства, "ЗадачаДляОбновленияСостояния"); + + Если ЗначениеЗаполнено(СтараяЗадача) Тогда + + ИндексЗадачи = МассивЗадач.Найти(СтараяЗадача); + Если ИндексЗадачи = Неопределено Тогда + // Изменили предмет взаимодействия: нужен расчет как для нового, так и для старого предмета. + МассивЗадач.Добавить(СтараяЗадача); + Иначе + // Предмет взаимодействия не менялся: расчет не нужен. + МассивЗадач.Удалить(ИндексЗадачи); + КонецЕсли; + + КонецЕсли; + + Если МассивЗадач.Количество() <> 0 Тогда + УстановитьПривилегированныйРежим(Истина); + РегистрыСведений.узСостояниеВзаимодействийПоЗадачам.ОтразитьСостояниеЗадачи(МассивЗадач, Отказ); + КонецЕсли; + +КонецПроцедуры diff --git a/src/cf/Configuration.xml b/src/cf/Configuration.xml index 73e81a22c..a0cf1237c 100644 --- a/src/cf/Configuration.xml +++ b/src/cf/Configuration.xml @@ -49,7 +49,7 @@ Role.ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок Управление задачами - 1.0.5.002 + 1.0.5.003 false true @@ -1089,6 +1089,10 @@ СвойстваПередУдалениемСсылочногоОбъекта СкопироватьРеквизитыВерсииФайловВФайл СоздатьПредопределенныеПапкиЭлектронныхПисем + узОбновитьСостояниеВзаимодействияПоЗадачеПриЗаписиФайла + узОбновитьСостояниеВзаимодействияПоЗадачеПередЗаписьюПредмета + узОбновитьСостояниеВзаимодействияПоЗадачеПриЗаписиПисьма + узОбновитьСостояниеВзаимодействияПоЗадачеПриЗаписиПредмета узПереопределитьПолучаемуюФормуПрисоединенногоФайла узПроверитьНаличиеЗаметокПоПредмету узУстановитьПометкуУдаленияПрисоединенныхФайловДокументов @@ -1773,6 +1777,7 @@ узПроксиСерверы узСвязанныеЗадачи узСловарь + узСостояниеВзаимодействийПоЗадачам узСпринтыЗадач узСтатусыЗадач узФактПоЗадачам diff --git a/src/cf/EventSubscriptions/узОбновитьСостояниеВзаимодействияПоЗадачеПередЗаписьюПредмета.xml b/src/cf/EventSubscriptions/узОбновитьСостояниеВзаимодействияПоЗадачеПередЗаписьюПредмета.xml new file mode 100644 index 000000000..d233dffcf --- /dev/null +++ b/src/cf/EventSubscriptions/узОбновитьСостояниеВзаимодействияПоЗадачеПередЗаписьюПредмета.xml @@ -0,0 +1,20 @@ + + + + + узОбновитьСостояниеВзаимодействияПоЗадачеПередЗаписьюПредмета + + + ru + Обновить состояние взаимодействия по задаче перед записью предмета + + + + + cfg:InformationRegisterRecordSet.ПредметыПапкиВзаимодействий + + BeforeWrite + CommonModule.узОбщийМодульСервер.ОбновитьСостояниеВзаимодействияПоЗадачеПередЗаписьюПредмета + + + \ No newline at end of file diff --git a/src/cf/EventSubscriptions/узОбновитьСостояниеВзаимодействияПоЗадачеПриЗаписиПисьма.xml b/src/cf/EventSubscriptions/узОбновитьСостояниеВзаимодействияПоЗадачеПриЗаписиПисьма.xml new file mode 100644 index 000000000..5fe49f237 --- /dev/null +++ b/src/cf/EventSubscriptions/узОбновитьСостояниеВзаимодействияПоЗадачеПриЗаписиПисьма.xml @@ -0,0 +1,21 @@ + + + + + узОбновитьСостояниеВзаимодействияПоЗадачеПриЗаписиПисьма + + + ru + Обновить состояние взаимодействия по задаче при записи письма + + + + + cfg:DocumentObject.ЭлектронноеПисьмоВходящее + cfg:DocumentObject.ЭлектронноеПисьмоИсходящее + + OnWrite + CommonModule.узОбщийМодульСервер.ОбновитьСостояниеВзаимодействияПоЗадачеПриЗаписиПисьма + + + \ No newline at end of file diff --git a/src/cf/EventSubscriptions/узОбновитьСостояниеВзаимодействияПоЗадачеПриЗаписиПредмета.xml b/src/cf/EventSubscriptions/узОбновитьСостояниеВзаимодействияПоЗадачеПриЗаписиПредмета.xml new file mode 100644 index 000000000..7bb8041c7 --- /dev/null +++ b/src/cf/EventSubscriptions/узОбновитьСостояниеВзаимодействияПоЗадачеПриЗаписиПредмета.xml @@ -0,0 +1,20 @@ + + + + + узОбновитьСостояниеВзаимодействияПоЗадачеПриЗаписиПредмета + + + ru + Обновить состояние взаимодействия по задаче при записи предмета + + + + + cfg:InformationRegisterRecordSet.ПредметыПапкиВзаимодействий + + OnWrite + CommonModule.узОбщийМодульСервер.ОбновитьСостояниеВзаимодействияПоЗадачеПриЗаписиПредмета + + + \ No newline at end of file diff --git a/src/cf/EventSubscriptions/узОбновитьСостояниеВзаимодействияПоЗадачеПриЗаписиФайла.xml b/src/cf/EventSubscriptions/узОбновитьСостояниеВзаимодействияПоЗадачеПриЗаписиФайла.xml new file mode 100644 index 000000000..5ce787547 --- /dev/null +++ b/src/cf/EventSubscriptions/узОбновитьСостояниеВзаимодействияПоЗадачеПриЗаписиФайла.xml @@ -0,0 +1,20 @@ + + + + + узОбновитьСостояниеВзаимодействияПоЗадачеПриЗаписиФайла + + + ru + Обновить состояние взаимодействия по задаче при записи файла + + + + + cfg:DefinedType.ПрисоединенныйФайлОбъект + + OnWrite + CommonModule.узОбщийМодульСервер.ОбновитьСостояниеВзаимодействияПоЗадачеПриЗаписиФайла + + + \ No newline at end of file diff --git a/src/cf/ExchangePlans/ОбновлениеИнформационнойБазы/Ext/Content.xml b/src/cf/ExchangePlans/ОбновлениеИнформационнойБазы/Ext/Content.xml index 5e094f98d..f2bf81627 100644 --- a/src/cf/ExchangePlans/ОбновлениеИнформационнойБазы/Ext/Content.xml +++ b/src/cf/ExchangePlans/ОбновлениеИнформационнойБазы/Ext/Content.xml @@ -208,6 +208,10 @@ InformationRegister.НастройкиСинхронизацииФайлов Deny + + Catalog.узЗадачи + Deny + Catalog.ВидыПроверок Deny @@ -724,6 +728,10 @@ Catalog.ЗначенияСвойствОбъектов Deny + + InformationRegister.узСостояниеВзаимодействийПоЗадачам + Deny + InformationRegister.ДатыПоследнейЗагрузкиПочтовыхСообщений Deny diff --git a/src/cf/InformationRegisters/узСостояниеВзаимодействийПоЗадачам.xml b/src/cf/InformationRegisters/узСостояниеВзаимодействийПоЗадачам.xml new file mode 100644 index 000000000..00e317129 --- /dev/null +++ b/src/cf/InformationRegisters/узСостояниеВзаимодействийПоЗадачам.xml @@ -0,0 +1,391 @@ + + + + + + d179ab20-4a99-402b-b399-0998100401a7 + 59f274c4-5ad6-4fa0-84c2-15e44535a696 + + + f170d1b9-b6fe-44d9-9a91-ea9a70e77aac + a05b23e8-2e1d-4553-8a61-c74773c7fc9c + + + 44e16ca9-548b-47a8-9a69-04511a7454e0 + 66aff692-2e20-4096-af85-d108e3f7831d + + + eec26afa-4dfc-4711-8a80-74dfac1186a1 + 792c31e0-d61e-43dd-88b0-a5a16bc9f338 + + + dc975ee1-90e5-43b7-b1f3-0113521d3be0 + cbdbf75f-5eaf-469a-bba8-96708bea5bef + + + 4f23fcd6-5a93-4336-b436-89a5a5bd156b + 1e043485-3170-4281-81c0-e3639915691f + + + ef30312d-113a-4256-af60-625232954fa5 + fe0bebdb-d767-4421-8299-0ad4ee7f296d + + + + узСостояниеВзаимодействийПоЗадачам + + + ru + Состояние взаимодействий по задачам + + + + false + InDialog + + + + + Nonperiodical + Independent + false + false + Managed + DontUse + false + false + + + + + + DontUse + false + false + + + + + КоличествоПрисоединенныхФайлов + + + ru + Количество присоединенных файлов + + + + + xs:decimal + + 10 + 0 + Nonnegative + + + false + + + + + ru + Количество файлов, присоединенных непосредственно к задаче + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + КоличествоВходящихПисем + + + ru + Количество входящих писем + + + + + xs:decimal + + 10 + 0 + Nonnegative + + + false + + + + + ru + Количество связанных с задачей входящих электронных писем + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + КоличествоИсходящихПисем + + + ru + Количество исходящих писем + + + + + xs:decimal + + 10 + 0 + Nonnegative + + + false + + + + + ru + Количество связанных с задачей исходящих электронных писем + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + ДатаПоследнегоВходящегоПисьма + + + ru + Дата последнего входящего письма + + + + + xs:dateTime + + DateTime + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + ДатаПоследнегоИсходящегоПисьма + + + ru + Дата последнего исходящего письма + + + + + xs:dateTime + + DateTime + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + КоличествоВложенийПисем + + + ru + Количество вложений писем + + + + + xs:decimal + + 10 + 0 + Nonnegative + + + false + + + + + ru + Количество файлов, прикрепленных к связанным с задачей электронным письмам + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + Задача + + + ru + Задача + + + + + cfg:CatalogRef.узЗадачи + + false + + + + false + + false + false + + + true + + ShowError + Items + + + Auto + Auto + + + Auto + true + true + true + DontIndex + Use + Use + + + + + \ No newline at end of file diff --git a/src/cf/InformationRegisters/узСостояниеВзаимодействийПоЗадачам/Ext/ManagerModule.bsl b/src/cf/InformationRegisters/узСостояниеВзаимодействийПоЗадачам/Ext/ManagerModule.bsl new file mode 100644 index 000000000..b6af91d14 --- /dev/null +++ b/src/cf/InformationRegisters/узСостояниеВзаимодействийПоЗадачам/Ext/ManagerModule.bsl @@ -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; + +КонецФункции + +#КонецОбласти + +#КонецЕсли diff --git a/src/cf/InformationRegisters/узСостояниеВзаимодействийПоЗадачам/Ext/RecordSetModule.bsl b/src/cf/InformationRegisters/узСостояниеВзаимодействийПоЗадачам/Ext/RecordSetModule.bsl new file mode 100644 index 000000000..bc5fed613 --- /dev/null +++ b/src/cf/InformationRegisters/узСостояниеВзаимодействийПоЗадачам/Ext/RecordSetModule.bsl @@ -0,0 +1,17 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ОбработчикиСобытий + +Процедура ПередЗаписью(Отказ, Замещение) + + Если ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + + ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(ЭтотОбъект); + +КонецПроцедуры + +#КонецОбласти + +#КонецЕсли diff --git a/src/cf/Roles/узПолныеПрава/Ext/Rights.xml b/src/cf/Roles/узПолныеПрава/Ext/Rights.xml index 17e96a0b3..3445f2011 100644 --- a/src/cf/Roles/узПолныеПрава/Ext/Rights.xml +++ b/src/cf/Roles/узПолныеПрава/Ext/Rights.xml @@ -6507,6 +6507,65 @@ true + + InformationRegister.узСостояниеВзаимодействийПоЗадачам + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + TotalsControl + true + + + ReadDataHistory + true + + + ReadDataHistoryOfMissingData + true + + + UpdateDataHistory + true + + + UpdateDataHistoryOfMissingData + true + + + UpdateDataHistorySettings + true + + + UpdateDataHistoryVersionComment + true + + + ViewDataHistory + true + + + EditDataHistoryVersionComment + true + + + SwitchToDataHistoryVersion + true + + DataProcessor.НастройкиПользователей.Command.НастройкиПользователя diff --git a/src/cf/Roles/узПользователь/Ext/Rights.xml b/src/cf/Roles/узПользователь/Ext/Rights.xml index 414c9a82d..6e93c2f0e 100644 --- a/src/cf/Roles/узПользователь/Ext/Rights.xml +++ b/src/cf/Roles/узПользователь/Ext/Rights.xml @@ -4335,6 +4335,17 @@ true + + InformationRegister.узСостояниеВзаимодействийПоЗадачам + + Read + true + + + View + true + + Catalog.узШаблоны diff --git a/src/cf/Roles/узПользовательОграничениеДоступаИзменение/Ext/Rights.xml b/src/cf/Roles/узПользовательОграничениеДоступаИзменение/Ext/Rights.xml index 48a1a3425..074217fe3 100644 --- a/src/cf/Roles/узПользовательОграничениеДоступаИзменение/Ext/Rights.xml +++ b/src/cf/Roles/узПользовательОграничениеДоступаИзменение/Ext/Rights.xml @@ -4625,6 +4625,17 @@ true + + InformationRegister.узСостояниеВзаимодействийПоЗадачам + + Read + true + + + View + true + + Catalog.узШаблоны diff --git a/src/cf/Roles/узПользовательОграничениеДоступаЧтение/Ext/Rights.xml b/src/cf/Roles/узПользовательОграничениеДоступаЧтение/Ext/Rights.xml index 164628bb1..f1fbacda8 100644 --- a/src/cf/Roles/узПользовательОграничениеДоступаЧтение/Ext/Rights.xml +++ b/src/cf/Roles/узПользовательОграничениеДоступаЧтение/Ext/Rights.xml @@ -5145,6 +5145,17 @@ true + + InformationRegister.узСостояниеВзаимодействийПоЗадачам + + Read + true + + + View + true + + Catalog.узШаблоны diff --git a/src/cf/Subsystems/узУправлениеЗадачами.xml b/src/cf/Subsystems/узУправлениеЗадачами.xml index e9532227b..9dde11705 100644 --- a/src/cf/Subsystems/узУправлениеЗадачами.xml +++ b/src/cf/Subsystems/узУправлениеЗадачами.xml @@ -124,6 +124,11 @@ CommonCommand.узПрисоединенныеФайлыПисемПоЗадаче Role.узПользовательОграничениеДоступаЧтение Catalog.узГруппыДоступаЗадач + InformationRegister.узСостояниеВзаимодействийПоЗадачам + EventSubscription.узОбновитьСостояниеВзаимодействияПоЗадачеПриЗаписиФайла + EventSubscription.узОбновитьСостояниеВзаимодействияПоЗадачеПриЗаписиПредмета + EventSubscription.узОбновитьСостояниеВзаимодействияПоЗадачеПриЗаписиПисьма + EventSubscription.узОбновитьСостояниеВзаимодействияПоЗадачеПередЗаписьюПредмета CommonModule.узРаботаСБуферомОбменаКлиент CommonTemplate.узКомпонентаРаботыСБуферомОбмена