Ответы пользователя по тегу 1С-Битрикс
  • Возможно ли создание девелоперского сайта в Bitrix24 коробка?

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

    Либо у вас не активный лицензионный ключ (или он редакции CRM)
    Либо вы не развернули многосайтовость
    Ответ написан
  • Почему \Bitrix\Crm\FieldMultiTable::getList не находит компанию с номером телефона +7, а с 7 видит?

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

    Надо сказать что искать по сырым значениям телефонного номера это то еще занятие и так лучше не делать.

    Лучше воспользоваться методом поиска дубликатов:

    \Bitrix\Main\Loader::requireModule('crm');
    
    /**
     * Телефон который будем искать
     * @var string
     */
    $phone = '2131164';
    
    /**
     * Список всех ID лидов с этим телефонным номером
     * @var int[]
     */
    $leadIds = [];
    
    
    $adapter = \Bitrix\Crm\EntityAdapterFactory::create([
            'FM' => [
                'PHONE' => [
                    ['VALUE' => $phone]
                ]
            ]
        ],
        \CCrmOwnerType::Lead
    );
    
    $dups = (new \Bitrix\Crm\Integrity\ContactDuplicateChecker())
        ->findDuplicates(
            $adapter,
            new \Bitrix\Crm\Integrity\DuplicateSearchParams([
                'FM.PHONE'
            ])
        );
    
    foreach($dups as &$dup)
    {
        if(!($dup instanceof \Bitrix\Crm\Integrity\Duplicate))
        {
            continue;
        }
    
        $entities = $dup->getEntities();
        if(!(is_array($entities) && !empty($entities)))
        {
            continue;
        }
    
        //Each entity type limited by 50 items
        foreach($entities as &$entity)
        {
            if(!($entity instanceof \Bitrix\Crm\Integrity\DuplicateEntity))
            {
                continue;
            }
    
            if ( $entity->getEntityTypeID() != \CCrmOwnerType::Lead)
            {
                continue;
            }
    
            $leadIds[] = $entity->getEntityID();
        }
    }
    Ответ написан
    Комментировать
  • Как заставить работать обработчик событий битрикс?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Нужно больше контекста.

    Я сейчас поставил вот такой код в PHP консоль:
    AddEventHandler("crm", "OnBeforeCrmLeadAdd", "CheckOnBeforeCrmLeadAdd");
    AddEventHandler("crm", "OnAfterCrmLeadAdd", "CheckOnBeforeCrmLeadAdd");
    AddEventHandler("crm", "OnAfterExternalCrmLeadAdd", "CheckOnBeforeCrmLeadAdd");
    
    function CheckOnBeforeCrmLeadAdd(&$arFields) {
    file_put_contents($_SERVER["DOCUMENT_ROOT"]."/log_lead.log",print_r($arFields,true)."\n",FILE_APPEND);
    }
    
    \Bitrix\Main\Loader::IncludeModule('crm');
    
    $obLead = new \CCrmLead(false);
    $ID = $obLead->Add(
    	$leadfields = ['TITLE'=>'test'],
    	true,
    	array("REGISTER_SONET_EVENT" => true, "DISABLE_USER_FIELD_CHECK" => true)
    );


    Файл создался.

    Проверь права на папку куда записываешь файл и проверь подключен ли модуль crm на странице.
    Ответ написан
    Комментировать
  • Как добиться отображения Чатов в мобильном приложении Битрикс аналогично приложению Битрикс24?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Вам нужно не открывать iframe в чаты, а разработать код, который будет делать то же самое.
    Т.е. это не какая-то галочка или другой шаблон компонента, а уже более нативная разработка.
    Ответ написан
    Комментировать
  • Как получить id лида созданного через плагин WooCommerce(Интеграция wooCommerce с bitrix)?

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


    Замените вызов архаичного метода с логином и паролем на вебхук crm.lead.add
    В результате вызова он вернет вам идентификатор созданного лида, который вы сможете использовать для заполнения товарных позиций
    Ответ написан
    1 комментарий
  • Как вызывать методы rest api Bitrix24 коробки из блока php-кода в бизнес-процессе?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Как вызывать методы rest api Bitrix24 коробки из блока php-кода в бизнес-процессе?


    Методы REST API изложены в https://dev.1c-bitrix.ru/rest_help/
    Через REST вы не можете вызвать нативное API.

    Или как например выполните те же действия через методы классов https://dev.1c-bitrix.ru/api_help/crm/index.php

    Основы разработки вы можете начать постигать здесь: https://dev.1c-bitrix.ru/learning/course/index.php...
    Ответ написан
    Комментировать
  • Как настроить права доступа к меню Битрикс24?

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


    Без редактирования самого файла меню (.left.menu_ext.php) такое ограничение не сделать.
    Продукт из коробки не рассчитан на такие ограничения.
    Ответ написан
    2 комментария
  • Как вы делаете архитектурные решения AJAX?

    gromdron
    @gromdron
    Работаю с Bitrix24
    На сколько такое решение приемлимо?


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

    Есть ли какие то более правильные, гибкие архитектурные решения?


    Вариантов на вкус и цвет, начиная от родного AJAX => 'Y' параметра в компоненте и его работы и заканчивая javascript rendering.
    Замечательным вариантом было бы:
    - Чтобы тег #orders-block рендерил компонент d6core:custom.order.list. Т.е. он был бы самодостаточным.
    - Не создавалась бы отдельная страница под "ajax.php", а использовались бы контроллеры компонентов (хотя бы)
    - Возвращалось как можно меньше данных, т.е. структуры данных, а не верстка.

    Конечно интересует здесь и вопросы ИБ.


    Контроллеры компонентов по-умолчанию имеют защиту от CSRF, а так же можно установить проверки на авторизацию (только от авторизованных пользователей), проверку на метод запроса (POST/GET), проверку на пользователя (передавать его в signedParams).
    Почитайте про контроллеры, там много интересного написано.

    Тогда вопрос, зачем делать такую обертку если я могу тупо тянуть данные из $_POST напрямую?


    Например потому что при обработке запроса глобальный $_POST может поменять любой скрипт выполняющий до вашего, а HttpRequest содержит исходную информацию которая была отправлена на сервер.
    Или потому что при обращении к несуществующему ключу $_POST выдается notice-сообщение, а HttpRequest корректно возвращает null.
    Если ваша функция или метод работает с $_POST, то в случае объекта вы можете указать что ожидается HttpRequest и знать что придет именно параметры запроса и что там будут гарантированно методы getPost и т.п., а в случае с $_POST вам могут направить туда что угодно с какими угодно ключами.
    Ответ написан
    Комментировать
  • Можно ли вести несколько корпоративных порталов Битрикс24 из одной админки?

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


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

    Может можно вести сразу 2 корпоративных портала на одной админке, в коробочной версии.


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

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


    Нет, такой возможности штатно нет.
    Но можно извращнуться: создать доп поле в Лиде "Является задачей", проставлять его в форме (автоматически) и сделать БП на запуск: при запуске проверять отмечена ли опция и если отмечена - создавать задачу и удалять лид.
    Ответ написан
    Комментировать
  • "Ошибка при сохранении файла скрипта. Изменения не сохранены"?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Дело не в правах скрипта (.access.php), а в физических правах на директорию.
    Например в Bitrix Env есть linux пользователь bitrix (UID:600), из-под которого выполняются все операции, но многие неквалифицированные разработчики работают из-под root-доступов.

    В папку созданную root пользователем нельзя скопировать файлы из-под пользователя bitrix, если ей не установить соответствующие права.

    Ознакомьтесь с соответствующей статьей в документации: https://dev.1c-bitrix.ru/learning/course/index.php...
    Ответ написан
    3 комментария
  • Как создать чат с bitrix24 rest?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Ознакомьтесь с документацией на эту тему: https://dev.1c-bitrix.ru/rest_help/imconnector/cas...
    Ответ написан
    Комментировать
  • Как через API обновить уже существующий лид в Битрикс24?

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


    Использовать REST: dev.1c-bitrix.ru/rest_help/

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


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

    Как правильно интегрировать веб-форму на 1C Битрикс (БУС) и сервис Битрикс24 так чтобы при редактировании новой заявки на стороне БУС можно было обновлять уже существующий лид?

    Обычно разрабатывают интеграции и сами определяют набор параметры по которым определяют является ли лид новым или существующим и нужно ли обновлять или создавать новый лид.
    Штатный инструмент такого не позволяет.

    Если потребуется использовать Webhook то нужны ли дополнительные настройки на стороне Битрикс24 и на стороне сервера?


    Нет, не нужны. На стороне Битрикс24 достаточно создать вебхук, а вот на стороне сайта придется ее написать
    Ответ написан
  • Как создать кнопки в CRM и задачах Битрикс24 (коробка)?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Штатно никаких возможностей кастомизировать кнопки без ущерба для обновлений не предусмотрено.
    Что допустимо с точки зрения "время-деньги":
    - Разработка REST-приложения (читай про встройку) с дополнительной вкладкой под телом задачи
    - Разработка собственного кода, который добавит кнопки или разделы в правую часть карточки задачи

    Другие модификации реализовать без серьезных изменений и опыта нельзя, однако при наличии коробки+опыта+знаний api и обоснованности изменений, предела для изменения модуля задач нет никаких.
    Ответ написан
    Комментировать
  • Bitrix24 как вывести варицию продукта?

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

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

    Проблем может быть масса и заранее еще не перечислить. Начните с консоли разработчика в браузере - это покажет какие скрипты не загрузились или неправильно отработали, затем ищите причину почему.
    Ответ написан
    Комментировать
  • Можно ли задать права доступа к сущности лида в зависимости от пользовательского поля битрикс.?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Можно ли задать права доступа к сущности лида в зависимости от пользовательского поля битрикс.?


    Схема доступа к CRM сущностям в Битрикс24 формально может быть расширена, однако только через костыли (т.е. только в коробочной версии). И хотя разработчики выпустили для некоторых сущностей поле "наблюдатели" это не решает всех кейсов.

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

    Оба варианта не являются удобными, а второй еще и не прост в реализации и эксплуатации.
    Ответ написан
    Комментировать
  • Как в Битрикс24 через crm.deal.list сделать фильтрацию по ID товара?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Подскажите, можно или нет сделать фильтрацию в Битрикс24 через crm.deal.list сделать фильтрацию по ID товара?


    Ввиду архитектурных возможностей продукта нельзя.
    Ответ написан
    Комментировать
  • Bitrix подмена статуса заказа при изменении заказа?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Не следует подменять статус на событии OnSaleStatusOrderChange, так как это событие вызывается при смене статуса. Лучше отследить нужное событие перед сохранением заказа и уже в нем изменить.
    Ответ написан
  • Как правильно собрать batch-запрос на получение товаров сразу нескольких сделок, количество которых изначально неизвестно?

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


    Такой возможности в Битрикс24 нет.

    Дело кроется в несколько ином видении проблематики. Когда вы выполняете запрос на получения количества он возвращает вам не более 50 элементов с постраничной, но батч это всего 50 запросов, то есть если бы такой механизм имел место, то батч был бы резиновым, так как по факту должен выполнить 51 запрос (1 на получение списка и еще 50 на получение каждого элемента). Каким образом должен был бы себя вести батч-запрос когда вы указали 3 запроса? Например получение списка сделок, получение конкретных сделок и получение какого-нибудь справочника? Выполнить 52 запроса? Нет, это фантастика.

    Какой хак можно использовать?
    Можно самому генерировать запросы на основании хака.
    Так как в батче результат запроса выдается порядковым номером (если не указано иное), то они всегда будут в диапазоне от 0 до 49.
    Для примера мы хотим получить 10 сделок из постранички одним запросом, тогда можно отправить следующий батч-запрос:

    'halt' => 0,
    'cmd'  => [
    	'deals' => 'crm.deal.list?filter[STAGE_ID]=PREPAYMENT_INVOICE&filter[>ID]=0&limit=10',
    	'products_0' => 'crm.deal.productrows.get?id=$result[deals][0][ID]',
    	'products_1' => 'crm.deal.productrows.get?id=$result[deals][1][ID]',
    	...
    	'products_8' => 'crm.deal.productrows.get?id=$result[deals][8][ID]',
    	'products_9' => 'crm.deal.productrows.get?id=$result[deals][9][ID]',
    ]


    Когда мы проитерируем "products_*", мы получим последний обработанный ID (для примера это будет 123456) и сможем выполнить следующий батч-запрос:
    'halt' => 0,
    'cmd'  => [
    	'deals' => 'crm.deal.list?filter[STAGE_ID]=PREPAYMENT_INVOICE&filter[>ID]=123456&limit=10',
    	'products_0' => 'crm.deal.productrows.get?id=$result[deals][0][ID]',
    	'products_1' => 'crm.deal.productrows.get?id=$result[deals][1][ID]',
    	...
    	'products_8' => 'crm.deal.productrows.get?id=$result[deals][8][ID]',
    	'products_9' => 'crm.deal.productrows.get?id=$result[deals][9][ID]',
    ]


    Но вы в любом случае должны понимать что чем больше данных будет возвращать ваш батч-запрос тем он мендленнее будет выполняться, поэтому в crm.deal.list рекомендую так же ограничить список получаемых полей.
    Ответ написан
    1 комментарий