Отображение истории выполнения по всем задачам комплексного процесса в документообороте

14.12.20

Задачи пользователя - Адаптация типовых решений

Коллеги, предлагаю вашему вниманию доработку для вывода полной истории в задачах комплексного процесса.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Заполнение доп. регистра для истории
.epf 6,96Kb
20
20 Скачать (1 SM) Купить за 1 850 руб.

В типовом решении для комплексных процессов история выполнения задач выводится только для текущего процесса. Например, есть комплексный процесс из трех действий:

После выполнения первых двух действий в третьем действии ("Ознакомление") исполнитель не сможет увидеть комментарии по двум предыдущим задачам. Для того, чтобы просмотреть комментарии нужно будет открыть каждую из задач.

Для вывода полной истории по задачам было принято решение создать свой регистр сведений, т.к через типовые объекты не получилось написать оптимальный запрос для получения данных и в истории по задачам необходимо было выводить гиперссылки по задачам.

Структура доработки.

1) Нужно добавить собственный регистр сведений:

2) В модуле менеджера регистра сведений "пп_ИсторияВыполненияЗадач" нужно прописать процедуру для записи данных.

 
 Текст процедуры "ЗаписатьСобытиеПоПроцессу".

3) В типовом регистре сведений "ИсторияВыполненияЗадач" необходимо переопределить процедуру модуля менеджера "ИсторияПоБизнесПроцессу" для того, чтобы выборка данных происходила из регистра сведений "пп_ИсторияВыполненияЗадач". 

 
 Текст функции "ИсторияПоБизнесПроцессу" в модуле менеджера регистра сведений "ИсторияВыполненияЗадач".

4) В модуле объекта задачи исполнителя нужно добавить в процедуру "ПередЗаписью" заполнение регистра сведений "пп_ИсторияВыполненияЗадач".

Заполнение истории выполнения обозначено комментарием в типовом коде.

 
 Код заполнения регистра сведений "пп_ИсторияВыполненияЗадач".

5) В общем модуле "ОбзорЗадачВызовСервераПереопределяемый" нужно заполнить функции "ПолучитьОбзорЗадачи" и "ПолучитьОбзорЗадачиДляСпискаЗадачиМне" для того, чтобы корректно отображались данные по ссылке на задачу и другие теги html добавляемые в текст по задаче. 

 
 Код модуля "ОбзорЗадачВызовСервераПереопределяемый" (функции обзора задач).
// Возвращает текст HTML для показа обзора процесса Исполнение
//
// Параметры:
//   Задача - ЗадачаСсылка.ЗадачаИсполнителя
//
Функция ПолучитьОбзорЗадачи(Задача) Экспорт
	
	HTMLТекст = "";
	
	HTMLТекст = пп_ПолучитьОбзорЗадачи(Задача);
	
	Возврат HTMLТекст;
	
КонецФункции

// Возвращает текст HTML для показа обзора задачи
//
// Параметры:
//   РеквизитыЗадачи - Структура - реквизиты задачи:
//      Ссылка
//      БизнесПроцесс
//      БизнесПроцессВедущаяЗадача
//      Описание
//      Наименование
//      ТочкаМаршрута
//      Выполнена
//      РезультатВыполнения
//      Исполнитель
//      РольИсполнителя
//      НомерИтерацииЗадачи
//
// Возвращаемое значение:
//   Строка - текст HTML
//
Функция ПолучитьОбзорЗадачиДляСпискаЗадачиМне(РеквизитыЗадачи) Экспорт
	
	HTMLТекст = пп_ПолучитьОбзорЗадачДляСпискаЗадачиМне(РеквизитыЗадачи);
	
	Возврат HTMLТекст;
	
КонецФункции


#Область Доработки

