Вывод полной истории в задаче по всему "дереву" бизнес-процессов

Публикация № 1156346

Разработка - Практика программирования

Документооборот История Задачи бизнес-процесс

Вашему вниманию предлагается моя версия текста общего модуля "ОбзорЗадачВызовСервераПереопределяемый" для конфигурации 1С:Документооборот.

Задача:

Пользователям необходим просмотр полной истории выполнения всех подчинённых бизнес-процессов(всего "дерева") из задачи исполнителя.

 

Решение:

Если есть подчиненные или текущий процесс является подчиненным, тогда выводим историю выполнения всего "дерева" бизнес-процессов в обратном хронологическом порядке.

Заменить текст общего модуля "ОбзорЗадачВызовСервераПереопределяемый".

 
 ОбзорЗадачВызовСервераПереопределяемый

////////////////////////////////////////////////////////////////////////////////
// Обзор задач вызов сервера переопределяемый: Содержит переопределяемые процедуры
//  по формированию HTML представления задач.
//  
////////////////////////////////////////////////////////////////////////////////

#Область ПрограммныйИнтерфейс

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

////////////////////////////////////////////////////////////////////////////////////
//Романов И.В. 15.11.2019 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, Символы.Таб, "&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Текст + ПолучитьИсториюВыполненияHTML(Задача);
////////////////////////////////////////////////////////////////////////////////////
// КопиПаста(ОбзорЗадачВызовСервера.ПолучитьОбзорЗадачи()) Продолжение
////////////////////////////////////////////////////////////////////////////////////	
	HTMLТекст = HTMLТекст + "</td>";
	HTMLТекст = HTMLТекст + "</tr></table>";
	HTMLТекст = HTMLТекст + "</body></html>";
	Возврат HTMLТекст;
////////////////////////////////////////////////////////////////////////////////////
// КопиПаста(ОбзорЗадачВызовСервера.ПолучитьОбзорЗадачи()) Конец
////////////////////////////////////////////////////////////////////////////////////
//Романов И.В. 15.11.2019 10:22:02
////////////////////////////////////////////////////////////////////////////////////
	
КонецФункции

// Возвращает текст HTML для показа обзора задачи
//
// Параметры:
//   РеквизитыЗадачи - Структура - реквизиты задачи:
//      Ссылка
//      БизнесПроцесс
//      БизнесПроцессВедущаяЗадача
//      Описание
//      Наименование
//      ТочкаМаршрута
//      Выполнена
//      РезультатВыполнения
//      Исполнитель
//      РольИсполнителя
//      НомерИтерацииЗадачи
//
// Возвращаемое значение:
//   Строка - текст HTML
//
Функция ПолучитьОбзорЗадачиДляСпискаЗадачиМне(РеквизитыЗадачи) Экспорт
////////////////////////////////////////////////////////////////////////////////////
//Романов И.В. 20.11.2019 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, Символы.Таб, "&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 + ИсторияВыполнения +"</body></html>";
	
	Возврат ТекстHTML;

//Романов И.В. 20.11.2019 10:30:02
////////////////////////////////////////////////////////////////////////////////////
КонецФункции

// Возвращает текст HTML для показа важных реквизитов предмета задачи (если предмет один, и это документ)
//
// Параметры:
//   ПредметДокумент - ссылка на предмет - документ
//
// Возвращаемое значение:
//   Строка - текст HTML
//
Функция ПолучитьОбзорПредметаЗадачи(ПредметДокумент) Экспорт
	
	HTMLТекст = "";
	
	Возврат HTMLТекст;

КонецФункции

