Каталог решений - Исправление вывода списка процессов в 1С:Документооборот с группировкой

Исправление вывода списка процессов в 1С:Документооборот с группировкой

Исправление вывода списка процессов в 1С:Документооборот с группировкой

В наличии

Начиная с версии 2.1.13.28 разработчики 1С:Документооборот изменили порядок отправки документа в обработку.
Запуск процесса начинается с одной кнопки Отправить. Это здорово, так как не надо гадать, какой тип процесса настроен для документа, но список процессов неинтуитивный. Особенно, когда количество настроенных процессов более 1000.
Все процессы выводятся в один список и сортируются по наименованию.

Категория:

Описание

Предлагаемое решение выполнено на версии 1С:Документооборот 2.1.27.1

Список процессов разделен на группы:

  1. Рекомендованные (назначенные для документа)
  2. Произвольные (без шаблонов)
  3. Общие (все остальные, доступные пользователю)

Есть 2 места, которые нужно учесть при внесении изменений:

  1. Работа непосредственно в 1С:Документооборот
  2. Работа с 1С:Документооборот через бесшовную интеграцию (проверено на интеграции с ЗУП и УПП)

1. Работа в 1С:Документооборот 

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

Чтобы вывести группировку нужно в общий модуль ПомощникОтправить внести изменения.

Добавить Новую процедуру и заменить вызов типовой процедуры ДобавитьВДеревоОсновныеВариантыСозданияПроцесса на новую процедуру 

    //ДобавитьВДеревоОсновныеВариантыСозданияПроцесса(Помощник);
    рвк_ДобавитьВДеревоОсновныеВариантыСозданияПроцесса(Помощник);
    

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

2. Для изменения вывода в рамках бесшовной интеграции необходимо внести изменения в общий модуль ОбработкаЗапросовXDTOБизнесПроцессыИЗадачи в функцию ПолучитьДеревоШаблоновБизнесПроцессов

Есть один нюанс в реализации. При большом количестве процессов бесшовная интеграция не успевал формироваться список процессов за отведенное время и по таймауту отваливался. Поэтому в данном решении будут выводиться только Произвольные (без шаблона) и Рекомендованные процессы (назначенные для документа)

