Обязательные поля: 2 способа проверки заполнения

Артем Басамыкин, партнер-интегратор ПланФикса, делится очень практичным и востребованным кейсом проверки заполнения полей перед переводом задачи на следующий этап бизнес-процесса.

На самом деле, это даже не один, а два способа, каждый из которых имеет свои преимущества. И если первый на практике используется достаточно часто, то второй способен по-хорошему удивить многих пользователей ПланФикса.

Слово Артему.


Самоизоляция – отличный повод для описания давно задуманного кейса.

Поговорим про обязательные поля в задачах. В шаблоне любое поле можно сделать обязательным и создать задачу без его заполнения будет невозможно. Но что если потребность в обязательном поле появляется не сразу, а только когда задача переходит в определенный статус? Например, для задачи-сделки, реквизиты договора и контрагента нам понадобятся только на этапе «Формирование договора». До него доходит не каждая задача, поэтому заполнять эти поля сразу при создании задачи бессмысленно.

Я покажу два варианта решения, которые мы используем для наших клиентов при внедрении PlanFix.


Автоматические сценарии

Использование автоматических сценариев – самый простой вариант, который можно реализовать на любом тарифном плане (если есть свободные неиспользованные сценарии).

Пример:
Для перевода задачи в статус «Отправлено КП» должно быть обязательно заполнено поле «Бюджет».

Для этого мы добавляем следующий сценарий:

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

По этому сценарию мы вернем задачу на предыдущий этап, если заданное условие не выполнено. Чтобы уведомить об этом исполнителя добавим в задачу комментарий с текстом ошибки. Рекомендую делать комментарий не от имени «Автора действия», а, например, от имени бота. В таком случае он появится в хронике, и автору действий придут уведомления.

Теперь при переводе задачи с пустым полем Бюджет, мы получим вот такой результат:

Сообщение о том, что не указан бюджет сделки

Сценарий очень прост в настройке, если проверить нужно только несколько условий.

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


Кнопки и вычисляемое поле

Данное решение более функциональное, но для него потребуется тарифный план «Бизнес» или «Корпорация».

Создаем вычисляемое поле «Предупреждения», которое добавим в шаблон задачи.

В самом поле добавляем нужные проверки с помощью конструкции ЕСЛИ

Проверка на заполненность нужных полей в вычисляемом поле

Чтобы привлечь внимание к предупреждению, сделаем его красным и немного увеличим шрифт (параметр поля «Тип результата» должен быть «Строка HTML»):

ЕСЛИ({{Задача.Номер счета}}=0;"<b><font size='4' color='#FF0000'>Не указан номер счета</font></b><br>";"")
+ЕСЛИ({{Задача.Дата счета}}="";"<b><font size='4' color='#FF0000'>Не указана дата счета</font></b><br>";"")
+ЕСЛИ({{Задача.Контрагент}}="";"<b><font size='4' color='#FF0000'>Не указан контрагент</font></b><br>";"") 

Проверять можно не только поля задачи, но и поля контактов, заполненность справочников и т.д.

При проверке числовых полей, их необходимо сравнивать со значением ‘0′, а для проверки остальных полей – с пустой строкой “”.

Отмечу, что в этом поле можно создавать конструкции намного сложнее. Например, можно разбить поля по статусам. В статусе «Новый счет» – обязательным является поле «Контрагент», а уже в следующем статусе «В работе» нужно будет обязательно указать номер и дату счета:

ЕСЛИ({{Задача.Статус}}="Новый счет"; ЕСЛИ({{Задача.Контрагент}}="";"<b><font size='4' color='#FF0000'>Не указан контрагент</font></b><br>";"");"")
+ЕСЛИ({{Задача.Статус}}="В работе";ЕСЛИ({{Задача.Номер счета}}=0;"<b><font size='4' color='#FF0000'>Не указан номер счета</font></b><br>";"")
+ЕСЛИ({{Задача.Дата счета}}="";"<b><font size='4' color='#FF0000'>Не указана дата счета</font></b><br>";"")
+ЕСЛИ({{Задача.Контрагент}}="";"<b><font size='4' color='#FF0000'>Не указан контрагент</font></b><br>";"");"")

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

Итак, поле с ошибками у нас есть, теперь нам нужно запретить переводить задачи в этот статус напрямую.

Запрет прямого перевода задачи в статус

Добавим кнопку, при нажатии на которую задача будет принудительно менять статус на нужный. В качестве условий для появления этой кнопки нам достаточно указать текущий статус, на котором должны быть доступна кнопка, а также пустое поле «Предупреждения».

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

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