// Возвращает текст HTML для показа обзора задачи
//
// Параметры:
//   Задача - ЗадачаСсылка.ЗадачаИсполнителя
//
// Возвращаемое значение:
//   Строка - текст HTML
//
Функция пп_ПолучитьОбзорЗадачи(Знач Задача) Экспорт
		
    // Формируем основное представление процесса
	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, Символы.Таб, "&nbsp;&nbsp;&nbsp;");
		ОписаниеЗадачи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Текст + "<p>";
		HTMLТекст = HTMLТекст + "<B>";
		ОбзорОбъектовКлиентСервер.ДобавитьПодпись(HTMLТекст, НСТР("ru = 'История перенаправлений задачи:'"));
		HTMLТекст = HTMLТекст + "</B>";
		HTMLТекст = HTMLТекст + "<br>";
		       
		ИсторияПеренаправленийHTML = СтрЗаменить(ИсторияПеренаправлений, Символы.Таб, "&nbsp;&nbsp;&nbsp;");
		ИсторияПеренаправленийHTML = СтрЗаменить(ИсторияПеренаправлений, Символы.ПС, "<br>");
		
		HTMLТекст = HTMLТекст + ИсторияПеренаправленийHTML;
		
	КонецЕсли;
	
	// История выполнения
	ИсторияВыполнения = РегистрыСведений.ИсторияВыполненияЗадач.ИсторияПоБизнесПроцессу(
		Задача.БизнесПроцесс);
	Если ЗначениеЗаполнено(ИсторияВыполнения) Тогда
		HTMLТекст = HTMLТекст + "<p>";
		HTMLТекст = HTMLТекст + "<B>";
		ОбзорОбъектовКлиентСервер.ДобавитьПодпись(HTMLТекст, НСТР("ru = 'История выполнения:'"));
		HTMLТекст = HTMLТекст + "</B>";
		HTMLТекст = HTMLТекст + "<br>";
		       
		ИсторияВыполненияHTML = СтрЗаменить(ИсторияВыполнения, Символы.Таб, "&nbsp;&nbsp;&nbsp;");
		ИсторияВыполненияHTML = СтрЗаменить(ИсторияВыполнения, Символы.ПС, "<br>");
		        
		HTMLТекст = HTMLТекст + ИсторияВыполненияHTML;
		
	КонецЕсли;
	
	HTMLТекст = HTMLТекст + "</td>";
	
	HTMLТекст = HTMLТекст + "</tr></table>";
	
	HTMLТекст = HTMLТекст + "</body></html>";
	
	Возврат 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;   	 
	|	}
	| </style>	 
	|</head>
	|<body scroll=auto>";
	
	// Отображаем Кому в мини-карточке, если задача делегирована либо назначена роли.
	ОписаниеИсполнителя = "";
	Если ЗначениеЗаполнено(РеквизитыЗадачи.Исполнитель) Тогда
		Если РеквизитыЗадачи.Исполнитель <> ТекущийПользователь Тогда
			ОписаниеИсполнителя = Строка(РеквизитыЗадачи.Исполнитель);
		КонецЕсли;
	Иначе
		ОписаниеИсполнителя = Строка(РеквизитыЗадачи.РольИсполнителя);
	КонецЕсли;
	
	ТекстHTML = ТекстHTML + "<h1>";
	НаименованиеЗадачиHTML = "";
	ОбзорОбъектовКлиентСервер.ДобавитьРеквизит(НаименованиеЗадачиHTML, "", РеквизитыЗадачи.Наименование);
	НаименованиеЗадачиHTML = СтрЗаменить(НаименованиеЗадачиHTML, Символы.Таб, "&nbsp;&nbsp;&nbsp;");
	НаименованиеЗадачи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, Символы.Таб, "&nbsp;&nbsp;&nbsp;");
		ПолноеОписаниеЗадачиHTML = СтрЗаменить(ПолноеОписаниеЗадачиHTML, Символы.ПС, "<br>");
		ТекстHTML = ТекстHTML + "<p>" + ПолноеОписаниеЗадачиHTML + "</p>";
	Иначе
		ТекстHTML = ТекстHTML + "<p><FONT color=""#C0C0C0"">"
		+ НСтр("ru = 'У задачи нет описания.'") + "</FONT></p>";
	КонецЕсли;
	
	//История перенаправлений задачи
	ИсторияПеренаправлений = ПолучитьИсториюПеренаправленийЗадачи(РеквизитыЗадачи.Ссылка);
	
	Если ЗначениеЗаполнено(ИсторияПеренаправлений) Тогда
		
		ТекстHTML = ТекстHTML + "<p>";
		ТекстHTML = ТекстHTML + "<B>";
		ОбзорОбъектовКлиентСервер.ДобавитьПодпись(ТекстHTML, НСТР("ru = 'История перенаправлений задачи:'"));
		ТекстHTML = ТекстHTML + "</B>";
		ТекстHTML = ТекстHTML + "<br>";
		
		ИсторияПеренаправленийHTML = СтрЗаменить(ИсторияПеренаправлений, Символы.Таб, "&nbsp;&nbsp;&nbsp;");
		ИсторияПеренаправленийHTML = СтрЗаменить(ИсторияПеренаправлений, Символы.ПС, "<br>");
		
		ТекстHTML = ТекстHTML + ИсторияПеренаправленийHTML;
		
	КонецЕсли;
	
	Если ЗначениеЗаполнено(РеквизитыЗадачи.БизнесПроцесс) Тогда
		ИсторияВыполнения = РегистрыСведений.ИсторияВыполненияЗадач.ИсторияПоБизнесПроцессу(
		РеквизитыЗадачи.БизнесПроцесс);
		
		Если Не ПустаяСтрока(ИсторияВыполнения) Тогда
			
			ТекстHTML = ТекстHTML + "<p>";
			ТекстHTML = ТекстHTML + "<B>";
			ОбзорОбъектовКлиентСервер.ДобавитьПодпись(ТекстHTML, НСТР("ru = 'История выполнения:'"));
			ТекстHTML = ТекстHTML + "</B>";
			ТекстHTML = ТекстHTML + "<br>";
			
			ИсторияВыполненияHTML = СтрЗаменить(ИсторияВыполнения, Символы.Таб, "&nbsp;&nbsp;&nbsp;");
			ИсторияВыполненияHTML = СтрЗаменить(ИсторияВыполнения, Символы.ПС, "<br>");
			
			ТекстHTML = ТекстHTML + ИсторияВыполненияHTML;
			
		КонецЕсли;
	КонецЕсли;
		
	ТекстHTML = ТекстHTML + "</body></html>";
	
	Возврат ТекстHTML;
	