Полный текст функции ПолучитьДеревоШаблоновБизнесПроцессов ниже

  // Получает дерево шаблонов бизнес-процессов, удовлетворяющих условиям отбора
  //
  // Параметры:
  //   Сообщение - ОбъектXDTO типа DMGetBusinessProcessTemplatesTreeRequest
  // Возвращаемое значение:
  //   ОбъектXDTO типа DMGetBusinessProcessTemplatesTreeResponse 
  //
  Функция ПолучитьДеревоШаблоновБизнесПроцессов(Сообщение) Экспорт
      
      Ответ = СоздатьОбъектXDTO("DMGetBusinessProcessTemplatesTreeResponse");
      
      ПредметБП = Неопределено;
      Если Сообщение.Установлено("businessProcessTargetId") Тогда
          ПредметБП = ОбработкаЗапросовXDTO.ПолучитьСсылкуПоObjectID(Сообщение.businessProcessTargetId);
      КонецЕсли;
      
      Объекты = Новый Массив;
      Если ЗначениеЗаполнено(ПредметБП) Тогда
          Объекты.Добавить(ПредметБП);
      КонецЕсли;
      ВариантыОтправки = ВариантыОтправки(Объекты, Ответ);
      
      ГруппаРекомендованныеШаблоны = СоздатьОбъектXDTO("DMBusinessProcessTemplatesTreeGroup");
      ГруппаРекомендованныеШаблоны.name = НСтр("ru = 'Рекомендованные шаблоны'");
      ГруппаРекомендованныеШаблоны.hint =
          СформироватьСводкуПоГруппеЭлементов(ГруппаРекомендованныеШаблоны.name, Неопределено);
      ОстальныеГруппыШаблонов = Новый Массив;
      //rvk eryabova upd+ Было
      //Для Каждого Строка Из ВариантыОтправки.Строки Цикл
      //    Если Строка.Недоступен = Истина Тогда
      //        ГруппаДругиеВарианты = СоздатьОбъектXDTO("DMBusinessProcessTemplatesTreeGroup");
      //        ГруппаДругиеВарианты.name = Строка.Представление;
      //        ГруппаДругиеВарианты.hint = НСтр("ru = 'Группа шаблонов процессов.'");
      //        ГруппаДругиеВарианты.hintHTML = ПомощникОтправить.ОписаниеВарианта(Строка.Вариант);
      //        Для Каждого Подстрока Из Строка.Строки Цикл
      //            СтрокаШаблонов = СоздатьОбъектXDTO("DMBusinessProcessTemplatesTreeElement");
      //            СтрокаШаблонов.name = Подстрока.Представление;
      //            СтрокаШаблонов.hint = СформироватьСводкуПоШаблону(Подстрока.Вариант);
      //            СтрокаШаблонов.hintHTML = ПомощникОтправить.ОписаниеВарианта(Подстрока.Вариант);
      //            СтрокаШаблонов.businessProcessType = ПолучитьТипПроцессаXDTOПоШаблону(Подстрока.Вариант);
      //            
      //            ОбъектШаблонXDTO = СоздатьОбъектXDTO("DMBusinessProcessTemplate");
      //            ОбъектШаблонXDTO.name = Подстрока.Представление;
      //            ОбъектШаблонXDTO.objectId = ОбработкаЗапросовXDTO.ПолучитьObjectIDПоСсылке(Подстрока.Вариант);
      //            СтрокаШаблонов.template = ОбъектШаблонXDTO;
      //            
      //            ГруппаДругиеВарианты.elements.Добавить(СтрокаШаблонов);
      //        КонецЦикла;
      //        ОстальныеГруппыШаблонов.Добавить(ГруппаДругиеВарианты);
      //    ИначеЕсли ТипЗнч(Строка.Вариант) <> Тип("Строка") Тогда
      //        СтрокаШаблонов = СоздатьОбъектXDTO("DMBusinessProcessTemplatesTreeElement");
      //        СтрокаШаблонов.name = Строка.Представление;
      //        СтрокаШаблонов.hint = СформироватьСводкуПоШаблону(Строка.Вариант);
      //        СтрокаШаблонов.hintHTML = ПомощникОтправить.ОписаниеВарианта(Строка.Вариант);
      //        СтрокаШаблонов.businessProcessType = ПолучитьТипПроцессаXDTOПоШаблону(Строка.Вариант);
      //        
      //        ОбъектШаблонXDTO = СоздатьОбъектXDTO("DMBusinessProcessTemplate");
      //        ОбъектШаблонXDTO.name = Строка.Представление;
      //        ОбъектШаблонXDTO.objectId = ОбработкаЗапросовXDTO.ПолучитьObjectIDПоСсылке(Строка.Вариант);
      //        СтрокаШаблонов.template = ОбъектШаблонXDTO;
      //        
      //        ГруппаРекомендованныеШаблоны.elements.Добавить(СтрокаШаблонов);
      //    КонецЕсли;
      //КонецЦикла;
      
      //Ответ.businessProcessTemplatesTree.Добавить(ГруппаРекомендованныеШаблоны);
      //Для Каждого Группа Из ОстальныеГруппыШаблонов Цикл
      //    Ответ.businessProcessTemplatesTree.Добавить(Группа);
      //КонецЦикла;
      ////rvk eryabova upd- Было
      
      ////rvk eryabova upd+ Стало
      Группа = "";
      ГруппаВарианты = Неопределено;
      Отбор = Новый Структура("Вариант","!Рекомендуемые");
          
      Для Каждого Строка Из ВариантыОтправки.Строки Цикл
          Если Строка.Уровень() = 0 и ТипЗнч(Строка.Вариант) = Тип("Строка") Тогда
              Если Строка.Вариант = "!Рекомендуемые" или Строка.Вариант = "Произвольные" Тогда
              Иначе
                  Если ПредметБП <> Неопределено Тогда
                      Продолжить;
                  КонецЕсли;
              КонецЕсли;
              ГруппаВарианты = СоздатьОбъектXDTO("DMBusinessProcessTemplatesTreeGroup");
              ГруппаВарианты.name = Строка.Представление;
              ГруппаВарианты.hint = НСтр("ru = '"+ Строка.Представление + "'");
              Ответ.businessProcessTemplatesTree.Добавить(ГруппаВарианты);
              Для Каждого Подстрока Из Строка.Строки Цикл
                  СтрокаШаблонов = СоздатьОбъектXDTO("DMBusinessProcessTemplatesTreeElement");
                  СтрокаШаблонов.name = Подстрока.Представление;
                  СтрокаШаблонов.hint = СформироватьСводкуПоШаблону(Подстрока.Вариант);
                  СтрокаШаблонов.hintHTML = ПомощникОтправить.ОписаниеВарианта(Подстрока.Вариант);
                  СтрокаШаблонов.businessProcessType = ПолучитьТипПроцессаXDTOПоШаблону(Подстрока.Вариант);
                  
                  ОбъектШаблонXDTO = СоздатьОбъектXDTO("DMBusinessProcessTemplate");
                  ОбъектШаблонXDTO.name = Подстрока.Представление;
                  ОбъектШаблонXDTO.objectId = ОбработкаЗапросовXDTO.ПолучитьObjectIDПоСсылке(Подстрока.Вариант);
                  СтрокаШаблонов.template = ОбъектШаблонXDTO;
                  Если ТипЗнч(ГруппаВарианты) = Тип("ОбъектXDTO") Тогда
                      ГруппаВарианты.elements.Добавить(СтрокаШаблонов);
                  КонецЕсли;
              КонецЦикла;
  
              //ГруппаДругиеВарианты.hintHTML = ПомощникОтправить.ОписаниеВарианта(Строка.Вариант);
          КонецЕсли;
      КонецЦикла;
      ////rvk eryabova upd- Стало
      
      Возврат Ответ;
      
  КонецФункции
  

 

has been added to your cart:
Оформление заказа