Исправление вывода списка процессов в 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    108636    123    5    

97

SALE! 30%

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

Универсальная программа для распознавания сканов или фото товарных документов в 1С. Не требует указания параметров и предварительной настройки. Просто выбираете файл (PDF, JPG, DOC, XLS, HTML) выбираете документ 1С и нажимаете кнопку "Распознать и загрузить".

8400 5880 руб.

04.06.2019    107265    313    173    

326

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

Продукт "Апрель Софт: Бухгалтерия позаказного производства, ред. 3.0" предназначен для удобного и оперативного управления процессами производства, отгрузок и снабжения в производственных компаниях. Программный продукт открывает новые функциональные возможности для ведения документооборота.

11400 руб.

18.02.2016    22973    1    1    

5

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

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

14900 руб.

15.11.2018    30379    35    49    

71

Документооборот и делопроизводство (СЭД) ЭДО и ОФД Учет документов Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Мощный, единый инструмент для решения всех проблем, связанных с переходом на ЭДО. Экономит бумагу и время - организует архив оригиналов первичных документов прямо в базе 1С, в прикрепленных файлах к соответствующим документам. С помощью комплексного отчета по ошибкам в ЭДО позволяет выявить и исправить все возможные ошибки - ошибочно сопоставленные документы, не подписанные документы, подписанные, но не загруженные в 1С документы. Автоматически сопоставляет не сопоставленные между собой документы. Может работать по расписанию и присылать отчет о состоянии архива/по ошибкам на почту. Взаимодействует напрямую с сервисами Диадок/СБИС, имеет интуитивно понятный интерфейс и учитывает 3-х летний опыт 40+ клиентов.

14880 руб.

17.12.2018    45707    65    59    

79

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

Приложение для быстрого создания макетов печатных документов, заполняемых из 1С:Предприятие, без привлечения программистов и запуска конфигуратора. Шаблон готовится в редакторе MS Word, отлично освоенном офисными служащими. Так, на подготовку нового шаблона договора купли продажи со спецификацией потребуется 25 минут. Приложение будет полезно, если Вы работаете со множеством Word-шаблонов или если Вам надо часто создавать новые шаблоны. Есть сертификат "1С: Совместимо!". Версия ПРОФ доступна в виде расширения.

2000 руб.

05.09.2017    92628    66    98    

100

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

Внешняя обработка "загрузка внутренних документов из Excel в 1С Документооборот 8", позволяет по заданному шаблону загрузить внутренние документы в конфигурацию в режиме управляемого приложения. Также есть возможность загружать файлы внутренних документов.

3600 руб.

14.03.2014    40631    31    17    

31
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. rpgshnik 3796 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 не возможно было запустить бизнес-процесс, так как список шаблонов был пуст (данные не поступали из Документооборота). Из вашей статьи понял, что проблема в количестве шаблонов бизнес-процессов. Использовав ваш код, исправил проблему.
Оставьте свое сообщение