Конецфункции

функция ПолучитьИсториюПеренаправленийЗадачи(Задача)
	
	Запрос = Новый Запрос;
	Запрос.Текст = "ВЫБРАТЬ
	|	ИсторияСобытийЗадач.Комментарий КАК Комментарий,
	|	ИсторияСобытийЗадач.ДатаСобытия КАК ДатаСобытия
	|ИЗ
	|	РегистрСведений.ИсторияСобытийЗадач КАК ИсторияСобытийЗадач
	|ГДЕ
	|	ИсторияСобытийЗадач.Задача = &Задача
	|	И ИсторияСобытийЗадач.Событие = ЗНАЧЕНИЕ(Перечисление.ВидыСобытийЗадач.Перенаправлена)
	|
	|УПОРЯДОЧИТЬ ПО
	|	ИсторияСобытийЗадач.ДатаСобытия УБЫВ";
	Запрос.УстановитьПараметр("Задача",Задача);
	
	РезультатЗапроса = Запрос.Выполнить();
	
	ИсторияПеренаправлений = "";
	
	Если РезультатЗапроса.Пустой() Тогда
		
		Возврат ИсторияПеренаправлений;
		
	Иначе
		
		ТекстРазделитель = Символы.ПС + 
		"------------------------------------" +
		Символы.ПС;
		
		Выборка = РезультатЗапроса.Выбрать();
		
		Пока Выборка.Следующий() Цикл
			
			ИсторияПеренаправлений = ИсторияПеренаправлений 
			+ ?(ПустаяСтрока(ИсторияПеренаправлений), "", ТекстРазделитель) 
			+ Выборка.Комментарий + "." + "Дата события:" + " " + Выборка.ДатаСобытия;
			
		КонецЦикла;
		
		Возврат ИсторияПеренаправлений;
		
	КонецЕсли;
	
Конецфункции

#КонецОбласти

 

Результат доработки:

Данная доработка производилась на версии документооборота 2.1.11.5.

документооборот история

См. также

Логистика, склад и ТМЦ Адаптация типовых решений Пользователь Платформа 1С v8.3 1С:Управление нашей фирмой 1.6 1С:Управление нашей фирмой 3.0 Россия Управленческий учет Платные (руб)

Чтобы не допустить путаницы с обещаниями клиентам и для четкого контроля исполнения заказов мы используем резервирование товаров. Мы доработали УНФ, чтобы она автоматически отменяла старые резервы и не мешала эффективно продавать.

7200 руб.

02.08.2023    4170    15    1    

32

Адаптация типовых решений Платформа 1С v8.3 1С:Документооборот Россия Платные (руб)

Расширение конфигурации для «1С:Документооборот КОРП», редакция 3.0. позволяет: 1.использовать произвольные табличные части в качестве дополнительных реквизитов к документу; 2 использовать произвольные табличные части в шаблонах в формате docx для автоматического заполнения таблиц.

29400 руб.

29.06.2023    5995    14    5    

24

Печатные формы Адаптация типовых решений Бухгалтер Пользователь Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Платные (руб)

