Задать вопрос
  • Как получить контакт из бизнес-процесса?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    У вас есть как минимум 3 способа (а на самом деле еще больше):

    Вариант 1: парсер
    $companyId = $this->ParseValue('{'.'=Document:ID}');


    Вариант 2: runtime свойство:
    list($property, $companyId) = $this->getRuntimeProperty(
    	\Bitrix\Bizproc\Workflow\Template\SourceType::DocumentField,
    	'ID',
    	$this
    );
    
    // $companyId - идентификатор сущности


    Вариант 3: document service
    $documentId = $this->getDocumentId();
    $documentService = $this->workflow->getService('DocumentService');
    $document = $documentService->getDocument($documentId);
    
    $companyId = $document['ID'];
    Ответ написан
    2 комментария
  • Как можно в Б24 запускать бизнес-процессы отложено?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Такого механизма нет.

    Что можно сделать? Очевидных вариантов два:

    ЛИБО запускать процесс, но процесс ставить на паузу до нужной даты.
    Здесь конечно минус, т.к. процесс является запущенным и повторное совпадение комбинаций вызовет еще один процесс и т.д. Очень опасно вешать такие штуки на изменение документа.

    ЛИБО запускать другой процесс, который в специальное место (например УС/таблицу/инфоблоко) запишет что нужно запустить для такого-то элемента.
    А потом отдельным скриптом - запускать БП на элементах из этого списка.
    Ответ написан
    Комментировать
  • Как в Битрикс24 получить список записей из вкладки История у лида?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Как получить этот список?


    REST метода на получения этой истории нет.

    Единственный метод через который можно получить историю стадий это упомянутый crm.stagehistory.list
    Ответ написан
  • Кастомное действие в Битрикс24 после создания задачи?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Если мы говорим про облачную версию - нельзя.

    Если мы говорим про коробочную версию Битрикс24 и используя только штатные сдества, то нельзя.

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

    Давайте предположим, что вы хотите отобразить некоторую текстовую информацию - мы не ждем ввода данных, просто оставим какое-то примечание какому-то сотруднику.
    Как это можно сделать?
    1. Сделать javascript код, который вызывает всплывающее окно и подключим его к сайту.
    После этого вызвав функцию в консоли вы сможете получть свое окно - уже хорошее начало.

    2. Затем нужно создать свое push-событие и сделать так, чтобы при выбрасывании вашего push сообщения всплывало ваше окно.
    Здесь поможет статья разработчика (почти из документации): https://dev.1c-bitrix.ru/community/blogs/hazz/work...

    3. Затем дело за малым - подписать на событие создания задачи, проверить из какого шаблона она создана и выкинуть событие.

    А что же делать если нужны поля ввода?
    Тогда придется определиться что нужно делать если полей нет.
    Всего существует 2 стратегии: если поля не заполнены - не создавать задачу (стратегия А) и все равно создать задачу, но записать где-то (а возможно и когда-нибудь напомнить) (это стратегия Б).

    В случае стратегии А мы не создаем задачу по шаблону руками.
    Мы точно так же делаем всплывающее окно, но добавляем обработку формы. Т.е. задача создается по кастомной кнопке и только в случае если все заполнено.
    Если что-то не заполнено - задачу по шаблону не создаем.
    Минус конечно в том, что задача будет создаваться по кастомной кнопке, а если ее создать стандартными средствами то увы этот механизм не отработает.

    В случае стратерии Б мы делаем почти то же самое, однако нам нужно еще создать промежуточное хранилище с указанием - заполнили ли по задаче Х поля и выбрасывая форму создавать запись в этом хранилище.
    Ответ написан
    1 комментарий
  • Битрикс 24 облако. Как сохранить значения множественного поля в разные переменные?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Это не сложно: нужно всего-лишь довести дату до формата "d.m.Y", затем пройти через explode и результат скормить итератору. Тогда по ключам вы сможете определить (0 - дата, 1 - месяц, 2 - год).

    646b0efb0e94b556125377.png
    646b0f081ede9066978439.png
    646b0f0d4d8b1084757002.png
    646b0ea813a72841372803.png
    646b0eea40f4a611856770.png
    Ответ написан
    1 комментарий
  • Проблема с добавлением чек листа по событию б24. Что подскажете?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Не могу понять почему происходит удаление


    Это происходит потому что процесс создания задачи не заканчивается на создании записи о задаче.

    Добавление задачи из публичной части сводится к методу: `Bitrix\Tasks\Manager\Task::add`, где вначале происходит создание записи и инициирование события (строчка 139), а затем объединение чек-листов (строчка 177). Таким образом получается что изначально при создании задачи передается пустой набор чек-листов, потом вы создаете элементы чек-листов, а затем merge производит удаление существующих чек-листов, которые не были переданы в изначальном запросе, а так как их не было - просто удаляет ваши созданные чек-листы.

    Как можно избежать этой ситуации?

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

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

    3. Так же, неплохим хаком будет являться использование background job - т.к. он выполняется в конце страницы уже после выполнения всех правок.

    Обращу ваше внимание - событие является независимым от контекста, поэтому вполне может быть такая ситуация, что при создании задачи на агентах (или консольном скрипте) у вас `$USER` будет null, таким образом ваш скрипт упадет с фатальной ошибкой. Но наличие `$USER` еще не являетися поводом для радости, сам GetId может вернуть `null`, таким образом фатальная ошибка прилетит уже от контроллера прав.
    Рекомендую использовать выполнить проверки и сделать fallback механим - подставить ID = 1 (или самому бросить фатальную ошибку) в случае непредвиденной ситуации
    Ответ написан
  • Как выполнять метод crm.entity.mergeBatch автоматически?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    В Битрикс24 нет метода который бы прошелся по списку и вернул наборы сущностей "которые он посчитал дубликатами".
    Есть метод на объединение уже известных и на изменение поиска (добавление в дубликаты своих полей).

    Здесь работают 2 других механизма:
    1. Автоматический поиск и объединение. Включается в настройках CRM, после чего сам проверяет актуальность.
    2. Ручной поиск через `crm.duplicate.findbycomm` или `crm.*.list`.

    Метод скорее выдан не для регулярного использования, а для точечного, когда например есть какие-то косвенные признаки (например приложение добавляет какой-нибудь уникальный ключ и потом в фоне по нему делает склейки).
    Ответ написан
  • Как поменять сотрудника отвечающего за обработку лида в Битрикс24?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Я вижу два варианта как это можно проделать:

    Вариант 1: Найти кто отправляет лиды на сайте. Скорее всего есть какой-то обработчик события добавления элемента в инфоблок (или кусок кода отправляющий в б24 в самом компоненте).
    И там можно задать поле ASSIGNED_BY_ID и передать туда идентификатор нового ответственного.

    Вариант 2: сделать БП при добавлении (или робота на первой стадии), проверять ответственного и менять.

    Я бы рекомендовал все же выполнить пункт 1, т.к. это наиболее разумный шаг.
    Ответ написан
    Комментировать
  • Как одновременно создать сделку и контакт?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Я умею это делать через батч, но в данном случае нужен обычный метод, как такое сделать?


    В формулировке "одного стандартного метода" никак.
    Вы путаете интерфейсные возможности с возможностями REST, а это не одно и то же. Собсвтенно говоря в самом битриксе это тоже не один механизм - сначала выполняются задания контроллеров (т.е. создание контакта), а потом уже основное действие (создание сделки).

    Битрикс в плане api досаточно примитивная система: при создании сделки вы создаете только сделку, а при создании контакта только контакт.

    Таким образом есть 2 варианта как это можно сделать:
    - Через батч (создать контакт, создать сделку указав CONTACT_ID)
    - Через бизнес-процессы. Т.е. создать Н доп.полей в сделке и БП запускаемый при создании, который получит поля, создаст контакт и изменит сделку
    Ответ написан
    Комментировать
  • Как реализовать дублирование сообщений из чата Битрикс24 в чат Telegram?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Как уже сказали в предыдущем комментарии от SHADRIN можно воспользоваться API, но есть другой путь: если у вас есть маркет, то можно использовать чат-бот Многоцелевой и telegram (телеграм) бот , который это умеет и еще много всего другого.
    Ответ написан
    1 комментарий
  • Как кастомизировать/переименовать элементы карточки сделки в коробке?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    В курсе Bitrix Framework есть глава по работе с языковыми фразами и там есть раздел посвященный этому - "Замена фраз в продукте".

    Соответственно принцип такой:
    1. Сначала ищем языковую фразу. В Битриксе много однотипных фраз в разных компонентах системы, поэтому задача будет не самой простой. Для этого проще всего воспользоваться средством поиска языковых фраз из модуля Переводы (дописать к адресу страницы "show_lang_files=Y" и после обновления будет специальный дополнительный диалог поиска языковых фраз).
    2. Затем через механизм user_lang изменяем нужную фразу.
    3. Повторяем шаги 1 и 2 для всех фраз.
    Ответ написан
    1 комментарий
  • Нужен совет по облачной версии Битрикс24. Разрабатывать своё или использовать Б24?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Однозначного ответа на ваш вопрос не будет.

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

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

    Начните с простых шагов:
    1. Определите что вы вкладываете в понятие документооборот. Какая цель стоит перед этой системой. Что самое важное (хранение, согласование или что-то другое)
    2. Распределите все фичи по уровням важности и сравните с тем что есть в наборе Битрикс24. Обратите внимание на смарт-процессы и универсальные списки в Битрикс24.
    3. Попробуйте собрать тестовую схему, потом попробуйте расширить ее.

    Как только вы проделаете эти шаги, то у вас сложится представление о возможностях системы.
    Ответ написан
    Комментировать
  • Как выделить в статистики звонок из исключения?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Готового модуля нет.
    Для облачного Битрикс24 такое можно сделать только через браузерный плагин.
    Для коробки можете попытаться разработать свое, но будет не просто
    Ответ написан
  • Как в БП к лиду указать контакт?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Но не могу найти Активити которое позволит туда записать.


    Можно использовать действие "Изменение документа" если БП запущен на том же элементе. Если БП запущен на другом элементе то можно сделать маленький БП на изменение и запускать этот БП
    Ответ написан
    Комментировать
  • В какой таблице Битрикс.24 хранятся благодарности?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Технически благодарности это не просто записи инфоблока "Доска почета" в типе "Орг.структура", но и пост в ленту.

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

    Что касается таблицы, то это таблица элементов (b_iblock_element), но это не все - часть данных находятся в таблице свойств (b_iblock_element_property).

    В предыдущем сообщении есть указание на `iblock_id = 2`, однако это не совсем верно. Идентификатор этого инфоблока находится в b_option (MODULE_ID: `intranet`, NAME: `iblock_honour`). В реальности там может быть и 2 и 4 и любое другое число.
    Ответ написан
  • Как в Битрикс24 установить тип клиента через API?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Когда оформляется заказ, то нужно отловить комментарии заказа и записать их в сделку. Так же и "тип клиента" установить.


    Никак. Архитектурно заказ в Битрикс24 устроен так, что сначала создается заказ, потом создается сделка, потом связь заказа с сделкой и уже после чего контакты/компании (если необходимо).
    Можете попробовать подвязаться на событие Timeline, получить создание первой записи для заказа - в этот момент все связи уже есть и все элементы созданы и после этого можете менять сделку и заказ как вам нужно
    Ответ написан
    Комментировать
  • Как в Битрикс 24 создать свою сущность для диалога выбора сущностей?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Нет, не имеется.
    В данном контексте понимается что вы можете создать свой набор элементов из своего источника. В данном случае этим источником может выступать что угодно, а прослойка между источником и тем что пользователи будут видеть и называется сущность.
    Ответ написан
    1 комментарий
  • Как с помощью REST API получить значения пользовательских полей пользователя битрикс24?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Пользовательские поля вы можете получить через любой REST метод на получение пользователей, если у вас выбран scope "user.userfield" и если код поля начинается с UF_USR_

    Например, если вы создали поле UF_MONDAY и назначили его пользователю, то получить его через REST по работе с пользователем будет нельзя*.

    * - вы можете попробовать подменить класс Bitrix\Rest\Api\User или перекрыть пользовательский scope, но это очень трудоемкий процесс
    Ответ написан
    Комментировать
  • Как выгрузить через API историю лида?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    REST метода на историю изменений нет, есть только на Timeline, но это не одно и то же.

    По результатам вашего сообщения, я оставил заявку (43406) на реализацию этого метода и было бы очень хорошо, если бы вы поставили плюс и повысили ее приоритет.
    Ответ написан
    Комментировать
  • Как передать значение в список?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Дело в том, что строка представляет из себя последовательность символов, а поля типа Список, Привязка к * это комплексные поля, которые хранят в себе идентификатор элемента.
    Таким образом, вы пытаетесь записать строку в поле, которое ожидает число.

    Для того чтобы ваша задумка заработала вам нужно промежуточное звено: некоторый скрипт, который примет от вас строку, поищете среди сущности элемент с таким названием и вернет его ID (либо создаст новый элемент и вернет его ID) и далее уже нужно использовать именно этот ID.
    Вы можете воспользоваться как API, который предложил belc, вы так же можете составить ручной маппинг (через блоки "Условия", если список не большой).
    Ответ написан
    Комментировать