//Романов И.В. 15.11.2019 11:45:45
Функция ПолучитьИсториюВыполненияHTML(Задача)
	ТЗПодчБизнесПроцессы = Новый ТаблицаЗначений;
	ТЗПодчБизнесПроцессы.Колонки.Добавить("БизнесПроцесс");
	ТЗПодчБизнесПроцессы.Колонки.Добавить("ДатаДляСортировки");

	УстановитьПривилегированныйРежим(Истина);
	
	//Узнаем самый главный БизнессПроцесс
	ГлавныйБизнесПроцесс = Неопределено;
	ГлавнаяВедущаяЗадачаСсылка = Задача;
	Пока ГлавнаяВедущаяЗадачаСсылка <> Неопределено Цикл
		ГлавныйБизнесПроцесс = ГлавнаяВедущаяЗадачаСсылка.БизнесПроцесс;
		ГлавнаяВедущаяЗадачаСсылка = ПолучитьГлавнуюВедущуюЗадачу(ГлавнаяВедущаяЗадачаСсылка.БизнесПроцесс);
	КонецЦикла;
	Если ГлавныйБизнесПроцесс = Неопределено Тогда
		ГлавныйБизнесПроцесс = Задача.БизнесПроцесс;
	КонецЕсли;
	
	//Узнаем о существовании подчинёных процессов
	ТЗРезультат = ПолучитьПодчиненныеБизнесПроцесы(ГлавныйБизнесПроцесс);
	ЗаполнитьДеревоБПДетально(ТЗРезультат, ТЗПодчБизнесПроцессы);
	
	ИсторияВыполненияHTML	= "<br>";
	ОбзорОбъектовКлиентСервер.ДобавитьПодпись(ИсторияВыполненияHTML, "История выполнения:");
	Если ТЗПодчБизнесПроцессы.Количество() = 0 Тогда
		//История по единичному Бизнес-процессу
		ИсторияВыполненияHTML = ПреобразоватьИсторияВыполненияHTML(Задача.БизнесПроцесс);
	Иначе
		НовСтр = ТЗПодчБизнесПроцессы.Добавить();
		НовСтр.БизнесПроцесс = Задача.БизнесПроцесс;
		НовСтр.ДатаДляСортировки = ?(Задача.БизнесПроцесс.Завершен, Задача.БизнесПроцесс.ДатаЗавершения, Задача.БизнесПроцесс.ДатаНачала);
		Если ГлавныйБизнесПроцесс <> Неопределено И ГлавныйБизнесПроцесс <> Задача.БизнесПроцесс Тогда
			НовСтр = ТЗПодчБизнесПроцессы.Добавить();
			НовСтр.БизнесПроцесс = ГлавныйБизнесПроцесс;
			НовСтр.ДатаДляСортировки = ?(ГлавныйБизнесПроцесс.Завершен, ГлавныйБизнесПроцесс.ДатаЗавершения, ГлавныйБизнесПроцесс.ДатаНачала);
		КонецЕсли;
		//Обработаем дерево Бизнес-процессов
		
		//Убираем дубли БП
		ТЗПодчБизнесПроцессы.Свернуть("БизнесПроцесс,ДатаДляСортировки");
		
		ТЗПодчБизнесПроцессы.Сортировать("ДатаДляСортировки Убыв");
		Для каждого ТекБП из ТЗПодчБизнесПроцессы Цикл
			ИсторияВыполненияHTML = ИсторияВыполненияHTML + ПреобразоватьИсторияВыполненияHTML(ТекБП.БизнесПроцесс);
		КонецЦикла;
	КонецЕсли;
	Возврат ИсторияВыполненияHTML;
КонецФункции