Расширение позволяет вывести в табличном документе факсимиле печати и подписей и/или вывести произвольную картинку из прикреплённых файлов организации для 1С УТ 11.5, КА 2.5, ERP 2.5, УНФ 3, Розница 3. Вывод факсимиле возможен в табличные документы УПД, УКД, Счёт-фактура, ТОРГ-12 и другие. Возможно настроить вывод для любых типовых макетов (Акт сверки, М-15, ТТН), для этого потребуется отредактировать макет и разместить на нём картинки с установленными именами. Редактирование осуществляется через типовой механизм в пользовательском интерфейсе.

3000 руб.

07.02.2023    6707    73    10    

30

Адаптация типовых решений Программист Пользователь Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Абонемент ($m)

Каждый из нас сталкивается с ситуацией, когда какой-нибудь менеджер показывает свой Excel и рассказывает, как он что-то из 1С копирует в него, снабжает пояснениями, выделяет цветом и т.д. и т.п. Заканчивается все просьбой сделать вот чтобы также было в 1С. И оказывается такой человек (почти с гарантией) либо лучшим продажником, либо каким-то важным, за все отвечающим, - на ком все держится.

2 стартмани

22.04.2024    5267    dimanich70    15    

22

БСП (Библиотека стандартных подсистем) Адаптация типовых решений Программист Платформа 1С v8.3 1С:ERP Управление предприятием 2 Бесплатно (free)

Понадобилось в подменю "Создать на основании" добавить свою команду, которая открывает обработку. В процессе доработок появилась проблема двух подменю "Создать на основании". В статье о том, как решились проблемы.

01.03.2024    6827    dimanich70    9    

18
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Birdsurf 22.10.19 15:28 Сейчас в теме
Добрый день!
Вообще является актуальным вопрос вывода на форму задачи бизнес-процесса реквизитов предмета договора. Такое возможно стандартными средствами что-то подобное сделать? Насколько понимаю, форма задачи вообще не изменяется стандартно. Т.е. хотелось бы первичным объектом рассматривать все-таки появляющуюся задачу и в ней редактировать реквизиты предмета.
2. pavelpribytkin96 592 22.10.19 15:42 Сейчас в теме
(1)
первичным объектом рассматривать все-таки появляющуюся задачу и в ней редактировать реквизиты предмета.

Добрый день.
Типовыми средствами нельзя настроить редактирование реквизитов предмета из формы задачи. Такой механизм можно сделать только через доработку конфигурации.
3. Birdsurf 22.10.19 16:38 Сейчас в теме
Или еще актуальным является. Руководитель, запускает постоянно процессы по одному предмету в ERP и он не хочет ходить в ДО, чтобы смотреть на процессы и их схемы там. А в ERP нет рабочего стола процессов со схеми для анализа, чтобы он мог мониторить свои процессы. Остается ему вариант смотреть процессы через каждый из созданных предметов, кликая в предметах ссылку на ДО. Но это не вариант. То есть он хочет работать с процессами, предметами и задачами только в ERP.
4. Birdsurf 22.10.19 17:54 Сейчас в теме
Павел, нужны доработки по ДО. Выйдите со мной на контакт, скайп kubarevde.
5. Gle 14.11.19 11:20 Сейчас в теме
Спасибо за статью! Очень полезная вещь. Пользователи требовали историю задач. Внедрила у себя. Единственное - все сделала через расширение. Но думаю, что и вы тоже так сделали.
6. pavelpribytkin96 592 17.11.19 19:14 Сейчас в теме
(5)Нет, у себя расширения не использовал.
7. rmIvanT 71 30.01.20 11:39 Сейчас в теме
"Для вывода полной истории по задачам было принято решение создать свой регистр сведений, т.к через типовые объекты не получилось написать оптимальный запрос для получения данных."
но у меня получилось, без "лишних" объектов и "лишней" записи в базу.
И без Исполнено!Исполнено!Исполнено!Исполнено!... 😉

https://infostart.ru/public/1156346/
8. pavelpribytkin96 592 31.01.20 10:43 Сейчас в теме
(7)Согласен с вами по поводу того, что лишняя запись в базу это не совсем оптимально, но через типовые объекты вывести полную историю выполнения получилось запросом с соединением по полю составного типа данных через точку (не совсем оптимально) или запросом в цикле. Плюс в моей ситуации было необходимо дописывать дополнительные html теги к задаче, результатам выполнения задач и т.д. (в публикации присутствует только вывод гиперссылки в задаче). Исходя из всех вышеперечисленных условий принял решение создать свой регистр, писать туда все то что мне нужно и получать данные 1 запросом.
Оставьте свое сообщение