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

24.05.21

Функциональные - Документооборот и делопроизводство (СЭД)

Начиная с версии 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- Стало
    
    Возврат Ответ;
    
КонецФункции

 

Процессы шаблоны Документооборот

См. также

Бухгалтер Пользователь Руководитель проекта Платформа 1С v8.3 Управленческий учет Платные (руб)

Организуйте правильный оборот документов на вашем предприятии в 1С. Ведение учета и хранения документов. Управление потоками документации между подразделениями. Работа с договорами в компании. Автоматизация процессов подготовки, согласования и подписания документов. Сократите время и объем ошибок с 1С:ДО!

48500 руб.

19.02.2016    109893    134    5    

105

Бизнес-аналитик Бухгалтер Пользователь Платформа 1С v8.3 Бухгалтерский учет Налоговый учет Управленческий учет Платные (руб)

Прикладное решение «1С:Комплексная автоматизация 2» позволяет построить современную систему учета с высокой степенью детализации затрат, определить показатели управления и ответственности пользователей в рамках единого информационного пространства.

83000 руб.

19.02.2016    83322    113    0    

112

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

Продукт "Интеграция с 1С:Документооборот" позволяет использовать функции программы "1С:Документооборот 8" напрямую из учетной системы (1С:УПП; 1С:КА, 1С:УТ 10.3, 1С:БГУ 1.0, 1С:ЗБУ 1.0, 1С:УПП для Казахстана и отраслевых решений, разработанных на их основе) на платформе "1С:Предприятие 8": выполнять и ставить задачи, просматривать документы, скан-копии и прочие файлы, штрих-кодировать документы отправлять письма, вести учет рабочего времени - не входя в "1С:Документооборот 8", работая в одной программе, что значительно сокращает время и делает работу более комфортной и эффективной. Продукт прошел сертификацию 1С-Совместимо

110400 руб.

11.06.2015    58416    36    20    

45

SALE! 30%

Мессенджеры и боты Учет документов Платформа 1С v8.3 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия государственного учреждения 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 Платные (руб)

Расширение для согласования справочников и документов в основных типовых конфигурациях. Ролевая адресация, условная маршрутизация, чат-бот telegram, интеграция с n8n, последовательное и параллельное согласование, уведомление о новых задачах на почту, блокировка объектов в зависимости от статуса, запрет проведения в зависимости от статуса, автозапуск процессов согласования, отчеты по исполнительской дисциплине. Не требуется снятие конфигурации с поддержки. Настройка без программирования. Версия для 1cfresh.com. Сертификат 1С-Совместимо.

14900 руб.

15.11.2018    32129    40    49    

73

ЭДО и ОФД Учет документов Платформа 1С v8.3 1C:Бухгалтерия Россия Платные (руб)

Мощный, единый инструмент для решения всех проблем, связанных с переходом на ЭДО. Экономит бумагу и время - организует архив оригиналов первичных документов прямо в базе 1С, в прикрепленных файлах к соответствующим документам.

14880 руб.

17.12.2018    46592    69    63    

80

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

Расширение для печати договоров с приложением из шаблонов. Быстрая подготовка заполненных договоров без ручного заполнения. Возможность использования дополнительных реквизитов контрагентов и номенклатуры Быстрое сохранение файлов договоров и отправка по электронной почте. Решение в Реестре отечественного ПО.

15000 руб.

20.04.2016    63743    189    107    

103
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. rpgshnik 3847 25.05.21 04:02 Сейчас в теме
Подобное уже встречал на инфостарте, но там было выделение жирным начертанием рекомендуемых и вывод их на самый верх, в целом как альтернатива тоже не плохо. Спасибо за публикацию. Не понимаю, почему 1С ушла от рекомендуемых процессов и не дала возможность пользователю самостоятельно на это влиять.
2. Xleo777 48 25.05.21 11:32 Сейчас в теме
(1) Добрый день!
Спасибо за отзыв!

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

Причем в результате используется типовое разделение процессов по смыслу. Непонятно, почему 1С не довели визуализацию процессов.
За 4 года, я думала, что исправят. Но нет. Пришлось делать самим. Процессов много.
3. Flyerink 6 25.05.21 18:07 Сейчас в теме
Елена, спасибо большое за такую полезную статью! Помогли сэкономить прилично времени. Обновились со старой версии (живу по принципу - лучшее враг хорошего, а тут из-за ЭДО пришлось обновляться). Пользователи кучу процессов позапускали неправильных, т.к. привыкли нажимать верхние рекомендуемые..
На релизе 2.1.28.14 ваш код работает без изменений!
4. Xleo777 48 26.05.21 09:43 Сейчас в теме
(3) Спасибо за отзыв! Рада, что пригодилось решение!
5. VOPOH 23.09.21 16:34 Сейчас в теме
В 1С:ДО, можно просто у внутреннего документа в форме элемента, добавить ещё одну группу и добавить кнопку, предыдущую группу и кнопку сделать не видимой. У новой кнопки сделать команду СоздатьБизнесПроцесс, она находится в общих командах, и после этого будет старый вариант формы выбора процесса. А так спасибо большое за статью, с УПП уже долго мучаюсь.
Прикрепленные файлы:
6. user1958927 01.08.24 09:18 Сейчас в теме
Огромное спасибо за статью! Столкнулся с проблемой, в ERP не возможно было запустить бизнес-процесс, так как список шаблонов был пуст (данные не поступали из Документооборота). Из вашей статьи понял, что проблема в количестве шаблонов бизнес-процессов. Использовав ваш код, исправил проблему.
Оставьте свое сообщение