Вашему вниманию предлагается моя версия текста общего модуля «ОбзорЗадачВызовСервераПереопределяемый» для конфигурации 1С:Документооборот.
Задача:
Пользователям необходим просмотр полной истории выполнения всех подчинённых бизнес-процессов(всего "дерева") из задачи исполнителя.
Решение:
Если есть подчиненные или текущий процесс является подчиненным, тогда выводим историю выполнения всего "дерева" бизнес-процессов в обратном хронологическом порядке.
Заменить текст общего модуля "ОбзорЗадачВызовСервераПереопределяемый".
ОбзорЗадачВызовСервераПереопределяемый
////////////////////////////////////////////////////////////////////////////////
// Обзор задач вызов сервера переопределяемый: Содержит переопределяемые процедуры
// по формированию HTML представления задач.
//
////////////////////////////////////////////////////////////////////////////////
#Область ПрограммныйИнтерфейс
// Возвращает текст HTML для показа обзора процесса Исполнение
//
// Параметры:
// Задача - ЗадачаСсылка.ЗадачаИсполнителя
//
Функция ПолучитьОбзорЗадачи(Задача) Экспорт
// Было
//HTMLТекст = "";
//
//Возврат HTMLТекст;
////////////////////////////////////////////////////////////////////////////////////
//Романов И.В. 15.11.2024 10:21:50
////////////////////////////////////////////////////////////////////////////////////
// КопиПаста(ОбзорЗадачВызовСервера.ПолучитьОбзорЗадачи()) Начало
////////////////////////////////////////////////////////////////////////////////////
// Формируем основное представление процесса
HTMLТекст = "<html>
|<head>
|<style type=""text/css"">
| body {
| overflow: auto;
| margin-top: 2px;
| margin-left: 2px;
| margin-right: 2px;
| font-family: Arial;
| font-size: 10pt;}
| table {
| width: 100%;
| font-family: Arial;
| font-size: 10pt;
| border: 0px solid;}
| td {vertical-align: top;}
| a:link {
| color: #006699; text-decoration: none;}
| a:visited {
| color: #006699; text-decoration: none;}
| a:hover {
| color: #006699; text-decoration: underline;}
| p {
| margin-top: 7px;}
| img {border: 0px;}
|</style>
|<body>";
СостояниеВыполненияЗадачи = РегистрыСведений.ЗадачиДляВыполнения.СостояниеВыполненияЗадачи(Задача.Ссылка);
// Состояние процесса и результат выполнения задачи
Если Задача.СостояниеБизнесПроцесса = Перечисления.СостоянияБизнесПроцессов.Прерван Тогда
ПричинаПрерывания = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(
Задача.Ссылка, "БизнесПроцесс.ПричинаПрерывания");
Если ПустаяСтрока(ПричинаПрерывания) Тогда
ПричинаПрерывания = НСтр("ru = 'Задача прервана'");
Иначе
ПричинаПрерывания = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Задача прервана: %1'"),
ПричинаПрерывания);
КонецЕсли;
HTMLТекст = HTMLТекст + "<table bgcolor=#F0F0F0><tr>";
HTMLТекст = HTMLТекст + "<td width=20>";
ОбзорОбъектовКлиентСервер.ДобавитьКартинку(
HTMLТекст, БиблиотекаКартинок.ЗнакПрерванПроцесс, "ПоказатьПричинуПрерыванияПроцесса");
HTMLТекст = HTMLТекст + "</td>";
HTMLТекст = HTMLТекст + "<td>";
HTMLТекст = HTMLТекст + СтрШаблон(
"<A href=ПоказатьПричинуПрерыванияПроцесса>%1</A>",
РаботаС_HTML.ЗаменитьСпецСимволыHTML(ПричинаПрерывания));
HTMLТекст = HTMLТекст + "</td>";
HTMLТекст = HTMLТекст + "</tr></table>";
HTMLТекст = HTMLТекст + "<p>";
ИначеЕсли Задача.СостояниеБизнесПроцесса = Перечисления.СостоянияБизнесПроцессов.Остановлен Тогда
HTMLТекст = HTMLТекст + "<table bgcolor=#F0F0F0><tr>";
HTMLТекст = HTMLТекст + "<td width=20> ";
ОбзорОбъектовКлиентСервер.ДобавитьКартинку(HTMLТекст, БиблиотекаКартинок.ЗнакПауза);
HTMLТекст = HTMLТекст + "</td>";
HTMLТекст = HTMLТекст + "<td>";
ОбзорОбъектовКлиентСервер.ДобавитьЗначение(HTMLТекст, НСтр("ru = 'Задача остановлена'"), "");
HTMLТекст = HTMLТекст + "</td>";
HTMLТекст = HTMLТекст + "</tr></table>";
HTMLТекст = HTMLТекст + "<p>";
ИначеЕсли СостояниеВыполненияЗадачи.СостояниеВыполнения = Перечисления.СостоянияЗадачДляВыполнения.ВыполнениеОтменено Тогда
HTMLТекст = HTMLТекст + "<table bgcolor=#F0F0F0><tr>";
HTMLТекст = HTMLТекст + "<td width=20>";
ОбзорОбъектовКлиентСервер.ДобавитьКартинку(
HTMLТекст, БиблиотекаКартинок.Предупреждение, "ПоказатьПричинуОтменыВыполнения");
HTMLТекст = HTMLТекст + "</td>";
HTMLТекст = HTMLТекст + "<td>";
ПричинаОтменыВыполненияHTML = "";
ОбзорОбъектовКлиентСервер.ДобавитьЗначение(
ПричинаОтменыВыполненияHTML,
СостояниеВыполненияЗадачи.ПричинаОтменыВыполнения,
"FF0000");
HTMLТекст = HTMLТекст + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
"<A href=ПоказатьПричинуОтменыВыполнения>%1</A>", ПричинаОтменыВыполненияHTML);
HTMLТекст = HTMLТекст + "</td>";
HTMLТекст = HTMLТекст + "</tr></table>";
HTMLТекст = HTMLТекст + "<p>";
ИначеЕсли СостояниеВыполненияЗадачи.СостояниеВыполнения = Перечисления.СостоянияЗадачДляВыполнения.ГотоваКВыполнению Тогда
HTMLТекст = HTMLТекст + "<table bgcolor=#F0F0F0><tr>";
HTMLТекст = HTMLТекст + "<td width=20> ";
ОбзорОбъектовКлиентСервер.ДобавитьКартинку(HTMLТекст, БиблиотекаКартинок.СтартБизнесПроцесса);
HTMLТекст = HTMLТекст + "</td>";
HTMLТекст = HTMLТекст + "<td>";
ОбзорОбъектовКлиентСервер.ДобавитьЗначение(HTMLТекст,
НСтр("ru = 'Задача находится в очереди для выполнения. Выполнение задачи произойдет автоматически в ближайшее время.'"), "");
HTMLТекст = HTMLТекст + "</td>";
HTMLТекст = HTMLТекст + "</tr></table>";
HTMLТекст = HTMLТекст + "<p>";
ИначеЕсли Задача.Выполнена Тогда
МетаданныеПроцесса = ОбщегоНазначения.МенеджерОбъектаПоСсылке(Задача.БизнесПроцесс);
ПредставлениеРезультатаЗадачи = МетаданныеПроцесса.ПредставлениеРезультатаЗадачи(Задача);
РезультатВыполненияЗадачи = РегистрыСведений.
РезультатыВыполненияПроцессовИЗадач.РезультатВыполненияПоОбъекту(Задача.Ссылка);
Если РезультатВыполненияЗадачи =
Перечисления.ВариантыВыполненияПроцессовИЗадач.Положительно Тогда
Картинка = БиблиотекаКартинок.РезультатВыполненияПроцессовИЗадач_Положительный;
ЦветТекста = "#008000";
ИначеЕсли РезультатВыполненияЗадачи =
Перечисления.ВариантыВыполненияПроцессовИЗадач.Отрицательно Тогда
Картинка = БиблиотекаКартинок.РезультатВыполненияПроцессовИЗадач_Отрицательный;
ЦветТекста = "#B22222";
ИначеЕсли РезультатВыполненияЗадачи = Перечисления.
ВариантыВыполненияПроцессовИЗадач.ПоложительноСЗамечаниями Тогда
Картинка = БиблиотекаКартинок.РезультатВыполненияПроцессовИЗадач_ПоложительныйСЗамечаниями;
ЦветТекста = "#008000";
Иначе
Картинка = БиблиотекаКартинок.РезультатВыполненияПроцессовИЗадач;
ЦветТекста = "";
КонецЕсли;
HTMLТекст = HTMLТекст + "<table bgcolor=#F0F0F0><tr>";
HTMLТекст = HTMLТекст + "<td width=20>";
ОбзорОбъектовКлиентСервер.ДобавитьКартинку(HTMLТекст, Картинка);
HTMLТекст = HTMLТекст + "</td>";
HTMLТекст = HTMLТекст + "<td>";
ОбзорОбъектовКлиентСервер.ДобавитьЗначение(HTMLТекст, ПредставлениеРезультатаЗадачи, ЦветТекста);
HTMLТекст = HTMLТекст + "</td>";
HTMLТекст = HTMLТекст + "</tr></table>";
HTMLТекст = HTMLТекст + "<p>";
КонецЕсли;
HTMLТекст = HTMLТекст + "<table><tr>";
HTMLТекст = HTMLТекст + "<td>";
// Наименование
HTMLТекст = HTMLТекст + "<B>";
ОбзорОбъектовКлиентСервер.ДобавитьЗначение(HTMLТекст, Задача.Наименование, "");
HTMLТекст = HTMLТекст + "<br>";
HTMLТекст = HTMLТекст + "</B>";
//было
//ПредметДокумент = ПолучитьОсновнойПредметДокумент(Задача.Предметы);
//стало
ПредметДокумент = ОбзорЗадачВызовСервера.ПолучитьОсновнойПредметДокумент(Задача.Предметы);
Если ЗначениеЗаполнено(ПредметДокумент) Тогда
//
ОбзорПредмета = ОбзорЗадачВызовСервера.ПолучитьОбзорПредметаЗадачи(ПредметДокумент);
Если Не ПустаяСтрока(ОбзорПредмета) Тогда
HTMLТекст = HTMLТекст + "<p>" + ОбзорПредмета + "</p>";
КонецЕсли;
КонецЕсли;
// Описание
Если ЗначениеЗаполнено(Задача.Описание) Тогда
HTMLТекст = HTMLТекст + "<p>";
ОписаниеЗадачиHTML = "";
ОбзорОбъектовКлиентСервер.ДобавитьРеквизит(ОписаниеЗадачиHTML, "", Задача.Описание);
ОписаниеЗадачиHTML = СтрЗаменить(ОписаниеЗадачиHTML, Символы.Таб, " ");
ОписаниеЗадачиHTML = СтрЗаменить(ОписаниеЗадачиHTML, Символы.ПС, "<br>");
HTMLТекст = HTMLТекст + ОписаниеЗадачиHTML;
КонецЕсли;
// Важность
Если Задача.Важность = Перечисления.ВариантыВажностиЗадачи.Высокая Тогда
Важность = НСтр("ru = 'Высокая'");
ИначеЕсли Задача.Важность = Перечисления.ВариантыВажностиЗадачи.Обычная Тогда
Важность = НСтр("ru = 'Обычная'");
ИначеЕсли Задача.Важность = Перечисления.ВариантыВажностиЗадачи.Низкая Тогда
Важность = НСтр("ru = 'Низкая'");
КонецЕсли;
HTMLТекст = HTMLТекст + "<p>";
ОбзорОбъектовКлиентСервер.ДобавитьРеквизит(HTMLТекст, НСтр("ru = 'Важность: '"), Важность);
// Исполнитель
HTMLТекст = HTMLТекст + "<p>";
ОбзорОбъектовКлиентСервер.ДобавитьПодпись(HTMLТекст, НСтр("ru = 'Кому:'"));
ТекущийПользователь = ПользователиКлиентСервер.ТекущийПользователь();
ИсполнителиЗадачПользователя = БизнесПроцессыИЗадачиСервер.
ИсполнителиЗадачПользователя(ТекущийПользователь);
// Признак ролевой/делегированной задачи
ЗадачаДелегированаТекущемуПользователю =
РегистрыСведений.ИсполнителиРолейИДелегаты.ИсполнительЯвляетсяДелегатом(
Задача.ТекущийИсполнитель,
ТекущийПользователь,
"ПроцессыИЗадачи");
Если ЗадачаДелегированаТекущемуПользователю Тогда
ОбзорОбъектовКлиентСервер.ДобавитьКартинку(HTMLТекст, БиблиотекаКартинок.ДелегированнаяЗадача);
HTMLТекст = HTMLТекст + " ";
ИначеЕсли ТипЗнч(Задача.ТекущийИсполнитель) = Тип("СправочникСсылка.ПолныеРоли") Тогда
ОбзорОбъектовКлиентСервер.ДобавитьКартинку(HTMLТекст, БиблиотекаКартинок.РолеваяЗадача);
HTMLТекст = HTMLТекст + " ";
КонецЕсли;
Если НЕ Задача.Исполнитель.Пустая() Тогда
ОбзорОбъектовКлиентСервер.ДобавитьЗначение(HTMLТекст, Задача.Исполнитель, "");
Иначе
ИсполнительСтрокой = Строка(Задача.РольИсполнителя);
HTMLТекст = HTMLТекст + СтрШаблон(
"<A href=v8doc:%1>%2</A>",
ПолучитьНавигационнуюСсылку(Задача.РольИсполнителя),
РаботаС_HTML.ЗаменитьСпецСимволыHTML(Строка(ИсполнительСтрокой)));
КонецЕсли;
HTMLТекст = HTMLТекст + "<br>";
// Срок
Если ЗначениеЗаполнено(Задача.СрокИсполнения) Тогда
ОбзорОбъектовКлиентСервер.ДобавитьПодпись(HTMLТекст, НСтр("ru = 'Срок:'"));
ФормаДаты = ?(ПолучитьФункциональнуюОпцию("ИспользоватьДатуИВремяВСрокахЗадач"),
"ДФ='dd.MM.yyyy HH:mm'", "ДФ='dd.MM.yyyy'");
Если ТипЗнч(Задача.БизнесПроцесс) <>
Тип("БизнесПроцессСсылка.РешениеВопросовВыполненияЗадач")
И Не Задача.Выполнена
И ПолучитьФункциональнуюОпцию("ВестиУчетПереносовСроковЗадач") Тогда
HTMLТекст = HTMLТекст + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
"<A href=%1> %2</A>",
"ИзменитьСрокВыполнения",
Формат(Задача.СрокИсполнения, ФормаДаты));
Иначе
HTMLТекст = HTMLТекст + " " + Формат(Задача.СрокИсполнения, ФормаДаты);
КонецЕсли;
HTMLТекст = HTMLТекст + "<br>";
КонецЕсли;
// Автор
ОбзорОбъектовКлиентСервер.ДобавитьРеквизит(HTMLТекст, НСтр("ru = 'Автор:'"), Задача.Автор);
// Контроль
Если ПолучитьФункциональнуюОпцию("ИспользоватьКонтрольОбъектов") Тогда
Контролеры = РаботаСБизнесПроцессамиВызовСервера.КонтролерыЗадачи(Задача, Не Задача.Выполнена);
КонтролерыСтрокой = СтрСоединить(Контролеры, ", ");
Если Задача.Выполнена Тогда
ПодписьКонтролера = НСтр("ru = 'Контролеры: '");
Иначе
КоличествоКонтролеров = Контролеры.Количество();
Если КоличествоКонтролеров = 1 Тогда
ПодписьКонтролера = НСтр("ru = 'Контролирует: '");
ИначеЕсли КоличествоКонтролеров > 1 Тогда
ПодписьКонтролера = НСтр("ru = 'Контролируют: '");
КонецЕсли;
КонецЕсли;
ОбзорОбъектовКлиентСервер.ДобавитьПодпись(HTMLТекст, ПодписьКонтролера);
HTMLТекст = HTMLТекст + СтрШаблон(
"<A href=ОткрытьКарточкуКонтроля>%1</A>",
РаботаС_HTML.ЗаменитьСпецСимволыHTML(КонтролерыСтрокой));
HTMLТекст = HTMLТекст + "<br>";
КонецЕсли;
////////////////////////////////////////////////////////////////////////////////////
// КопиПаста(ОбзорЗадачВызовСервера.ПолучитьОбзорЗадачи()) Прерывание
////////////////////////////////////////////////////////////////////////////////////
// История выполнения
HTMLТекст = HTMLТекст + ПолучитьИсториюВыполненияHTML(Задача);
////////////////////////////////////////////////////////////////////////////////////
// КопиПаста(ОбзорЗадачВызовСервера.ПолучитьОбзорЗадачи()) Продолжение
////////////////////////////////////////////////////////////////////////////////////
HTMLТекст = HTMLТекст + "</td>";
HTMLТекст = HTMLТекст + "</tr></table>";
HTMLТекст = HTMLТекст + "</body></html>";
Возврат HTMLТекст;
////////////////////////////////////////////////////////////////////////////////////
// КопиПаста(ОбзорЗадачВызовСервера.ПолучитьОбзорЗадачи()) Конец
////////////////////////////////////////////////////////////////////////////////////
//Романов И.В. 15.11.2024 10:22:02
////////////////////////////////////////////////////////////////////////////////////
КонецФункции
// Возвращает текст HTML для показа обзора задачи
//
// Параметры:
// РеквизитыЗадачи - Структура - реквизиты задачи:
// Ссылка
// БизнесПроцесс
// БизнесПроцессВедущаяЗадача
// Описание
// Наименование
// ТочкаМаршрута
// Выполнена
// РезультатВыполнения
// Исполнитель
// РольИсполнителя
// НомерИтерацииЗадачи
//
// Возвращаемое значение:
// Строка - текст HTML
//
Функция ПолучитьОбзорЗадачиДляСпискаЗадачиМне(РеквизитыЗадачи) Экспорт
////////////////////////////////////////////////////////////////////////////////////
//Романов И.В. 20.11.2024 10:17:37
// Было
//HTMLТекст = "";
//
//Возврат HTMLТекст;
ИсторияВыполнения = "";
ТекущийПользователь = ПользователиКлиентСервер.ТекущийПользователь();
СтрокаПолноеОписаниеЗадачи = РеквизитыЗадачи.Описание;
Если ЗначениеЗаполнено(РеквизитыЗадачи.БизнесПроцесс) Тогда
ИсторияВыполнения = ПолучитьИсториюВыполненияHTML(РеквизитыЗадачи.Ссылка);
Если Не ПустаяСтрока(ИсторияВыполнения) Тогда
СтрокаПолноеОписаниеЗадачи =
СтрокаПолноеОписаниеЗадачи
+ ?(ЗначениеЗаполнено(СтрокаПолноеОписаниеЗадачи),
"" + Символы.ПС + Символы.ПС, "");
КонецЕсли;
КонецЕсли;
ТекстHTML = "<html>
|<head>
| <style>
| h1 {
| font-size: 10pt;
| font-family:Arial;
| }
| p {
| font-size: 10pt;
| font-family:Arial;
| }
| BODY {
| margin: 0px;
| padding: 3px;
| font-size: 10pt;
| font-family:Arial;
| }
| </style>
|</head>
|<body scroll=auto>";
////////////////////////////////////////////////////////////////////////////////////
// КопиПаста(ОбзорЗадачВызовСервера.ПолучитьОбзорЗадачиДляСпискаЗадачиМне()) Начало
////////////////////////////////////////////////////////////////////////////////////
// Отображаем Кому в мини-карточке, если задача делегирована либо назначена роли.
ОписаниеИсполнителя = "";
Если ЗначениеЗаполнено(РеквизитыЗадачи.Исполнитель) Тогда
Если РеквизитыЗадачи.Исполнитель <> ТекущийПользователь Тогда
ОписаниеИсполнителя = Строка(РеквизитыЗадачи.Исполнитель);
КонецЕсли;
Иначе
ОписаниеИсполнителя = Строка(РеквизитыЗадачи.РольИсполнителя);
КонецЕсли;
ТекстHTML = ТекстHTML + "<h1>";
НаименованиеЗадачиHTML = "";
ОбзорОбъектовКлиентСервер.ДобавитьРеквизит(НаименованиеЗадачиHTML, "", РеквизитыЗадачи.Наименование);
НаименованиеЗадачиHTML = СтрЗаменить(НаименованиеЗадачиHTML, Символы.Таб, " ");
НаименованиеЗадачиHTML = СтрЗаменить(НаименованиеЗадачиHTML, Символы.ПС, "<br>");
ТекстHTML = ТекстHTML + НаименованиеЗадачиHTML;
ТекстHTML = ТекстHTML + "</h1>";
Если ЗначениеЗаполнено(ОписаниеИсполнителя) Тогда
ТекстHTML = ТекстHTML + "<p>";
ОбзорОбъектовКлиентСервер.ДобавитьРеквизит(ТекстHTML, НСТР("ru = 'Кому: '"), ОписаниеИсполнителя);
ТекстHTML = ТекстHTML + "</p>";
КонецЕсли;
Если РеквизитыЗадачи.НомерИтерацииЗадачи > 0 Тогда
ТекстHTML = ТекстHTML + "<p>";
ОбзорОбъектовКлиентСервер.ДобавитьРеквизит(ТекстHTML, НСТР("ru = 'Цикл: '"), РеквизитыЗадачи.НомерИтерацииЗадачи);
ТекстHTML = ТекстHTML + "</p>";
КонецЕсли;
Если РеквизитыЗадачи.Свойство("ПредметДокумент") Тогда
//было
//ОбзорПредмета = ПолучитьОбзорПредметаЗадачи(РеквизитыЗадачи.ПредметДокумент);
ОбзорПредмета = ОбзорЗадачВызовСервера.ПолучитьОбзорПредметаЗадачи(РеквизитыЗадачи.ПредметДокумент);
Если Не ПустаяСтрока(ОбзорПредмета) Тогда
ТекстHTML = ТекстHTML + "<p>" + ОбзорПредмета + "</p>";
КонецЕсли;
КонецЕсли;
Если ЗначениеЗаполнено(СтрокаПолноеОписаниеЗадачи) Тогда
ПолноеОписаниеЗадачиHTML = "";
ОбзорОбъектовКлиентСервер.ДобавитьРеквизит(ПолноеОписаниеЗадачиHTML, "", СтрокаПолноеОписаниеЗадачи);
ПолноеОписаниеЗадачиHTML = СтрЗаменить(ПолноеОписаниеЗадачиHTML, Символы.Таб, " ");
ПолноеОписаниеЗадачиHTML = СтрЗаменить(ПолноеОписаниеЗадачиHTML, Символы.ПС, "<br>");
ТекстHTML = ТекстHTML + "<p>" + ПолноеОписаниеЗадачиHTML + "</p>";
Иначе
//ТекстHTML = ТекстHTML + "<p><FONT color=""#C0C0C0"">"
// + НСтр("ru = 'У задачи нет описания.'") + "</FONT></p>";
КонецЕсли;
////////////////////////////////////////////////////////////////////////////////////
// КопиПаста(ОбзорЗадачВызовСервера.ПолучитьОбзорЗадачиДляСпискаЗадачиМне()) Конец
////////////////////////////////////////////////////////////////////////////////////
ТекстHTML = ТекстHTML + ИсторияВыполнения +"</body></html>";
Возврат ТекстHTML;
//Романов И.В. 20.11.2024 10:30:02
////////////////////////////////////////////////////////////////////////////////////
КонецФункции
// Возвращает текст HTML для показа важных реквизитов предмета задачи (если предмет один, и это документ)
//
// Параметры:
// ПредметДокумент - ссылка на предмет - документ
//
// Возвращаемое значение:
// Строка - текст HTML
//
Функция ПолучитьОбзорПредметаЗадачи(ПредметДокумент) Экспорт
HTMLТекст = "";
Возврат HTMLТекст;
КонецФункции
//Романов И.В. 15.11.2024 11:45:45
Функция ПолучитьИсториюВыполненияHTML(Задача)
ТЗПодчБизнесПроцессы = Новый ТаблицаЗначений;
ТЗПодчБизнесПроцессы.Колонки.Добавить("БизнесПроцесс");
ТЗПодчБизнесПроцессы.Колонки.Добавить("ДатаДляСортировки");
УстановитьПривилегированныйРежим(Истина);
ВыводимИсторию = Ложь;
ИсторияВыполненияHTML = "";
//Узнаем самый главный БизнессПроцесс
ГлавныйБизнесПроцесс = Неопределено;
ГлавнаяВедущаяЗадачаСсылка = Задача;
Пока ГлавнаяВедущаяЗадачаСсылка <> Неопределено Цикл
ГлавныйБизнесПроцесс = ГлавнаяВедущаяЗадачаСсылка.БизнесПроцесс;
ГлавнаяВедущаяЗадачаСсылка = ПолучитьГлавнуюВедущуюЗадачу(ГлавнаяВедущаяЗадачаСсылка.БизнесПроцесс);
КонецЦикла;
Если ГлавныйБизнесПроцесс = Неопределено Тогда
ГлавныйБизнесПроцесс = Задача.БизнесПроцесс;
КонецЕсли;
//Узнаем о существовании подчинёных процессов
ТЗРезультат = ПолучитьПодчиненныеБизнесПроцесы(ГлавныйБизнесПроцесс);
ЗаполнитьДеревоБПДетально(ТЗРезультат, ТЗПодчБизнесПроцессы);
Если ТЗПодчБизнесПроцессы.Количество() = 0 Тогда
//История по единичному Бизнес-процессу
ИсторияВыполненияHTML = ПреобразоватьИсторияВыполненияHTML(РегистрыСведений.ИсторияВыполненияЗадач.ИсторияПоБизнесПроцессу(Задача.БизнесПроцесс));
Иначе
НовСтр = ТЗПодчБизнесПроцессы.Добавить();
НовСтр.БизнесПроцесс = Задача.БизнесПроцесс;
НовСтр.ДатаДляСортировки = ?(Задача.БизнесПроцесс.Завершен, Задача.БизнесПроцесс.ДатаЗавершения, Задача.БизнесПроцесс.ДатаНачала);
Если ГлавныйБизнесПроцесс <> Неопределено И ГлавныйБизнесПроцесс <> Задача.БизнесПроцесс Тогда
НовСтр = ТЗПодчБизнесПроцессы.Добавить();
НовСтр.БизнесПроцесс = ГлавныйБизнесПроцесс;
НовСтр.ДатаДляСортировки = ?(ГлавныйБизнесПроцесс.Завершен, ГлавныйБизнесПроцесс.ДатаЗавершения, ГлавныйБизнесПроцесс.ДатаНачала);
КонецЕсли;
//фикс Убираем повторяющиеся записи
ТЗПодчБизнесПроцессы.Свернуть("БизнесПроцесс,ДатаДляСортировки");
//Обработаем дерево Бизнес-процессов
ТЗПодчБизнесПроцессы.Сортировать("ДатаДляСортировки Убыв");
Для каждого ТекБП из ТЗПодчБизнесПроцессы Цикл
ИсторияВыполненияHTML = ИсторияВыполненияHTML
+ ПреобразоватьИсторияВыполненияHTML(РегистрыСведений.ИсторияВыполненияЗадач.ИсторияПоБизнесПроцессу(
ТекБП.БизнесПроцесс),"БП: "+СокрЛП(ТекБП.БизнесПроцесс));
КонецЦикла;
КонецЕсли;
Возврат ИсторияВыполненияHTML;
КонецФункции
Функция ПреобразоватьИсторияВыполненияHTML(ИсторияВыполнения, ЗаголовокИстории = "История выполнения:")
Если ЗначениеЗаполнено(ИсторияВыполнения) Тогда
ИсторияВыполненияHTML = "<p><hr><B>";
ОбзорОбъектовКлиентСервер.ДобавитьПодпись(ИсторияВыполненияHTML, ЗаголовокИстории);
ИсторияВыполненияHTML = ИсторияВыполненияHTML + "</B><br>";
ОбзорОбъектовКлиентСервер.ДобавитьРеквизит(ИсторияВыполненияHTML, "", ИсторияВыполнения);
ИсторияВыполненияHTML = СтрЗаменить(ИсторияВыполненияHTML, Символы.Таб, " ");
ИсторияВыполненияHTML = СтрЗаменить(ИсторияВыполненияHTML, Символы.ПС, "<br>");
Возврат ИсторияВыполненияHTML;
Иначе
Возврат "";
КонецЕсли;
КонецФункции
Функция ПолучитьГлавнуюВедущуюЗадачу(ИскомыйПроцессСсылка)
врИскомыйПроцесс = ИскомыйПроцессСсылка.ПолучитьОбъект();
Если ЗначениеЗаполнено(врИскомыйПроцесс.ВедущаяЗадача) Тогда
Возврат врИскомыйПроцесс.ВедущаяЗадача;
КонецЕсли;
Попытка
Если ЗначениеЗаполнено(врИскомыйПроцесс.ГлавнаяЗадача) Тогда
Возврат врИскомыйПроцесс.ГлавнаяЗадача;
КонецЕсли;
Исключение
КонецПопытки;
Возврат Неопределено;
КонецФункции
Функция ПолучитьПодчиненныеБизнесПроцесы(ГлавныйБизнесПроцесс)
Запрос = Новый Запрос(
"ВЫБРАТЬ
| ДочерниеБизнесПроцессы.ДочернийПроцесс КАК БизнесПроцесс,
| ВЫБОР
| КОГДА ДочерниеБизнесПроцессы.ДочернийПроцесс.Завершен
| ТОГДА ДочерниеБизнесПроцессы.ДочернийПроцесс.ДатаЗавершения
| ИНАЧЕ ДочерниеБизнесПроцессы.ДочернийПроцесс.ДатаНачала
| КОНЕЦ КАК ДатаДляСортировки
|ИЗ
| РегистрСведений.ДочерниеБизнесПроцессы КАК ДочерниеБизнесПроцессы
|ГДЕ
| ДочерниеБизнесПроцессы.РодительскийПроцесс = &БизнесПроцесс");
Запрос.УстановитьПараметр("БизнесПроцесс", ГлавныйБизнесПроцесс);
Возврат Запрос.Выполнить().Выгрузить();
КонецФункции
Процедура ЗаполнитьДеревоБПДетально(ТЗПодчинБП, ТЗПодчБизнесПроцессы)
Для Каждого стрРез Из ТЗПодчинБП Цикл
ЗаполнитьЗначенияСвойств(ТЗПодчБизнесПроцессы.Добавить(), стрРез);
ТЗПодчинБП2 = ПолучитьПодчиненныеБизнесПроцесы(стрРез.БизнесПроцесс);
Если ТЗПодчинБП2.Количество()>0 Тогда
ЗаполнитьДеревоБПДетально(ТЗПодчинБП2, ТЗПодчБизнесПроцессы);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
//Романов И.В. 15.11.2024 11:45:53
////////////////////////////////////////////////////////////////////////////////////
#КонецОбласти
Писалось на конфе: Документооборот 8 КОРП, редакция 2.1 (2.1.14.4), платформа 8.3.13.1690
UPD 2024/11/20 Исправил ошибку пропадания бизнес-процессов из истории
Исправил разные шрифты в форме "ЗадачиМне"
UPD 2024/11/22 Исправил ошибку задвоения бизнес-процессов в истории
Related Posts
- Получение логина и пароля техподдержки 1С из базы
- Класс для вывода отчета в Excel
- Счет-фактура для УПП
- Библиотека классов для создания внешней компоненты 1С на C#
- Акт об оказании услуг (со скидками) — внешняя печатная форма для Управление торговлей 11.1.10.86
- Прайс-лист с артикулом в отдельной колонке
Картинка с результатом была бы очень уместна.
(1) к публикации прикреплён всего один скриншот с результатом работы кода, поправил статью для большей ясности
Спасибо за доработку!
А цвет текста по результатам выполнения задачи не должен меняться?
Выполненные под задачи не выводятся?
(3)Цвет не меняется, заказа такого не было.
по идее должно быть результат вывод всех задач, всех поцессов.
если что-то не выводится, пишите поправим