Для исключения подобных случаев можно добавить кнопку «Обновить ошибки», при нажатии на которую вычисляемое поле будет принудительно обновляться.

Кнопка "Обновить ошибки"
кликните для просмотра в полном размере

В итоге работа данного решения выглядит так:

Проверка на заполненность полей и ошибки, указывающие на то, какие поля не заполнены

Надеюсь описанный кейс был полезен.

Если вам необходима профессиональная помощь в настройке PlanFix под ваши задачи, пишите на почту info@crm2b.pro или в наш телеграм бот.

Артем Басамыкин


Дмитрий Гончаренко: Как видите, есть свои плюсы и в карантине 🙂 Если у вас есть чем поделиться с нашей аудиторией, используйте его с пользой – напишите рассказ о том, как вы используете ПланФикс, какие задачи решаете с его помощью или поделитесь интересной настройкой и пришлите его в нашу Службу поддержки. Мы его опубликуем, вам будет приятно, а нашим читателям – полезно.

Дмитрий Гоняаренко
Команда ПланФикса

34 комментария

  1. Аватар

    Отличная статья!
    Артем, спасибо, что поделились опытом 🙂

    Уже попробовал под свои цели, пока тестирован, заметил, что в примере кода в font size пропущен пробел (написано fontsize вместо font size), предлагаю исправить для удобвства других пользователей 🙂

  2. Аватар

    Хорошая заметка для “новичков”. Также предпочитаю использовать “способ 2”, но обычно вывожу “ошибки”последовательно, а не все вместе (в этом случае мне кажется формула становится проще).
    В использовании второго способа есть нескольку неудобств.
    1. На тарифе бизнес всего 5 кнопок в процессе, на корпоративном 15. Их просто не всегда хватает для реализации фантазий клиентов.
    Хотелось бы больших лимитов. Также хорошо бы добавить пяток кнопок в тариф Профессиональный, зачастую приходится заказчику навязывать тариф Бизнес”, чтобы он получил удобства работы с кнопками, при этом по остальным параметрам он вписывается в Профессионал (хотя там хотелось бы чуть побольше ресурсов по полям и сценариям в процессе).
    2. При работе с вычисляемым полем очень неудобный редактор для изменения текста, очень сложно разобраться в этой цепочке ЕСЛИ, особенно если там не только если но и ИЛИ, И, всякие другие формулы (типа СОВПАД, ПРАВСТР и т.п.).
    3. Пока все условия для вывода кнопки не выполнятся, то они не горят. И порой пользователю очень трудно понять что не так и, конечно, подсказки помогают, но не всегда это возможно делать учитывая что на вычисляемые поля тоже есть свои ограничения. Было бы “приколько” видеть даже те кнопки по которым условия не выполнены (кроме права нажатия для текущего пользователя). Их не обязательно выводить на форму задачи под описание, уже как то на форуме мелькала мысль сделать дополнительную вкладку Кнопки в панели справа. В этом случае в панели кнопки могут рисоваться не при загрузке самой задачи, а только при переходе на вкладку “кнопки” и это не должно серьезно нарушить производительность. В этом блоке показываются и “не активные кнопки и подсказка заданная в описании кнопки. Таким образом пользователь может прочитать описание и понять что ему нужно сделать чтобы кнопка “стала активной”.

  3. Аватар

    Как раз неделю назад придумал такой способ с отбрасыванием статуса обратно – и сегодня нагуглил, что изобрёл велосипед 🙂

    Но остаётся открытым вопрос: как сделать так, чтобы (по способу №1) сценарий отбрасывал только статус для автора изменений, из его личного статуса в другой личный статус?

    В триггерах сценария есть отдельные пункты “Статус” и “Статус для автора изменений”. А вот в разделе “Выполнить” есть только “Изменить статус”, а опция “Изменить статус для автора изменений” отсутствует. В разделе 3 настройки сценария указан пункт “Выполнять от имени автора изменений”. При этом написанный сценарий, как показала практика, меняет статус сразу для всех.

    Есть ли способ, чтобы сценарий менял статус задачи только для одного сотрудника?

    1. Дмитрий Гончаренко

      Насколько я представляю, сейчас такого способа нет. Тут нужна доработка именно в этом вопросе:

      >> в разделе «Выполнить» есть только «Изменить статус», а опция «Изменить статус для автора изменений» отсутствует

      1. Аватар

        Благодарю за ответ!
        Полагаю, было бы логично такую функцию реализовать, раз уж в сценарии есть отдельное условие “Статус для автора изменений”. Выглядит как её логичное продолжение.
        К тому же, такая опция не загромождает интерфейс (просто +1 строка к выбору выполняемых операций).
        Есть ли шанс, что эта функция со временем появится?
        Примете такое пожелание?

        1. Дмитрий Гончаренко

          Конечно. Я посмотрел, Ваш запрос уже третий на эту тему, это повышает приоритет этой доработки, так что она обязательно появится.

  4. Аватар

    Возможно ли как то организовать обязательность заполнения полей справочника различными сотрудниками? Например, вначале один вносит регистрационные данные, затем по мере выполнения задач/прохождения задачей этапов другие сотрудники обязательно заполняли остальные поля, и дальше в зависимости от наполняемости справочника задача по сценарию меняла статус?

    1. Аватар

      Да, по тому же принципу, можно проверить и заполнение полей в записи справочника, которая является полем этой задачи.
      Единственный нюанс, обновление проверочного поля можно будет реализовать только через кнопку “Обновить ошибки”, про неё я указывал в статье.

            1. Аватар

              Со сценариями тут будет сложнее. Можно попробовать проверять поля справочника по условию “Содержит\не содержит” в сценариях, например вот так http://skrinshoter.ru/s/030620/QRMe72S0

              Но это не всегда удобно, так как в ряде случаев не известно, какие символы будут в этом поле.

  5. Аватар

    Интересный пример, но видимо не актуален на сегодня, «Строка HTML» не найти в вычисляевомое поле.
    Рыская по просторам интернета мне удалось создать формулу только для одного поля, как в эту формулу добавить критерии для проверки еще нескольких полей не нахожу. Может кто подскажет?
    Вот что мне удалось собрать:
    %%$ЕСЛИ({{Задача.№ контракта}}=””)$%%Не указан номер контракта%%$ИНАЧЕ$%%Номер контракта – Ok %%$КОНЕЦБЛОКА$%%

    1. Аватар

      Да, Строки HTML к сожалению больше нет.
      В вашей формуле можно использовать для проверки нескольких условий можно использовать И:
      %%$ЕСЛИ(И({{Задача.№ контракта}}=””;{{Задача.ЕЩЕодноПОЛЕ}}=””))$%%Не указан номер контракта%%$ИНАЧЕ$%%Номер контракта – Ok %%$КОНЕЦБЛОКА$%%
      Цвет, кстати, также можно использовать, но уже обычными средствами текстового редактора

      1. Аватар

        Спасибо, думал что я ощибку допустил, да на счет цвета и формата текста я уже заметил что редактором можно изменять.
        Еще один вопрос, как добавить к условиям статус задачи, тоесть сначало проверка по статусу задачи потом уже:
        >проверка первого поля ТЕКСТ да или ТЕКСТ нет
        >проверка второго поля ТЕКСТ да или ТЕКСТ нет и так далее.
        Заранее Вам большое спасибо!

          1. Аватар

            Оказывается формулы можно писать отдельной строкой.
            Вот что у меня получилось:
            %%$ЕСЛИ({{Задача.Статус}}=”Согласование с руководителем”)$%%%%$ЕСЛИ({{Задача.№ контракта}}=””)$%%Не указан номер контракта%%$ИНАЧЕ$%%Номер контракта – Ok%%$КОНЕЦБЛОКА$%%

            %%$ЕСЛИ({{Задача.Статус}}=”Согласование с руководителем”)$%%%%$ЕСЛИ({{Задача.”Срок оплаты, дней:”}}<1)$%%Cрок оплаты, указанно 0 дней%%$ИНАЧЕ$%%Срок оплаты – Ok%%$КОНЕЦБЛОКА$%%

            %%$ЕСЛИ({{Задача.Статус}}=”Согласование с руководителем”)$%%%%$ЕСЛИ({{Задача."Период возврата, дней:"}}<1)$%%Период возврата, указанно 0 дней%%$ИНАЧЕ$%%Период возврата – Ok%%$КОНЕЦБЛОКА$%%

            %%$ЕСЛИ({{Задача.Статус}}=”Согласование с руководителем”)$%%%%$ЕСЛИ({{Задача."Плафон, лей:"}}<1)$%%Сумма плафона, указанно 0 дней%%$ИНАЧЕ$%%Плафон– Ok%%$КОНЕЦБЛОКА$%%

Добавить комментарий