Работа с файлами и папками в бизнес-процессах Битрикс24

Относительно недавно в редакторе бизнес-процессов Битрикс24 появился раздел Диск:


И я хочу показать практический пример использования новых действий для работы с файлами и папками :-)

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

Можно написать инструкцию и все эти действия проделывать вручную. Но мы попробуем этот процесс автоматизировать.

Алгоритм

Создаем процесс в живой ленте

Дадим возможность руководителю отдела продаж запускать бизнес-процесс прямо из Живой ленты.
Для этого создаем процесс Отчет по продажам. Доступ на запуск и чтение этого процесса должен быть только у руководителя отдела продаж. Поля процесса, которые будут показаны в форме добавления элемента:

  • Отчетный период: тип - список, значения - январь, февраль, март, апрель и т.д.
  • Файлы: тип - Файл(диск), множественное

Оба поля должны быть обязательными для заполнения.

В итоге запуск процесса из живой ленты должен выглядеть так:



Настраиваем шаблон бизнес-процесса


В шаблон бизнес-процесса последовательно помещаем действия:

В папке Отчетность на общем диске создать подкаталог Отчет за {отчетный период}: действие Создать папку в диске.



Скопировать в подкаталог файлы, которые загрузил руководитель отдела продаж в поле Файлы процесса: действие Загрузить файл в хранилище Диска.


Создать задачу, в описание которой разместить ссылку на подкаталог с документами: действие Задача.


В описании задачи ссылку я формирую с помощью html: <a target="_blank" href="{=A68401_99180_11957_23:DetailUrl}">Ссылка на подкаталог с документами</a>.

Результат

Запускаем процесс из живой ленты.
И вот что у нас создалось в общем диске:


А вот такая задача создалась автоматически:


Ссылка на подкаталог работает :-)

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