Функция ПреобразоватьИсторияВыполненияHTML(БизнесПроцесс)
	Если БизнесПроцесс.Завершен Тогда
		СтатусБПСтрокой = "Процесс: ";
	Иначе
		СтатусБПСтрокой = "Процесс выполняется: ";
	КонецЕсли;
	//Заголовок
	ИсторияВыполненияHTML = "<hr><p><B>" +	СтрШаблон("<A href=v8doc:%1>%2</A>",
							ПолучитьНавигационнуюСсылку(БизнесПроцесс),
							РаботаС_HTML.ЗаменитьСпецСимволыHTML(СтатусБПСтрокой+Строка(БизнесПроцесс)))+ "</B><p>";
	//Содержание						
	ИсторияВыполнения = РегистрыСведений.ИсторияВыполненияЗадач.ИсторияПоБизнесПроцессу(БизнесПроцесс);
	//Получаем задачи по процессу
	Запрос = Новый Запрос(
	"ВЫБРАТЬ
	|	ЗадачаИсполнителя.Ссылка КАК Ссылка
	|ИЗ
	|	Задача.ЗадачаИсполнителя КАК ЗадачаИсполнителя
	|ГДЕ
	|	ЗадачаИсполнителя.БизнесПроцесс = &БизнесПроцесс");
	Запрос.УстановитьПараметр("БизнесПроцесс", БизнесПроцесс);
	
	Если ЗначениеЗаполнено(ИсторияВыполнения) Тогда
		ВыборкаЗадач = Запрос.Выполнить().Выбрать();
		//Проставим ссылки на задачи в историю
		Пока ВыборкаЗадач.Следующий() Цикл
			ТекстПоискаЗамены = Формат(ВыборкаЗадач.Ссылка.ДатаИсполнения,"ДФ='dd.MM.yyyy HH:mm'")+", "+
								СокрЛП(ВыборкаЗадач.Ссылка.Исполнитель);
			ИсторияВыполнения = СтрЗаменить(ИсторияВыполнения, ТекстПоискаЗамены,
							СтрШаблон("<A href=v8doc:%1>%2</A>",
							ПолучитьНавигационнуюСсылку(ВыборкаЗадач.Ссылка),
							ТекстПоискаЗамены));
		КонецЦикла;
		ИсторияВыполненияHTML = ИсторияВыполненияHTML +	ИсторияВыполнения;
	Иначе
		//Нет истории, но процесс то есть, добавим рога
		ИсторияВыполненияHTML = ИсторияВыполненияHTML +	"<..>";
	КонецЕсли;
	ИсторияВыполненияHTML = СтрЗаменить(ИсторияВыполненияHTML, Символы.Таб, "&nbsp;&nbsp;&nbsp;");
	ИсторияВыполненияHTML = СтрЗаменить(ИсторияВыполненияHTML, Символы.ПС, "<br>");

	Возврат ИсторияВыполненияHTML;
КонецФункции
	
Функция ПолучитьГлавнуюВедущуюЗадачу(ИскомыйПроцессСсылка)
	врИскомыйПроцесс = ИскомыйПроцессСсылка.ПолучитьОбъект();
	Если ЗначениеЗаполнено(врИскомыйПроцесс.ВедущаяЗадача) Тогда
		Возврат врИскомыйПроцесс.ВедущаяЗадача;
	КонецЕсли;
	Попытка
		Если ЗначениеЗаполнено(врИскомыйПроцесс.ГлавнаяЗадача) Тогда
			Возврат врИскомыйПроцесс.ГлавнаяЗадача;
		КонецЕсли;
	Исключение
	КонецПопытки;
	Возврат Неопределено;
КонецФункции

Функция ПолучитьПодчиненныеБизнесПроцесы(ГлавныйБизнесПроцесс)
	Запрос = Новый Запрос(
	"ВЫБРАТЬ
	|	ДочерниеБизнесПроцессы.ДочернийПроцесс КАК БизнесПроцесс,
	|	ВЫБОР
	|		КОГДА ДочерниеБизнесПроцессы.ДочернийПроцесс.Завершен
	|			ТОГДА ДочерниеБизнесПроцессы.ДочернийПроцесс.ДатаЗавершения
	|		ИНАЧЕ ДочерниеБизнесПроцессы.ДочернийПроцесс.ДатаНачала
	|	КОНЕЦ КАК ДатаДляСортировки
	|ПОМЕСТИТЬ ВТДочерниеБизнесПроцессы
	|ИЗ
	|	РегистрСведений.ДочерниеБизнесПроцессы КАК ДочерниеБизнесПроцессы
	|ГДЕ
	|	ДочерниеБизнесПроцессы.РодительскийПроцесс = &БизнесПроцесс
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	РешениеВопросовВыполненияЗадач.Ссылка КАК БизнесПроцесс,
	|	ВЫБОР
	|		КОГДА РешениеВопросовВыполненияЗадач.Завершен
	|			ТОГДА РешениеВопросовВыполненияЗадач.ДатаЗавершения
	|		ИНАЧЕ РешениеВопросовВыполненияЗадач.ДатаНачала
	|	КОНЕЦ КАК ДатаДляСортировки
	|ПОМЕСТИТЬ ВТДочерниеБизнесПроцессыЗадач
	|ИЗ
	|	БизнесПроцесс.РешениеВопросовВыполненияЗадач КАК РешениеВопросовВыполненияЗадач
	|ГДЕ
	|	РешениеВопросовВыполненияЗадач.ПредметРассмотрения.БизнесПроцесс = &БизнесПроцесс
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	ВТДочерниеБизнесПроцессы.БизнесПроцесс КАК БизнесПроцесс,
	|	ВТДочерниеБизнесПроцессы.ДатаДляСортировки КАК ДатаДляСортировки
	|ИЗ
	|	ВТДочерниеБизнесПроцессы КАК ВТДочерниеБизнесПроцессы
	|
	|ОБЪЕДИНИТЬ ВСЕ
	|
	|ВЫБРАТЬ
	|	ВТДочерниеБизнесПроцессыЗадач.БизнесПроцесс,
	|	ВТДочерниеБизнесПроцессыЗадач.ДатаДляСортировки
	|ИЗ
	|	ВТДочерниеБизнесПроцессыЗадач КАК ВТДочерниеБизнесПроцессыЗадач");		
	Запрос.УстановитьПараметр("БизнесПроцесс", ГлавныйБизнесПроцесс);
	Возврат Запрос.Выполнить().Выгрузить();
КонецФункции

Процедура ЗаполнитьДеревоБПДетально(ТЗПодчинБП, ТЗПодчБизнесПроцессы)
	Для Каждого стрРез Из ТЗПодчинБП Цикл
		ЗаполнитьЗначенияСвойств(ТЗПодчБизнесПроцессы.Добавить(), стрРез);
		ТЗПодчинБП2 = ПолучитьПодчиненныеБизнесПроцесы(стрРез.БизнесПроцесс);
		Если ТЗПодчинБП2.Количество()>0 Тогда
			ЗаполнитьДеревоБПДетально(ТЗПодчинБП2, ТЗПодчБизнесПроцессы);
		КонецЕсли;
	КонецЦикла;
КонецПроцедуры

//Романов И.В. 15.11.2019 11:45:53
////////////////////////////////////////////////////////////////////////////////////

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

 

Писалось на конфе: Документооборот 8 КОРП, редакция 2.1 (2.1.14.4), платформа 8.3.13.1690

UPD 2019/11/20 Исправил ошибку пропадания бизнес-процессов из истории
                             Исправил разные шрифты в форме "ЗадачиМне"

UPD 2019/11/22 Исправил ошибку задвоения бизнес-процессов в истории

UPD 2020/01/30 Исправил ошибку В историю процесса не попадают задачи "Рассмотреть вопрос", "Ознакомиться с ответом на вопрос".

UPD 2020/01/31 Добавил улучшения:

+ для бизнес-процессов без истории выводим "<..>"
+ если процесс не завершен то пишем "Процесс выполняется:"
+ вывод заголовков бизнес-процессов в виде ссылок
+ вывод задач истории в виде ссылок(боольше ссылок, богу ссылок)

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо развёрнутое
Свернуть все
1. mifka186 8 20.11.19 14:40 Сейчас в теме
Картинка с результатом была бы очень уместна.
2. rmIvanT 40 20.11.19 14:43 Сейчас в теме
(1) к публикации прикреплён всего один скриншот с результатом работы кода, поправил статью для большей ясности
3. xKEEPERx 08.12.19 02:33 Сейчас в теме
Спасибо за доработку!
А цвет текста по результатам выполнения задачи не должен меняться?

Выполненные под задачи не выводятся?
4. rmIvanT 40 08.12.19 02:39 Сейчас в теме
(3)Цвет не меняется, заказа такого не было.
по идее должно быть результат вывод всех задач, всех поцессов.
если что-то не выводится, пишите поправим
5. rmIvanT 40 30.01.20 11:19 Сейчас в теме
(3)
А цвет текста по результатам выполнения задачи не должен меняться?


Можете подробнее описать, какой текст, в какие цвета, и по чьим результатам. покрасим, но это не точно.
8. xKEEPERx 12.02.20 13:27 Сейчас в теме
(5) Если Согласовано - жирный Зелёный, если не Согласовано - жирный красный
Аналогично Подписано/Не подписано, Утверждено/Не утверждено
9. rmIvanT 40 13.02.20 09:04 Сейчас в теме
(8) Сейчас всё ссылки, их сложно покрасить по разному
6. awe007 30.01.20 11:52 Сейчас в теме
В историю процесса не попадают задачи "Рассмотреть вопрос", "Ознакомиться с ответом на вопрос". Это специально так сделано:
7. rmIvanT 40 30.01.20 16:34 Сейчас в теме
10. Mellentin 26.02.20 08:05 Сейчас в теме
Спасибо за статью, очень полезная вещь!
11. solaru 48 17.06.20 18:29 Сейчас в теме
Работает, для благодарности можно выложить расширение за $M
12. rmIvanT 40 19.06.20 08:33 Сейчас в теме
(11) В виде благодарности принимаются лайки(+) и хвалебные комментарии ;-)
на расширение нет ни времени, ни сил, ни желания. К тому же маловато функционала для расширения.
Оставьте свое сообщение

См. также

3 онлайн-курса по 1С-программированию: обмен данными, расчетные задачи и бухгалтерские задачи с 12 мая по 8 июля 2020 г. Промо

Практика программирования v8 Бесплатно (free)

Пакет из 3-х курсов по 1С-программированию. Основная цель - сформировать у слушателей практические навыки, связанные с реализацией задач обмена для прикладных решений, работающих на платформе “1С:Предприятие”, а также с разработкой прикладных решений, предназначенных для автоматизации расчета заработной платы и задач бухгалтерского учета.

22.04.2020    4369    23    Infostart    2    

Программная работа с настройками СКД

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Нюансы программной работы с настройками системы компоновки данных в отчетах и динамических списках. Обзор всех видов настроек компоновки. Что в каких случаях правильно применять. В качестве примера рассмотрена работа с отборами и группировками.

27.01.2020    18284    0    ids79    26    

Возврат рекомендуемых шаблонов и ограничение состава процессов обработки в 1С:Документооборот 2.1.13+

Документооборот и делопроизводство v8::Бизнес-процессы ДО УУ Бесплатно (free)

Как быстро вернуть рекомендуемые шаблоны в помощник отправки начиная с версии 2.1.13.

20.01.2020    2273    0    pavlig    0    

[СКД] Программное создание схемы компоновки данных

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Сделаем отчет на СКД полностью программно, без использования макета "схема компоновки данных".

15.01.2020    17836    0    John_d    22    

Использование программных перечислений, ч.1: строковые константы Промо

Практика программирования v8 1cv8.cf Бесплатно (free)

Часто ли у вас возникает необходимость в коде выполнять сравнение на строку?

10.12.2016    35258    0    unichkin    45    

Последовательности событий. Шпаргалка

Практика программирования v8 Россия Бесплатно (free)

Собрал информацию о событиях/подписках/расширениях в одном месте.

30.12.2019    12920    0    kuzyara    33    

Простейший пример создания бизнес-процессов

Практика программирования Управление бизнес-процессами (BPM) v8::Бизнес-процессы 1cv8.cf Бесплатно (free)

Простой пример создания бизнес-процессов в несколько шагов. Может пригодиться при первом знакомстве с ними или для решении задач экзамена 1С:Специалист по платформе.

20.11.2019    12467    0    YPermitin    17    

1С:Документооборот. Уведомление параллельных исполнителей. Дополнительный обработчик Бизнес-события

Документооборот и делопроизводство Практика программирования v8::Бизнес-процессы ДО Россия Бесплатно (free)

Вашему вниманию предлагается пользовательский обработчик бизнес-события по созданию уведомлений параллельных исполнителей. Для бизнес-процесса "Исполнение".

14.11.2019    3003    0    rmIvanT    0    

Вспомогательные инструкции в коде 1С Промо

Практика программирования v8 1cv8.cf Бесплатно (free)

Помогаем редактору кода 1С помогать нам писать и анализировать код.

15.10.2018    27637    0    tormozit    100    

Таблица значений. Нюансы

Практика программирования v8 Бесплатно (free)

Обзор некоторых аспектов использования общеизвестного инструмента 1С.

01.10.2019    27642    0    Yashazz    45    

СКД. Отчеты с картинками

Практика программирования Работа с интерфейсом v8::СКД 1cv8.cf Бесплатно (free)

Решение популярных кейсов с картинками в отчетах на СКД.

25.09.2019    17476    0    YPermitin    35    

Добавляем виджет "Задачи от меня" в Документооборот 2.1

Практика программирования Работа с интерфейсом v8 v8::Бизнес-процессы ДО Россия Бесплатно (free)

Небольшая доработка Документооборота 2.1 для возможности добавления виджета "Задачи от меня" в обработку Текущие дела.

25.09.2019    6706    0    Sergey_Borisovi4    3    

Оформление и рефакторинг сложных логических выражений Промо

Практика программирования v8 Россия Бесплатно (free)

В сложных логических выражениях нередко самому автору спустя какое-то время тяжело разобраться, не говоря уже о других программистах. Предлагаемая методика позволяет повысить наглядность таких выражений путем оформления в виде И-ИЛИ дерева и одновременно выполнять их рефакторинг.

20.09.2012    75161    0    tormozit    129    

СКД не только для отчетов

Практика программирования v8::СКД 1cv8.cf Бесплатно (free)

СКД позволяет получать данные из информационной базы не только для вывода в отчеты, но и для других целей. Пример такого использования рассматривается в настоящей статье.

18.09.2019    17473    0    YPermitin    36    

Оповещения боту из 1С за 31 минуту

Практика программирования Интеграция v8::УФ 1cv8.cf Бесплатно (free)

Поделюсь опытом, как быстро сделать бота с оповещениями в Телеграмм из 1С без лишних затрат.

18.09.2019    15674    4    feva    37    

[Шпаргалка] Программное создание элементов формы

Практика программирования Работа с интерфейсом v8 1cv8.cf Бесплатно (free)

Программное создание практически всех популярных элементов формы.

06.09.2019    38546    0    rpgshnik    62    

Запись значения в поле ввода/формы со срабатыванием события ПриИзменении Промо

Практика программирования v8 1cv8.cf Россия Бесплатно (free)

Иногда возникает необходимость после записи значения в какое либо поле ввода/формы вызвать для него обработчик события ПриИзменении, а о вызове самого события приходится только мечтать. В этой статье приводится программный способ вызова этого события.

11.07.2007    46045    0    tormozit    38    

Агрегатные функции СКД, о которых мало кто знает

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Пользуетесь ли Вы всеми возможными агрегатными функциями, которые предоставляет система компоновки данных? Если Вы используете только: СУММА, КОЛИЧЕСТВО, МИНИМУМ, МАКСИМУМ, СРЕДНЕЕ, то эта статья для Вас.

05.09.2019    40616    0    ids79    52    

Регистры бухгалтерии. Общая информация

Практика программирования Математика и алгоритмы v8 v8::БУ БУ Бесплатно (free)

Общая информация о внутреннем устройстве регистров бухгалтерии.

05.09.2019    23919    0    YPermitin    24    

Три костыля. Сказ про фокусы в коде

Практика программирования v8 Бесплатно (free)

Три интересных (или странных) костыля в коде, которые могут помочь в повседневных и не очень задачах.

03.09.2019    22830    0    YPermitin    80    

Как сделать из &НаКлиентеНаСервереБезКонтекста почти &НаКлиентеНаСервере Промо

Практика программирования v8 1cv8.cf Россия Бесплатно (free)

Как сделать метод формы, доступный на клиенте и на сервере одновременно, и сохранить при этом удобство разработки

10.09.2017    42048    0    tormozit    74    

Отслеживание выполнения фонового задания

Практика программирования Универсальные функции Разработка v8 1cv8.cf Бесплатно (free)

Запуск фонового задания из модуля внешней обработки. Отслеживание выполнения задания в виде прогресса, расположенного на форме.

17.08.2019    27732    0    ids79    16    

Функции СКД: ВычислитьВыражение, ВычислитьВыражениеСГруппировкойМассив

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Подробное описание и использование внутренних функций системы компоновки данных: Вычислить, ВычислитьВыражение, ВычислитьВыражениеСГруппировкойМассив, ВычислитьВыражениеСГруппировкойТаблицаЗначений.

08.08.2019    62994    0    ids79    40    

Фоновое выполнение кода в 1С - это просто

Практика программирования v8 1cv8.cf Бесплатно (free)

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

02.08.2019    28685    0    avalakh    21    

Выгрузка документа по условию Промо

Практика программирования Разработка v8 Бесплатно (free)

Что делать, если документы нужно выгружать не все подряд, а по какому-то фильтру: статусу, дате, набору условий... А что если он соответствовал этим условиям, а потом перестал? А если потом опять начал? Такие ситуации заставили попотеть не одного программиста.

25.04.2019    15240    0    m-rv    2    

СКД - наборы данных и связи между ними, создание собственной иерархии, вложенные отчеты

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Набор данных объект. Использование в схеме компоновки нескольких наборов данных. Различные варианты связи наборов: объединение, соединение. Использование иерархии в отчетах на СКД. Создание собственной иерархии, иерархия детальных записей. Использование вложенных схем в отчетах на СКД.

26.07.2019    47454    0    ids79    11    

Как проводятся документы в типовых конфигурациях от 1С

Математика и алгоритмы Практика программирования Разработка v8::ОУ ERP2 УТ11 Россия УУ Бесплатно (free)

В свое время, когда только начинал шаги в 1С и изучал, как проводятся документы в конфигурациях на платформе 1С по книге "Разработка управляемого интерфейса" (Хрусталева Е.Ю.), и там были представлены примеры совсем далекие от того, как сейчас проводятся документы в современных конфигурациях от 1С.

24.07.2019    25450    0    skv_79    35    

СКД - использование расширений языка запросов, секция ХАРАКТЕРИСТИКИ

Инструментарий разработчика Практика программирования v8 v8::СКД Бесплатно (free)

Автоматическое и не автоматическое заполнение полей компоновки данных. Использование расширений языка запросов для СКД «{…}», секция ВЫБРАТЬ, секция ГДЕ, параметры виртуальных таблиц. Автоматизированное использование дополнительных данных в запросе: секция ХАРАКТЕРИСТИКИ.

17.07.2019    30906    0    ids79    27    

Как настроить правильную техподдержку (helpdesk, service desk на коленке) Промо

Управление услугами и сервисом Управление взаимоотношениями с клиентами (СRM) Документооборот и делопроизводство Монитор заказов Учет рабочего времени Управление взаимоотношениями с клиентами (СRM) Документооборот и делопроизводство Монитор заказов Учет рабочего времени v8 УУ Бесплатно (free)

Эта статья будет полезна для компаний, которые оказывают техническую поддержку своим пользователям - внешним или внутренним клиентам. В статье я расскажу, как оказываем поддержку мы, как выстроили этот бизнес-процесс, что контролируем и на что обращаем внимание в работе. Вы можете использовать наш опыт при построении собственной системы поддержки или обратиться к нам за помощью за построением такой системы, будем рады помочь. В статье формируется основной набор правил, которые мы сформировали при настройке системы для себя, а так же небольшие примеры того, как мы эти правила применяем.

24.04.2019    15815    0    siddy    0    

"Меньше копипаста!", или как Вася универсальную процедуру писал

Практика программирования Разработка v8 v8::СКД 1cv8.cf Бесплатно (free)

Программист Вася разбирает подход создания универсальных методов на примере программного вывода СКД.

04.07.2019    17496    0    SeiOkami    50    

Создание отчетов с помощью СКД - основные понятия и элементы

Практика программирования Математика и алгоритмы v8 v8::СКД Бесплатно (free)

Основные принципы работы СКД. Понятия схемы компоновки и макета компоновки. Описание основных элементов схемы компоновки: наборы данных, поля, вычисляемые поля, ресурсы, параметры.

25.06.2019    45180    0    ids79    20    

Многопоточное ускорение однопользовательских нагрузок в 1С + Microsoft SQL Server 2017

Практика программирования Производительность и оптимизация (HighLoad) v8 v8::Запросы Бесплатно (free)

Взаимодействие с Microsoft SQL Server нередко вызывает трудности у 1С-ников, а потому интересны любые моменты, связанные с его использованием. О своем опыте работы с новым SQL Server 2017 участникам конференции Infostart-2018 рассказал директор ООО «Аналитика софт» Дмитрий Дудин.

11.06.2019    22619    0    dmurk    144    

Как прикрутить ГУИД к регистру сведений Промо

Практика программирования Перенос данных из 1C8 в 1C8 Разработка v8 Бесплатно (free)

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

16.04.2019    18909    0    m-rv    17    

Регистры накопления. Структура хранения в базе данных

Практика программирования Разработка v8 1cv8.cf Бесплатно (free)

Структура хранения регистров накопления в базе данных для платформы 1С:Предприятие 8.x. Первая часть в серии публикаций.

16.05.2019    37862    0    YPermitin    30    

Выполнение внешней обработки в фоновом задании

Практика программирования Разработка v8 1cv8.cf Бесплатно (free)

Подробное описание подхода к созданию длительной операции на основе внешней обработки. Реализация протестирована на 1С 8.3.12.1714 (x64).

11.05.2019    26095    0    Eret1k    23    

О расширениях замолвите слово...

Практика программирования Разработка v8 Бесплатно (free)

О чём стоит задуматься при принятии решения о создании расширения конфигурации…

07.04.2019    31537    0    ellavs    126    

Как сделать запрос на изменение данных Промо

Практика программирования v8 v8::Запросы 1cv8.cf Бесплатно (free)

В статье приведены особенности внутренней архитектуры и примеры работы с расширением языка запросов 1С.

01.06.2018    28579    0    m-rv    21    

Git-репозитории для 1С-кода (опыт использования при небольших проектах)

Практика программирования v8 Бесплатно (free)

Инструкции по взаимодействию с Git-репозиторием, которые писались для тех наших программистов, которые вообще никогда не работали с Git (руководства в духе "Как получить код из git-репозитория?", "Как отправить код в git-репозиторий")...

28.03.2019    25062    0    ellavs    88    

Трюки с внешними источниками данных

Практика программирования Разработка v8 1cv8.cf Бесплатно (free)

Некоторые трюки для преодоления ограничений внешних источников данных.

14.03.2019    28425    0    YPermitin    53    

Добавление отчетов в типовые конфигурации 1С

Практика программирования Универсальные функции БСП (Библиотека стандартных подсистем) v8::УФ v8::СКД 1cv8.cf Бесплатно (free)

Описание различных способов добавления общих и контекстных отчетов в конфигурации 1С, построенные на базе БСП. Основные моменты и нюансы.

07.03.2019    47578    0    ids79    45    

Метод формирования движений в типовых регистрах нетиповыми регистраторами Промо

Практика программирования v8 1cv8.cf Бесплатно (free)

Вариант решения задач с проведением по типовым регистрам нетиповыми регистраторами. Зачем - чтобы при сравнении конфигурации не обращать внимание на свойства регистров и исключить вероятность допущения горькой оплошности при обновлении информационных баз, заменив типы регистраторов основной конфигурации типами конфигурации поставщика. Для программных продуктов, имеющих в своем составе метаданных документ "Корректировка регистров"("Корректировка записей регистров").

05.12.2017    26649    0    itriot11    34    

Функциональные опции 1С 8.3 – все возможные варианты использования

Практика программирования Разработка v8::УФ 1cv8.cf Бесплатно (free)

Примеры использования функциональных опций для управления интерфейсом и элементами управляемых форм, с различными вариантами хранения значений: константа, реквизит справочника, ресурс регистра сведений.

22.02.2019    30616    0    ids79    14    

Механизм бизнес-событий на конкретном примере

Управление бизнес-процессами (BPM) Документооборот и делопроизводство Документооборот и делопроизводство v8::Бизнес-процессы ДО Россия УУ Бесплатно (free)

Есть в системе 1С:Документооборот механизм бизнес-событий. Когда мне понадобилось решить конкретную задачу, гугление ни к чему конкретному не привело. Хотелось так «вжух» и всё понять про данный механизм, но в итоге пришлось лезть в код 1С и смотреть реализацию данного механизма. В данной публикации поделюсь результатами исследований, может, кому-то это поможет быстро и легко во всём разобраться.

18.02.2019    11177    0    soulner    0    

Информирование пользователя. Работа с объектом «СообщениеПользователю»

Практика программирования Разработка v8::УФ 1cv8.cf Бесплатно (free)

Различные варианты и нюансы использования объекта СообщениеПользователю и другие способы информирования пользователя: без привязки к какой-либо форме и с выводом сообщения в отдельном окне.

15.02.2019    42180    0    ids79    47    

Использование классов .Net в 1С для новичков Промо

Практика программирования Разработка внешних компонент Универсальные функции v7.7 v8 Бесплатно (free)

Руководство для новичков. Написав статью http://infostart.ru/public/238584/, я понял, что многие не понимают того, что написано. Поэтому в этой статье постараюсь более подробно остановиться на азах и без кода на вражеском языке (C#)

27.01.2016    73054    0    Serginio    108    

Возможности типовых шаблонов ограничения доступа на уровне записей (RLS)

Практика программирования БСП (Библиотека стандартных подсистем) Роли и права v8 v8::Права Бесплатно (free)

Краткий обзор применения типовых шаблонов ограничения доступа на уровне записей в конфигурациях, созданных на базе БСП: #ПоЗначениям, #ПоНаборамЗначений, #ПоЗначениямРасширенный, #ПоЗначениямИНаборамРасширенный

03.02.2019    33934    0    ids79    9    

Новый подход к обмену данными EnterpriseData

Практика программирования Обмен через XML v8 v8::УФ Россия Бесплатно (free)

Хочу предложить Вашему вниманию цикл статей, посвященных обмену данными через универсальный формат (EnterpriseData или ED).

14.12.2018    37342    0    ids79    72    

Автоматические и управляемые блокировки применительно к типовым конфигурациям 1С Промо

Математика и алгоритмы Практика программирования v8 v8::blocking 1cv8.cf Бесплатно (free)

Основные принципы работы с режимами автоматических и управляемых блокировок в 1С Предприятие 8. Теория и применение в типовых конфигурациях: БП, УТ, ЕРП

10.11.2018    32048    0    ids79    40