Блокировка поля при изменении без разработки и маркета

Можно написать локальное приложение и установить готовое решение из Маркетплейса Битрикс24, скажите вы, для решения задачи связанной с блокировкой поля от изменения. И будете правы. Приложение или модуль можно написать, готовое решение для решения этой задачи тоже есть.

Но, что если вам нужно решение, которое:
1. Хранит ваши данные у вас в вашем Битрикс24, а не отдает их другому, стороннему приложению на проверку.
2. Выполняется без разработки какого-то приложения, так как элементарно нет бюджета или специалиста, который сможет реализовать это.
3. Или у вас коробочное решение в закрытом контуре и с маркета ничего не установить.

Хочу вас обрадовать, решение есть! Мы можем написать бизнес-процесс, используя штатные функции и возможности. Ниже я вам расскажу, как этот бизнес-процесс написать и что для этого нужно.

Предлагаю взять за основу поля сущности «Компания», но писать БП с расчетом, что возможно мы будем его дорабатывать и у нас должны будут присутствовать функции блокировки, например полей сущностей «Контакт» и «Сделка».

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


1. Для реализации блокировки полей от изменения мы будем использовать:

Бизнес-процессы с параметрами, смарт-процессы ну и собственно говоря сами сущности, в которых будет блокировка. Чтобы детально понимать процесс, вернемся на шаг назад и разберем, что из себя представляет сам процесс. Процесс блокировки изменения поля в нашем случае строится на том, что мы при создании компании фиксируем некое значение поля и далее при каждом изменении проверяем изменилось ли значение в этом поле и если да, то берем данные из записанного значения в базе и возвращаем его в поле. Получается, что в момент изменения, когда я пытаюсь заменить значение, я его фактически меняю, но система видя это изменение возвращает все как было.


2. Теперь давайте про структуру всего процесса.

1 шагПервым шагом будет являться создание сущности. В момент создания мы должны запускать БП на создание и создавать карточку с дублирующим набором полей в «Смарт-процессе«. Именно «Смарт-процесс» будет выступать нашей базой данных далее БД.
2 шагВторым шагом будет само изменение сущности и мы должны запускать БП на проверку изменений по конкретному полю. Так как на шаге 1 мы уже создали нашу БД с полями, то в момент изменения мы будем обращаться именно к ней и к конкретной карточке, которая соответствует сущности и связана с ней с помощью ID.
3 шагТретий шаг это именно проверка, которая запускается на шаге 2, но сам БП находится в Смарт-процессах.
4 шагЧетвертым шагом, если была замечена попытка изменения, то возврат базового значения в поле сущности, которое зафиксировано в карточке Смарт-процесса далее в БД. Тут происходит запуск БП с параметром. Сам БП находится в бизнес-процессах сущности.
5 шагНа 5 шаге мы делаем возможность тем, кто имеет доступ к БД менять значения в этих полей. При изменении значения в БД далее карточка Смарт-процесса, меняется значение и в сущности.
таблица структуры

Небольшие пояснения.

  • Я использую слово СУЩНОСТЬ, так как к этой структуре может быть применена любая сущность в CRM.
  • БД — это сокращенно база данных.
  • БП — это сокращенно бизнес-процесс.

А теперь давайте перейдем к самой настройке.

  • Первым делом давайте создадим поле с типом строка в сущности «Компания» и назовем его «
    ID карточки полей«
  • Далее создадим Смарт-процесс и назовем его «Карточка полей» и обязательно поставим галочку использовать дизайнер бизнес-процессов. Воронку и стадии я не использую, будет просто список.
  • В Смарт-процессе создадим поля:
    — ID компании
    — Тип компании (это то поле, которое мы и будем блокировать, этих полей у вас может быть несколько)
    — Компания
    — Сущность (это поле содержит в себе список сущностей, необходимо для дальнейшего фильтра и условий БП)

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

ШАГ 1. БП при создании сущности. Весь процесс я завернул в блок действий для удобства и для того, чтобы процесс был в одной оболочке если внутри БП у меня несколько разных процессов.

Сначала мы вытаскиваем значение нашего поля или полей через активити «Выбор данных crm«, далее создаем карточку через активити «Создать элемент смарт-процесса«. И последним шагом записываем ID созданной карточки в поле ID карточки полей с помощью активити «Изменить документ«.

ШАГ 2. В шаблоне БП на изменение, мы запускаем бизнес-процесс отвечающий за проверку. В нашем случае это шаблон на изменение в Смарт-процессах — Карточка полей.

ШАГ 3. Теперь посмотрим на БП, который осуществляет проверку.

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

Следующим шагом идут условия по полям, в нашем примере мы используем одно поле «Тип компании«, смотрим, как выглядит настройка условия.

Ну и соответственно, если поле заполнено, то значит проверяем изменение следующим шагом. Смотрим на условие проверки.

Тут мы берем значение из карточки полей и сравниваем с новым значение в поле «Тип компании» в сущности Компания.

И если было изменение, то запускаем БП и прописываем установленное значение в поле.

А дальше я в комментарий могу просто писать заметку, для отслеживания попыток в таймлайне.

ШАГ 4. Смотрим БП, который находится в бизнес-процессах сущности. В нашем случае в Компаниях. Этот БП мы и запускали выше.

Тут мы обязательно на входе проверяем, какое поле заполнено. В нашем случае должно быть заполнено «Тип компании«, иначе завершение.

Тут мы берем значение для проверки из параметра БП, в которое мы шаго выше передавали значение поля.

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

ШАГ 5. При изменении значения в БД далее карточка Смарт-процесса, меняется значение и в сущности.

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