Ответы пользователя по тегу Битрикс24
  • В какой таблице Битрикс.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, вы так же можете составить ручной маппинг (через блоки "Условия", если список не большой).
    Ответ написан
    Комментировать
  • Возможно ли автоматизировать процесс в Битрикс, при котором при нажатии кнопки данное поле будет выставлять дата/время?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Штатно - нет.

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

    Разобьем искусственно вопрос на 2 части:
    1. Можно ли логгировать операцию экспорта?
    2. Можно ли автоматически запускать экспорт?

    Универсальный ответ на оба вопроса: Штатные средства Битрикс24 не предполагают такую возможность, однако есть обходные пути к реализации похожей механики.

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

    Что касается автоматического запуска экспорта: штатного экспорта по расписанию в Битрикс24 нет, но эту ситуацию вы можете обойти через какую-нибудь RPA (не путать с RPA Битрикс24) - вы можете использовать подручные средства (например скрипты selenium и т.п.) чтобы автоматизировать этот процесс.
    Ответ написан
    Комментировать
  • Как опубликовать BIMI изображение в bitrix24?

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

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

    Вы можете упростить подключение яндекс почты, если подключите его как приложение согласно статье в документации (см. Коробочная версия Битрикс24).

    Это рекомендуемый способ как этого достичь.

    Еще можно купить приложения по подмене smtp аккаунта отправителя, например "Вебпростор: Отправка почты через SMTP", "Fusion: Прозрачная почта" и другие. Однако это менее рекомендумый вариант.

    Просто на сколько я понимаю, если указать несколько аккаунтов в конфиге msmtprc , то это не заработает а будет браться первый конфиг сверху.


    Будет браться либо дефолтный, либо заданный явно.
    Например можно сделать custom_mail и на основании входящих параметров поискать подходящий account и подставлять его для отправки - тоже вариант.
    Ответ написан
  • Возможно ли запретить пользователям принимать звонки из битрикс с мобильного приложения?

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

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

    Во-первых, вы предполагаете что поведение браузера эквивалентно коду на странице. Т.е. одно и то же действие в браузере и в коде дают одинаковый результат, но это не так. Браузер отрисовывает страницу по частям и нет никаких гарантий что в момент выполнения вашего кода (фрагмент document.querySelector('.crm-kanban-item-repeated')) на странице существует хотя бы один элемент с подобным селектором. Более того скажу сразу - этот элемент не существует, так как он добавляется позже через javascript.
    Вам нужно почитать больше про js и про то как браузер рисует страницу - без этого вы далеко не уйдете.

    Во-вторых, вы полагаете что у вас всего 1 элемент (querySelector - вернет первый(!) элемент подходящий под условия), а у вас их может быть много. Т.е. нужно использовать как минимум querySelectorAll. Вы так же полагаете что наличие ноды автоматически делает элемент "повторным", что совершенно не так. Ноду можно вывести у любого элемента, но повторным он от этого не станет.

    В-третьих, даже если вы окрасите элементы, то после перезагрузки данных (не страницы), например при применении фильтра, ваш код не выполнится еще раз и не будет иметь силы.

    Предположим наша задача - покрасить элементы в красный если они повторные.

    Для начала определимся как мы будем красить: я полагаю что проще всего будет создать какой-нибудь css-класс, который будет отрабатывать, если карточка подходит под указанные условия.
    Я буду использовать кастомный класс flah_repeated и для этого я создам css правило:

    .crm-kanban-item.flah_repeated {
    	background-color: red !important;
    }


    Затем я поищу событие, которое отрабатывает при отрисовке карточки канбана. Используя события я могу сразу гарантировать следующие вещи:
    1. Скрипт будет отрабатывать только там где есть канбан. То есть мы не будем искать элементы на других страницах чтобы не повредить их в случае ошибки.
    2. Скрипт будет отрабатывать только когда канбан уже отрисован. То есть все элементы уже есть на странице и мы можем не боятся их отсутствия
    3. Скрипт будет отрабатывать при повторной отрисовке. Т.е. примнение фильтра так же вызовет событие и мы еще раз сможет сделать то что нужно.

    Затем, когда я найду событие, скорее всего оно может быть использовано и в других сущностях, где выполнять подобное мне не нужно, поэтому мне нужно подумать как ограничить действие только нужными элементами

    BX.addCustomEvent("Kanban.Grid:onRender", function(kanbanGrid){
    
    	if ( kanbanGrid.getData().entityType != 'LEAD' )
    	{
    		return;
    	}
    
    	let kanbanItems = kanbanGrid.getItems();
    
    	for (let key in kanbanItems)
    	{
    		if ( key < 1 ) continue;
    
    		let kanbanItem = kanbanItems[key];
    
    		if ( kanbanItem.getDataKey('return') )
    		{
    			BX.addClass(kanbanItem.container, "flah_repeated");
    		}
    	}
    });


    Ну и когда все будет готово, я сделаю расширение (extension) и подключу его на событии пролога, чтобы добавлять к каждой странице.

    Таким образом я не изменю публичную часть и добьюсь того что требовалось в изначальной задаче.
    Ответ написан
    4 комментария
  • Почему не работает добавление почты в методе crm.contact.add?

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

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

    Вместо:
    &fields[EMAIL]='.$sEmail

    Писать:
    &fields[EMAIL][0][VALUE]='.$sEmail

    Чтобы было понятнее, я как и в прошлый раз приложу json body который отработал успешно:

    {
        "halt": false,
        "cmd": {
            "create_contact": "crm.contact.add?fields[NAME]=Test&fields[LAST_NAME]=TEST&fields[EMAIL][0][VALUE]=test@mail.ru",
            "read_contact": "crm.contact.get?id=$result[create_contact][ID]",
            "user_lead": "crm.lead.add?fields[TITLE]=Test Assigned&fields[NAME]=$result[read_contact][NAME]&fields[CONTACT_ID]=$result[create_contact][ID]"
        }
    }
    Ответ написан
  • Как в Битрикс CRM скопировать поле со значениями?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Штатного решения для такой задачи нет, потому что если мы говорим про поле типа "Список" то это сложное поле.
    Почему? Потому что один и тот же элемент (вариант выбора) будет иметь одинаковое название, но разный идентификатор.
    Отсюда получается что для того чтобы это сделать нужно:

    1. Скопировать значения из старого списка в новый.
    2. Составить карту маппинга ID старого значения к ID нового значения
    3. Выполнить обновление установив в новое поле ID нового значения

    Без кода это сделать очень сложно.
    Ответ написан
  • Как добавить имя контакта в лид через батч?

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

    1. Метод `crm.contact.add` добавляет контакт, но он не проверяет был ли он уже создан. Т.е. каждый новый запуск - дополнительный контакт. Желательно конечно проверять контакт перед созданием.

    2. Метод `crm.contact.list` выполняет поиск контакОВ удовлетворяющих условиям. Т.е. вам возвращается массив массивов, а вы пытаетесь обратиться к нему как к строке.

    3. Вы неправильно трактуете как работает $result. Он опирается на результат команды, т.е. $result[] будет ссылаться на корень результата соответствующей операции.

    Я предположил что вы хотите:
    - Добавить контакт. Вам вернется ID созданного контакта.
    - Получить данные созданного контакта.
    - Создать лид с данными созданного контакта, а именно - именем контакта и идентификатором контакта.
    Поскольку я не использую библиотеку CRest битрикса, я написал запрос на curl в php, чтобы вы могли посмотреть и адаптировать:
    $curl = curl_init();
    
    curl_setopt_array($curl, array(
      CURLOPT_URL => 'https://_____your___bitrix24___/rest/_____/batch',
      CURLOPT_RETURNTRANSFER => true,
      CURLOPT_ENCODING => '',
      CURLOPT_MAXREDIRS => 10,
      CURLOPT_TIMEOUT => 0,
      CURLOPT_FOLLOWLOCATION => true,
      CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
      CURLOPT_CUSTOMREQUEST => 'POST',
      CURLOPT_POSTFIELDS =>'{
        "halt": false,
        "cmd": {
            "create_contact": "crm.contact.add?fields[NAME]=Test&fields[LAST_NAME]=TEST",
            "read_contact": "crm.contact.get?id=$result[create_contact][ID]",
            "user_lead": "crm.lead.add?fields[TITLE]=Test Assigned&fields[NAME]=$result[read_contact][NAME]&fields[CONTACT_ID]=$result[create_contact][ID]"
        }
    }',
      CURLOPT_HTTPHEADER => array(
        'Content-Type: application/json',
      ),
    ));
    
    $response = curl_exec($curl);
    
    curl_close($curl);
    echo $response;
    Ответ написан
  • Как вычислить сумму в одном поле битрикс24?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Битрикс не умеет так делать, да и не должен.
    Максимум что можно выжать - попробовать создать множественное свойство и туда писать значения, а потом через итератор это все просуммировать.
    В теории, если у вас только простые действия (сложение и вычитание) - без группировок (скобок), то можно попробовать сделать разбивку по знакам + и -, то это получиться циклический БП который в облаке вам все подвесит (нельзя запускать больше 2х на одном элементе).

    На практике если такая необходимость есть - лучше заказать рест приложение которое будет вычислять значение.
    Ответ написан
    Комментировать
  • Как в API Bitrix24 с помощью метода crm.deal.productrows.set привязать конкретную вариацию товара?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    При оформлении покупки с сайта привязываю товар к сделке по ID. Как привязать конкретную вариацию ?


    Вариация это вид товара и у нее так же есть ID.
    Вам необходимо привязывя товар к сделке указать не ID товара, а именно ID вариации.
    Ответ написан
    Комментировать
  • Битрикс 24 коробка, причины отката сделки?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Начните с папки local.
    Когда вы работаете с коробкой и все известные способы (роботы и триггеры) не подходят под указанное поведение, то первое что нужно сделать это копать в сторону кастомизаций. Обычно (правильные ребята) размещают их в виде модулей или кода в local. Самое наличие директории local говорит что на коробке могут быть процессы и своя логика и ТП тут не сильно поможет - обращайтесь к разработчику.

    Косвенно на наличие доработок указывает запись от безымянного лица в истории сделки - такое бывает если действие происходит без указания авторства и проверки прав, т.е. кодом.
    Ответ написан
    Комментировать
  • Как настроить push&pull WebSocket RTC на ВМ Битрикс 24 с обратным проксированием nginx?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Не занимайтесь ерундой - это все сложнее чем вам бы хотелось.
    Самый простой вариант - проксируйте как есть на bitrix env и пусть он занимается сертификатами и всем остальным.


    1. Надо ли пробрасывать с внешнего IP порты 1137, 1139? И куда пробрасывать на Nginx Revers Proxy или напрямую на Б24? (Пробовал и так и так, ничего не дало, никаких изменений).
    2. Если я пробрасываю порты 1137, 1139 на Nginx Revers Proxy надо ли мне их как-то в конфиге nginx дальше проксировать на ВМ Б24? Или пробросить на ВМ Б24 через iptables DNAT'ом?


    Эти порты, ровно как и порты 80* и 90* проксировать НЕ нужно.
    Да, это было необходимо ранее, когда использовался nginx-push-stream-module, но он устарел еще на версии битрикс эдак 18-й, а с версии 22 уже требуется Bitrix NodeJS v2 - да-да именно второй (был еще и первый как промежуточный).
    Он работает на двух технологиях - long polling и websocket, но главное - он работает по потому же порту что и HTTP/HTTPS, т.е. проксировать достаточно только их.


    3. Сертификат SSL у меня установлен на Nginx Revers Proxy (что видно из конфига), нужно ли при этом ещё один SSL сертификат устанавливать для ВМ Б24?


    Если вы хотите чтобы это корректно работало, то вам необходмо будет ЛИБО прокидывать на 443 -> 443 и безоговорочно доверять всему и ловить ошибки самого битрикса, либо дублировать сертификат на локальную машинку.

    Вот только этот сертификат придется устанавливать еще на:
    - nginx
    - apache (http-scale сервис)
    - push-service

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

    Я попробую поискать наш reverse-proxy конфиг который мы используем для проброса.
    Ответ написан
  • Как зациклить получение данных через php в коробке Битркс24?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    В вашем коде несколько ошибок, которые вы никак не обрабатываете.

    Ошибка номер 1: права.
    Модуль задач не стандартный - он по-умолчанию включает права и права контролирует жестко. Если пользователь, на чей хит выпал запуск действия не имеет прав на задачу ID:6234, то в $arTask будет false и вы просто не зайдете в условие.
    Почитайте эту статью: https://maxyc.wordpress.com/2017/12/27/bitrix24-ta...

    Ошибка номер 2: неправильно написание кода.

    Посмотрите внимательно на фрагмент кода:
    $this->SetVariable(Variable1, $arTask["TITLE"]);

    У вас Variable1 с точки зрения php это контанта, но ее вы не задаете.
    По тексту я понимаю что вы хотите заполнить переменную бизнес-процесса с кодом Variable1 значением названия задачи.
    У вас это должно выглядеть так:
    $this->SetVariable("Variable1", $arTask["TITLE"]);

    Ошибка номер 3: вера в работу кода.

    Что случится, если внезапно этот код вызовет ошибку? Например какой-нибудь fatal?
    Ваш бизнес-процесс зависнет и перестанет выполняться - а вы даже не узнаете почему.
    Совет: оборачивайте ваш код в try-catch блок и в catch-блоке используйте запись в лог БП или хотя бы в файл.

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

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Дано:

    Сущность: Сделка.
    Поле: "Множественная сумма", тип Деньги, множественное
    Поле: "Sum", тип Деньги, единственное

    Задача: сделать БП который проитерируется по всем значениями из "Множественной суммы" и установит сумму значений в поле "Sum".
    Валюта - всегда рубли, любая другая валюта приравнивается к рублю по курсу 1к1, т.е. если будет указано 100руб и 5 долларов, результатом должно быть 105 рублей.

    Решение:
    1. Создаем БП с одной переменной - Объединенная сумма (compiledSum).
    2. Ставим итератор по значениям переменной
    3. Записываем в локальную переменную БП текущее значение + приведенное к числу значение из поля типа Деньги. Тип деньги это комплескный тип (т.е. его значение это <сумма>|<код валюты>, например "100|RUB"), и при приведении его к числу останется только числовая часть, т.е. 100.
    4. Далее в существующее поле записываем комплексное значение, которое получается из конкатенации строкового числа и фиксированной части "|RUB"

    Скриншоты настроек:
    63e9f0e80761a349049802.png
    63e9f0f9e5e75155868956.png
    63e9f102f2bc8729446390.png
    63e9f10bdc643089407860.png
    Ответ написан
    1 комментарий