Комментарии

  1. А Буров и Иванова будут иметь доступ к файлу в задаче? или файл загруженный в предыдущем шаге на диск открыт для всех, что есть неверно?

    ОтветитьУдалить
    Ответы
    1. На моем тестовом портале - да, будут. Это определяется настройкой прав доступа к общему диску и корневой папке, в которой лежит отчетность.

      Удалить
    2. т.е. к сожалению почти все пользователи будут видеть этот файл,если они будут иметь доступ к этой общей папке. очеь жаль что в битриксе пока не сделали нормальное прикрепление файлов к задаче в бп(,с чётким распределением прав. если например юзер пишет в саппорт айти и прикрепляет файл,котрый например будет лежать в папке группы айти,то сотрудники айти этот файл увидет(так как он лежит в папке групп айти) а сам сатрудник после отправки файла,уже этот файл не увидет(нет доступа в группу айти)

      Удалить
  2. Люба , а как прикрепить файл не ссылкой а именно вложенный файл к задаче из бизнес процесса?

    ОтветитьУдалить
    Ответы
    1. Добрый день!)
      Я думаю, что на данный момент это можно сделать только разработкой собственного активити для бизнес-процессов.

      Удалить
  3. Здорово! А можно ли каким то образом прикрепить в самое начало БП фай (например как правильно заполнять, образец? )

    ОтветитьУдалить
    Ответы
    1. Здравствуйте!)
      В этом примере, мне кажется, что шаблон не нужен, так как при запуске процесса исполнитель сразу загружает уже готовые отчеты.

      Удалить
  4. Добрый день. Люба, подскажите, если Вас не затруднит. У нас тариф "Команда" и, соответственно, нет Списков. На Списках, по слухам, можно легко настроить автоматическую нумерацию добавляемых файлов. Можно ли сделать это без Списков? Например, пользователь загружает файл в папку "Входящие письма", запускает бизнес процесс, который изменяет название файла, добавляя следующий номер.

    ОтветитьУдалить
    Ответы
    1. Добрый день!)
      Если загружать файлы по такому же алгоритму, как в этой статье, то списки Вам не нужны.
      Можно добавить в настройках процесса новое поле, например, "Номер по порядку" с типом "счетчик" http://joxi.ru/bmov6W9FxQNQwr. При создании файла автоматом в название файла добавлять значение из этого поля.

      Удалить
    2. Спасибо за ответ! Сделал новое поле, добавил счетчик, в настройках "Изменения документа" прописал Название =
      {=Document:PROPERTY_NOMER_PO_PORYADKU}_{=Template:Parameter1_printable} (счетчик_название файла). В результате номер добавляется к названию в поле Документ, которое видно в "Моих процессах". А хотелось бы, чтобы менялось название файла, которое видно в папке на общем диске. Может для этого надо что-то где-то ещё сделать?

      Удалить
    3. Да, после этого надо сделать примерно так:
      1. Если Вы в общий диск загружаете файлы, то создать новый БП в общем диске с названием, например, "Переименование файла" и с параметром "Новое название". Этот процесс НЕ должен запускаться на создание/изменение файлов. Ну и добавить в него одно только действие по переименованию файла.
      2. И из основного БП добавить запуск БП из п.1 для файла, который уже был записан на диск http://joxi.ru/L21Rp0dI8LgJLA

      Тут есть проблема с новым названием файла - без проблем можно в начало названия добавить номер по порядку. Но полностью поменять название я не уверена, что получится, так как надо будет как-то сохранить расширение файла.

      Но всё это надо тестить)

      Удалить
    4. Люба, ОГРОМЕННОЕ СПАСИБО! Работает! Во внутренний БП надо передавать только номер счетчика (с префиксом, если оный есть), а имя файла - брать внутри этого БП из п.1, тогда получится сохранить расширение файла. Вы бы знали, сколько я с этим нумератором мучился... Удачи Вам!

      Удалить
    5. Люба, добрый день!

      Столкнулся с той же проблемой и не могу разрешить: в рамках Сделки загружаю документ с названием-абракадаброй в Общий диск. Необходимо после переименовать его по шаблону «%номер-договора%.pdf»

      Что для этого делаю:
      1. В Сделке после загрузки файла на Диск, запускаю вызов БП на Диске и передаю в него параметр %номер-договора%, вот так это выглядит http://take.ms/k4XNH
      2. На Диске лежит БП с одним действием — «изменение документа» http://take.ms/G59tc Подставляю полученный параметр.
      3. Иду смотреть на файл в Общем диске — он по-прежнему не переименован :(

      Всё сделал по шаблону, где мог допустить ошибку? :(

      Удалить
    6. Добрый день!
      По скриншотам вроде бы всё правильно.
      Попробуйте потестить:
      1. Точно ли у Вас запускается БП для файла. Например, если в БП по переименованию документа добавить вывод уведомления "Процесс запустился".
      2. Потестировать запуск БП "Переименовывание документа" вручную с разными параметрами. Попробуйте в этом БП не менять полностью название, а например, дописывать что-то в название документа, типа Название = "123" + Название.

      Удалить
    7. Люба, спасибо за быстрый ответ! Я снова вернулся к задаче, убил пару часов, но решения не нашел :(

      1. Да, БП запускается. Уведомление срабатывает. Более того, на Диске я вижу иконку того, что над файлом поработал БП http://take.ms/evQoD
      2. Какие только комбинации не пробовал. И передавать параметр, и без него.

      Может я неправильно узнаю ID файла? Хотя попробовал разные варианты: http://take.ms/JxTpr Сразу обращаться к ID после загрузки, или дополнительно узнать об этой файле и только после этого обратиться к ID.

      Точно перед ID документа не нужно вносить какое-нибудь магическое слово, типа DISK_{A********} ?

      Я также ставлю «Ожидать завершение БП», но не думаю, что это как-то повлияло.

      Чувствую, что все дело в каком-то одном символе или галочке.

      Удалить
    8. Александр, здравствуйте) Я потестила отдельно свой шаблон, который состоит из одного действия и переименовывает документы - он работает.

      У меня не получается полностью изменить название файла, потому что нужно указывать корректное расширение файла, такое же как у оригинала. Я писала об этом в комменте выше.

      Например, вот так переименовать можно http://joxi.ru/a2XOa3Gf15Nbxm. А без расширения - нет.

      Можно дописывать что-то в начало файла, например, порядковый номер или дату, http://joxi.ru/n2YORkVfo6Mgqr.

      Можно попробовать получить расширение из исходного названия файла и добавить его к новому названию, но для этого нужно еще немного повозиться с БП)

      Удалить
    9. Ох ох, переименовать полностью не получается :(
      Люба, могли бы дать контакты для связи? Почту, например. Хочу обратиться к вам за доработками по БП — накопилось много идей.
      Где-то не хватает времени реализовать, а где-то опыта.

      Удалить
  5. А как сделать что бы к задаче прикреплялись несколько ссылок, если загружается несколько файлов?

    ОтветитьУдалить
    Ответы
    1. Стас, здравствуйте!
      Я не тестировала эту задачу с вариантом, когда поле для прикрепления файлов множественное.

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

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

      Столкнулась с такой проблемой: бп согласования счета, поле для файла счета множественное, т.е. можно прикрепить несколько файлов. После согласования счета, файлы счетов кладутся в папку на Диске. После этого запускается бп переименования файлов счетов (в начало дописывается id), но в случае, если файлов несколько, переименовывается только первый файл из списка загруженных. Складывается такое ощущение, что в бп переименования файла передается только первый файл из списка, или бп переименования запускается только на первом файле из списка. Существуют ли варианты решения кроме, как заменить множественное поле файла счета на несколько отдельных полей?

      Заранее спасибо!

      Удалить
    3. Добрый день!)

      Можно использовать множественное поле для файлов, а с помощью итератора проходить по этим файлам и для каждого делать необходимую обработку: согласовывать, переименовывать, и т.д. Про итератор писала в статье https://luba-tinaeva-b24.blogspot.com/2018/04/blog-post.html.

      Удалить
  6. Люба, подскажите, как сделать счетчик, который будет увеличиваться на единицу при каждом запуске бизнес-процесса. Поле типа "Счетчик" не подходит. Какие-нибудь еще есть варианты?

    ОтветитьУдалить
    Ответы
    1. Добрый день!)
      Я не пробовала это реализовать, но теоретически должно работать:
      1. Добавить служебный процесс с одним полем "Значение счетчика" с типом число или целое число.
      2. Добавить один элемент этого процесса со значением 0 в поле из п.1. Запомнить ID этого элемента.
      3. Добавить бизнес-процесс для этого процесса (без автозапуска), который делает только одно действие: прибавляет 1 к значению в поле "Значение счетчика" для элемента из п.2
      4. В основной процесс добавить блок "Запуск бизнес-процесса". Настроить его на запуск бизнес-процесса из п.3

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

      Удалить
    2. Сам придумал, как сделать счетчик. Привязал получение номера к ID документа. Поскольку ID увеличивается с шагом 2, то написал следующее выражение:
      =({=Document:ID}/2)+1195.
      Последняя часть нужна для подгонки номера к ранее выданным.

      Удалить
    3. Добрый день! Интересно пишите, спасибо, почерпнул много полезного.
      Подскажите, есть ли возможность подтягивать в сделку товары по списку в зависимости от выбранного значения в поле сделки? Например, выбираю в сделке какой то комплект, и товары автоматом подтягиваются в сделку. В нашем случае, это вид отделки квартиры. И нужно в зависимости от вида отделки подтянуть материалы

      Удалить
    4. Роман, здравствуйте!)

      Встроенными средствами, думаю, что не получится так сделать.

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

      Удалить
    5. В маркете не нашел ничего похожего. Вы разработкой занимаетесь?

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

      Нет, разработкой я не занимаюсь.

      Удалить
    7. Добрый день! а можно более подробно вашу реализацию счётчика. Была бы очень благодарна примерам))

      "Я не пробовала это реализовать, но теоретически должно работать:
      1. Добавить служебный процесс с одним полем "Значение счетчика" с типом число или целое число.
      2. Добавить один элемент этого процесса со значением 0 в поле из п.1. Запомнить ID этого элемента.
      3. Добавить бизнес-процесс для этого процесса (без автозапуска), который делает только одно действие: прибавляет 1 к значению в поле "Значение счетчика" для элемента из п.2
      4. В основной процесс добавить блок "Запуск бизнес-процесса". Настроить его на запуск бизнес-процесса из п.3

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

      Удалить
    8. В любом случае спасибо!

      Удалить
    9. Добрый день!) Примера пока нет, потому что не совсем представляю, как и зачем в такой реализации в итоге использовать значение счетчика) У Вас как задача формулируется, для чего нужен счетчик?

      "Добрый день! а можно более подробно вашу реализацию счётчика. Была бы очень благодарна примерам))"

      Удалить
    10. Здравствуйте. Вы пишете: "прибавляет 1 к значению в поле "Значение счетчика" для элемента из п.2", а вот как изменить значение поля для определенного элемента с известным ID? Можно ли считать значение поля из элемента с известным ID?

      Удалить
    11. "Можно ли считать значение поля из элемента с известным ID?"

      Встроенными средствами - нет.
      Я использую плагин https://www.bitrix24.ru/apps/?app=shef.customactions из Маркетплейс.

      Удалить
  7. Доброй ночи. А я делаю так же, но почему то пишет: Не удалось определить место для создания папки. Хотя как в примере указываю ИД создаваемой папки. Почему то ИД папки это 4значное число, а не название папки.

    ОтветитьУдалить
    Ответы
    1. Здравствуйте)
      ID папки - это число.

      Ошибка происходит на этапе "Загрузить файл в хранилище диска"? Если да, то перепроверьте ещё раз вот эту подстановку http://joxi.ru/YmEN1n0F05V5N2 из дополнительных результатов.

      Мой тестовый процесс работает без ошибок.

      Удалить
  8. Спасибо. Наконец разобралась. Я выбирала общую папку, и указывала ид создаваемой папки. Не работало. Исправила на папку диска и все заработало. Еще раз спасибо большое!!!

    ОтветитьУдалить
  9. Приветствую всех)
    Люба, спасибо за ваш опыт, с диском наигрался)
    подскажите,
    1) что вы имеете ввиду когда говорите "разработать активити в редактор бизнес-процессов"? В облаке можно как то расширять возможности БП? Имеется ввиду через какие то приложения или через REST API?

    2) Каким образом можно в сделку подсунуть ссылку на файл на диске. Я попытался создать поле "файл" но не знаю как туда подставить файл с диска. Или поле "файл" в сделке не поддерживает фичи с диска, там только загрузка с компа?

    3) Может быть знаете какой нибудь мощный лайфхак, - какую ссылку можно сконструировать, чтобы можно было по клику на ссылку открыть документ с общего диска на просмотр\редактирование? У меня пока что получилось только сформировать ссылку на карточку документа на диске, либо ссылку на прямую скачку.

    4) немного не по теме, но.. Можно ли с помощью БП создавать комментарии к сделке? (в облаке).

    Буду благодарен, если найдете время.

    ОтветитьУдалить
    Ответы
    1. Добрый день!)

      1.

      Да, с помощью REST API можно доработать активити для редактора бизнес-процессов. Вот ссылка на создание активити https://dev.1c-bitrix.ru/rest_help/bizproc//add.php. Вот ссылка на вебинар от Битрикс24 https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=97&LESSON_ID=7999&LESSON_PATH=7853.7857.7999 - там разработчики подробно всё рассказывают. Может быть есть более свежие видео, надо искать)

      В Маркетплейс много разработчиков выкладывают готовые активити. Пример: https://www.bitrix24.ru/apps/?app=shef.customactions.

      Удалить
    2. 2 и 3.

      Очень подробно эти вопросы изучала, но достаточно давно.
      Насколько я знаю, всё ещё нет хорошего способа привязать файлы с диска к сделке.

      Хотелось бы, чтобы было что-то типа "Диск сделки" - отдельная вкладка для сделки, где можно загружать/привязывать документы из диска.

      Как вариант, можно пользоваться полем не с типом данных "Файл", а с типом данных "Ссылка". В поле указывать ссылки на документы диска или на папку диска, где хранятся все документы по сделке.

      Удалить
    3. 4.

      Стандартными возможностями бизнес-процессов, насколько я помню, так сделать не получится.

      В REST API есть вот такое действие https://dev.1c-bitrix.ru/rest_help/crm/stream/livefeedmessage_add.php.
      Можно его потестировать. Если оно добавляет сообщение в ленту сделки, то на его основе можно разработать активити.

      Но лучше поискать в Маркетплейс. То же приложение https://www.bitrix24.ru/apps/?app=shef.customactions что-то похожее предлагает: http://joxi.ru/Drlp7Q9hvlNJ1r.

      Удалить
  10. Добрый день!
    Ваш пример конечно интересный, но как же конфиденциальность?? Ведь в общей папке этот файл может посмотреть любой сотрудник!

    Простейший пример согласования договора:

    Весьма логично, что инициатор бизнес процесса и рецензент(или группа рецензентов) должны иметь общий доступ к папке, в которой БП сохраняет договор, но что очень странно, такой возможности нету! Нужно предварительно настраивать папку с правами, что есть невозможным, так как инициатором может быть любой сотрудник и заранее права задать нельзя по этой причине. Другой вариант как у вас, но тогда эти договора смогут смотреть все кому не лень. Есть конечно третий вариант, костыль - это копировать/перемещать файл в самом БП с папки инициатора в папку группы рецензентов, а когда нужно доработать копировать назад с папки рецензента в папку инициатора, но это очень не удобно! И теряется история изменений.

    По моему это серьезная проблема!

    ОтветитьУдалить
    Ответы
    1. Евгений, добрый день!)
      Для реальных задач проблема с правами действительно есть. Пока хорошего решения я не нашла.

      Удалить
  11. Люба используете ли какой то типовой кейс по хранению файлов по клиенту\сделке на диске? Если есть возможность - поделитесь.. У меня пока видится оптимальным такой вариант - при создании сделки создавать папку на диске аля \компания\сделка\ и прикреплять в поле сделки. Потом из поля имеем быстрый доступ к папке по сделке.

    Учитывая ваш опыт может есть какое то более прогрессивное решение?

    ОтветитьУдалить
    Ответы
    1. Добрый день!)

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

      Хотелось бы, чтобы было что-то типа "Диск сделки" - отдельная вкладка для сделки, где можно загружать/привязывать документы из диска.

      Как вариант, можно пользоваться полем не с типом данных "Файл", а с типом данных "Ссылка". В поле указывать ссылки на документы диска или на папку диска, где хранятся все документы по сделке.
      -------------------

      То есть у меня такой же вариант, как и у Вас)

      Удалить
    2. Не знаю, насколько это актуально, получилось в поле документа через запущенный БП отобразить ссылку на папку диска, создаваемую в этом же БП.

      Удалить
  12. И еще, может быть вы знаете каким образом можно вставить в поле сделки короткую ссылку? У меня стоит задача сохранять в карточке сделки ссылку на папку этой сделки на диске, и потенциально выводит в списке (если потребуется). По умолчанию в поле с типом "ссылка" вставляется полные линк и занимает уйму места.

    Смысл в том чтобы сделать как в этой идее https://idea.1c-bitrix.ru/27555/
    Либо как нибудь еще, но я не знаю как..

    ОтветитьУдалить
    Ответы
    1. Настроек для отображения ссылок я не вижу на портале.
      Скорее всего такой возможности пока нет.

      Удалить
  13. Здравствуйте по какой причине в записи в отчет при выполнении БП выходит такая ошибка.
    Папка создается а фаил туда не грузится.
    Загрузить в Диск Не удалось определить место для загрузки

    ОтветитьУдалить
    Ответы
    1. Александр, некоторое время не занималась блогом. Если проблема актуальна - напишите в коммент, попробую проверить.

      Удалить
  14. Здравствуйте, Любовь!
    Может Вы сможете подсказать.

    Б24 - облачная

    Задача: Из сделки генерировать файл doc, сохранять его на диск (уже реализовано через Генератор документов), созданный файл отправлять на указанную почту через БП.

    Использую: элемент конструктора БП Почтовое сообщение. Не удается прицепить только, что созданный файл к отправляемому сообщению. Знаю ID только что сгенерированного файла, но не знаю как его прицепить через поле Вложения (каким кодом можно указать файл вложения используя ID этого файла).

    ОтветитьУдалить
  15. Программно установить права на диск группы https://dev.1c-bitrix.ru/support/forum/forum23/topic112805/

    ОтветитьУдалить
  16. Добрый день! Подскажите пожалуйста есть ли какой нибудь стандартный способ из Бизнес процесса восстановить файл из Корзины. Битрикс облачный.

    ОтветитьУдалить
    Ответы
    1. Добрый день! Стандартного способа не знаю. Но метод для восстановления файла из корзины есть в api. Как вариант, можно использовать приложение для выполнения выполнения этого запhоса к api. Либо использовать вебхук или разработку своего активити.

      Удалить
  17. Добрый день, подскажите, у меня уже есть папки на диске, и в каждой папке мне нужно создавать подкаталог, то есть пользователь будет уже указывать наименование папки в которой нужно создать подкаталог. но как мне битриксу объяснить что именно в этой папке надо создать новый подкаталог, а не на общем диске в корне?

    ОтветитьУдалить
    Ответы
    1. Добрый день!
      Попробуйте сначала каждый раз в корне общего диска создавать выбранную пользователем папку. Дублирования этих двух папок не будет - в доп результатах этого действия просто получите ID уже существующей папки. А на следующем шаге можно уже создать подкаталог в полученной на предыдущем шаге папке скрин.

      Удалить
  18. Добрый день! Подскажите как можно реализовать удаление файлов в папке на общем диске которые, допустим, старше 6 месяцев.

    ОтветитьУдалить
    Ответы
    1. Добрый день! Пока не сталкивалась с такой задачей.

      Удалить
  19. Здравствуйте. Подскажите хоть направление реализации. Необходимо забирать определенные файлы с писем и класть их в папку на общем диске.

    ОтветитьУдалить

Отправить комментарий

Популярные сообщения

Расширение возможностей бизнес-процессов с помощью вебхуков: работа с задачами