Задать вопрос
Ответы пользователя по тегу Битрикс24
  • Как с помощью вебхука конвертировать лид?

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

    В настоящий момент есть только один способ конвертировать лид:
    - Создаете БП который конвертирует лид.
    - При помощи REST метода bizproc.workflow.start запустить БП на конвертацию
    Ответ написан
    Комментировать
  • Как убрать в левом меню Битрикс24 некоторые пункты и ограничить доступ?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Механизмов которые позволяли бы это сделать без нарушения обновлений не существует.
    Наиболее оптимальный способ который мы нашли: прямая модификация .top.menu_ext.php в корне проекта.

    Переходим в конец файла, находим:
    [CODE]
    $aMenuLinks = $arMenuB24;
    [/CODE]

    Перед ним необходимо проверить `$arMenuB24` и модифицировать согласно вашему пункту.
    Рекомендую оставить лазейку и не скрывать для админа ничего.
    Ответ написан
    2 комментария
  • Можно ли как-то вывести у сделок пользовательское поле типа "привязка к элементам highload блока"?

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


    Не все типы пользовательских полей доступных в системе можно использовать в сделке ввиду особенностей работы компонента bitrix:crm.entity.editor.
    Некоторые поля требуют значительного изменения, например создания компонента отрисовки пользовательского поля - https://dev.1c-bitrix.ru/api_d7/bitrix/main/system...

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

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

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

    Возможно вы ведете речь о браузерном расширении или о коробочной версии.
    Например для коробочной версии существует модуль Документооборот. ИНТЕРВОЛГА Мини-СЭД. Согласование....
    Ответ написан
    Комментировать
  • Где лежит темплейт вкладки "время" в задачах битрикс24?

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


    Нет отдельного шаблона или компонента этой вкладки. Это часть верстки из компонента bitrix:tasks.task.detail.
    Если нужно модифицировать вывод рекомендую воспользоваться JS - при обновлениях будет намного меньше проблем.

    Так же хочу напомнить что править компоненты и шаблоны компонентов в /bitrix/components/bitrix запрещено.
    Ответ написан
    Комментировать
  • Как уменьшить размер области в интерфейсе Битрикс24?

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

    Если это коробка, то можно подписаться на событие открытия слайдера и переопределить параметр customLeftBoundary установив его в нужное значение (для чата и почты по-умолчанию 0, обычно начинается с 240).
    Ответ написан
    3 комментария
  • Есть ли в БП Б24 функция сложения данных одного пользовательского поля n-го множества сделок?

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

    При создании сделки итератором производим подсчет "Суммарного значения" сделки.
    Как только расчет произведен запрашиваем у компании Текущее значение и Лими значения и сравниваем чтобы текущее значение не было больше Лимита.
    Если больше - бракуем сделку и т.п. В общем отрабатываем процесс превышения.
    Если меньше - обновляем Текущее значение компании как Текущее значение компании + Суммарное значение.

    Как только сделка достигает успеха или неудачи необходимо выполнить перерасчет, т.е. из Текущего значения компании вычесть суммарное значение сделки чтобы высвободить лимит.

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

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Я смог добиться вывода всех существующих задач,


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

    как отфильтровать их по привязке к сделке.


    Привязка к сделке хранится в поле UF_CRM_TASK, хранятся в виде комбинации буквы сущности и идентификатора, разделенные подчеркиванием.
    Например задача имеющая связь со сделкой 123 будет иметь в этом поле D_123
    Ответ написан
    Комментировать
  • Можно ли вести несколько корпоративных порталов Битрикс24 из одной админки?

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


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

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


    Нет, нельзя.
    Ответ написан
    Комментировать
  • Возможно ли через вебхук прописать ИНН компании?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Используются неправильные параметры.
    Если вы посмотрите на запрос, то он получается как: ?ENTITY_TYPE_ID=4&ENTITY_ID=1651
    В то время как метод принимает входным аргументом только fields, и соответственно запрос должен выглядеть так:
    ?fields[ENTITY_TYPE_ID]=4&fields[ENTITY_ID]=1651

    Т.е. в качестве ключей нужно использовать fields[ENTITY_TYPE_ID]
    Ответ написан
    2 комментария
  • Как получить ID всех элементов универсального списка?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Технически универсальные списки это надстройка над инфоблоками, поэтому API по работе с инфоблоками будет актуально и для УС: https://dev.1c-bitrix.ru/api_help/iblock/classes/c...
    Ответ написан
    Комментировать
  • Как организовать календарь рекламных постов в Битрикс24?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Альтернативный вариант создать Универсальный список и вести график там. Нет наглядности (calendar view отсутствует), однако преимуществ там не меньше - например БП можете навесить, согласование докрутить и т.п.
    Ответ написан
    Комментировать
  • Как сделать вызов модуля из задачи?

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

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


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

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Лиценизонный ключ находится в файле bitrix/license_key.php - его можно использовать для разворачивания чистой коробки последней версии.
    Ответ написан
    Комментировать
  • Почему не запускается функция при наступлении события?

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

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

    Теперь что у вас НЕ получилось.

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

    Начнем с обратного порядка: AddEventHandler это лишь обертка над \Bitrix\Main\EventManager::addEventHandlerCompatible поэтому мы будем использовать его.

    Для начала перепишем ваш код дословно на "новый лад":

    $eventManager = \Bitrix\Main\EventManager::getInstance();
    $eventManager->addEventHandlerCompatible(
    	'main',
    	'OnAfterUserAdd',
    	[
    		'AddUserToGroupChatsClass',
    		'AddUserToGroupChats'
    	],
    	$_SERVER["DOCUMENT_ROOT"] . "/local/php_interface/event_handlers/add_user_to_group_chats_class.php"
    );


    Оно выглядит лучше но по-прежнему не работает.

    Порядок аргументов addEventHandlerCompatible и AddEventHandler одинаковый и состоит из:

    - FROM_MODULE_ID - на какой модуль подписываемся
    - MESSAGE_ID - на какое событие подписываемся
    - CALLBACK - callback обработчик (будет вызван для )
    - SORT - порядок выполнения относительно других событий
    - FULL_PATH - путь к файлу

    Т.е. получается что у тебя нарушен порядок аргументов. Корректнее было бы так:
    $eventManager = \Bitrix\Main\EventManager::getInstance();
    $eventManager->addEventHandlerCompatible(
    	'main',
    	'OnAfterUserAdd',
    	[
    		'AddUserToGroupChatsClass',
    		'AddUserToGroupChats'
    	],
    	100,
    	$_SERVER["DOCUMENT_ROOT"] . "/local/php_interface/event_handlers/add_user_to_group_chats_class.php"
    );


    Теперь разберемся с самой подписной моделью: вы хотите использовать свой класс и выделить его в отдельный файл для удобства.
    Не будем поднимать вопросы по поводу нейминга, но совершенно не обязательно подключать дополнительный файл для события. Рекомендую почитать про spl_autoload и composer.
    Давайте воспользуемся нашей готовой разработкой init.php и разместим в init.php маленький автолоадер.

    Предположим что за добавление будет отвечать ваш класс AddUserToGroupChatsClass

    Ваш init.php:
    /**
     * - /local/php_interface/classes/{Path|raw}/{*|raw}.php
     * - /local/php_interface/classes/{Path|ucfirst,lowercase}/{*|ucfirst,lowercase}.php
     */
    spl_autoload_register(function($sClassName)
    {
    	$sClassFile = __DIR__.'/classes';
    
    	if ( file_exists($sClassFile.'/'.str_replace('\\', '/', $sClassName).'.php') )
    	{
    		require_once($sClassFile.'/'.str_replace('\\', '/', $sClassName).'.php');
    		return;
    	}
    
    	$arClass = explode('\\', strtolower($sClassName));
    	foreach($arClass as $sPath )
    	{
    	    $sClassFile .= '/'.ucfirst($sPath);
    	}
    	$sClassFile .= '.php';
    	if (file_exists($sClassFile))
    	{
    		require_once($sClassFile);
    	}
    });
    
    $eventManager = \Bitrix\Main\EventManager::getInstance();
    $eventManager->addEventHandlerCompatible(
    
    	'main',
    	'OnAfterUserAdd',
    	[
    		'AddUserToGroupChatsClass',
    		'AddUserToGroupChats'
    	]
    );


    Теперь нужно разметить ваш класс в файле: /local/php_interface/classes/AddUserToGroupChatsClass.php
    Заметьте - мы удалили сортировку (вам не важем порядок) и подключение файла - за это теперь отвечает автолоадер.

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

    Произведем функциональные изменения:
    - приведем файл к виду opentag -> namespace -> use -> class
    - добавим описание метода необходимые для вызова его в call_user_func_array
    - Пропишем корректные праметры к Debug::writeToFile методу

    <?php
    
    use \Bitrix\Main\Diag;
    
    class AddUserToGroupChatsClass
    {
    	/**
    	 * Handle main::OnAfterUserAdd event
    	 *     after add user to groups
    	 * @param array &$arFields User data
    	 * @return void
    	 */
    	public static function AddUserToGroupChats( &$arFields )
    	{		 
    		Diag\Debug::writeToFile(
    			[
    				'text'   => "Событие наступило",
    				'fields' => $arFields
    			],
    			date('d.m.Y'),
    			"AddUserToGroupChatsClass.log"
    		); 
    	}
    }


    В результате проделанной работы будет создан файл `AddUserToGroupChatsClass.log` (у меня bitrix env и $_SERVER['DOCUMENT_ROOT'] указывает на /home/bitrix/www, соответственно файл располагается по пути: /home/bitrix/www/AddUserToGroupChatsClass.log)

    С примерно таким содержимым:

    28.09.2021:
    Array
    (
        [text] => Событие наступило
        [fields] => Array
            (
                [TITLE] => 
                [NAME] => test1
                [LAST_NAME] => test1
                [SECOND_NAME] => test1
                [EMAIL] => test1@test1.test1
                [LOGIN] => test1@test1.test1
                [PERSONAL_PROFESSION] => 
                [PERSONAL_WWW] => 
                [PERSONAL_ICQ] => 
                [PERSONAL_GENDER] => 
                [PERSONAL_BIRTHDAY] => 
                [PERSONAL_PHONE] => 
                [PERSONAL_FAX] => 
                [PERSONAL_MOBILE] => 
                [PERSONAL_PAGER] => 
                [PERSONAL_STREET] => 
                [PERSONAL_MAILBOX] => 
                [PERSONAL_CITY] => 
                [PERSONAL_STATE] => 
                [PERSONAL_ZIP] => 
                [PERSONAL_COUNTRY] => 0
                [PERSONAL_NOTES] => 
                [WORK_COMPANY] => 
                [WORK_DEPARTMENT] => 
                [WORK_POSITION] => 
                [WORK_WWW] => 
                [WORK_PHONE] => 
                [WORK_FAX] => 
                [WORK_PAGER] => 
                [WORK_STREET] => 
                [WORK_MAILBOX] => 
                [WORK_CITY] => 
                [WORK_STATE] => 
                [WORK_ZIP] => 
                [WORK_COUNTRY] => 0
                [WORK_PROFILE] => 
                [WORK_NOTES] => 
                [AUTO_TIME_ZONE] => 
                [XML_ID] => 
                [PHONE_NUMBER] => 
                [PASSWORD_EXPIRED] => N
                [TIME_ZONE] => 
                [LID] => s1
                [LANGUAGE_ID] => 
                [ACTIVE] => Y
                [BLOCKED] => N
                [GROUP_ID] => Array
                    (
                        [0] => Array
                            (
                                [GROUP_ID] => 3
                                [DATE_ACTIVE_FROM] => 
                                [DATE_ACTIVE_TO] => 
                            )
    
                        [1] => Array
                            (
                                [GROUP_ID] => 12
                                [DATE_ACTIVE_FROM] => 
                                [DATE_ACTIVE_TO] => 
                            )
    
                        [2] => Array
                            (
                                [GROUP_ID] => 4
                                [DATE_ACTIVE_FROM] => 
                                [DATE_ACTIVE_TO] => 
                            )
    
                    )
    
                [ADMIN_NOTES] => 
                [PASSWORD] => $5$hjIX0a5X2ps0X6kFG1h5xXAt4elIW.typcRgt23xwX97xU.GgGt0i3HG1a2hwZtcYXwIR3Whg6sXwV.
                [CONFIRM_PASSWORD] => test1@test1.test1
                [UF_DEPARTMENT] => Array
                    (
                        [0] => 2
                    )
    
                [UF_PHONE_INNER] => 
                [UF_USER_CRM_ENTITY] => 
                [UF_INN] => 
                [UF_DISTRICT] => 
                [UF_SKYPE] => 
                [UF_TWITTER] => 
                [UF_FACEBOOK] => 
                [UF_LINKEDIN] => 
                [UF_XING] => 
                [UF_WEB_SITES] => 
                [UF_SKILLS] => 
                [UF_INTERESTS] => 
                [UF_EMPLOYMENT_DATE] => 
                [UF_SKYPE_LINK] => 
                [UF_ZOOM] => 
                [UF_TIMEMAN] => 
                [UF_TM_MAX_START] => 00:00
                [UF_TM_MIN_FINISH] => 00:00
                [UF_TM_MIN_DURATION] => 00:00
                [UF_TM_REPORT_REQ] => 
                [UF_TM_REPORT_TPL] => Array
                    (
                        [0] => 
                    )
    
                [UF_TM_FREE] => 
                [UF_TM_TIME] => 
                [UF_TM_DAY] => 
                [UF_TM_REPORT_DATE] => 
                [UF_REPORT_PERIOD] => 
                [UF_DELAY_TIME] => 
                [UF_LAST_REPORT_DATE] => 
                [UF_SETTING_DATE] => 
                [UF_TM_ALLOWED_DELTA] => 
                [CHECKWORD] => 433ddaf3c8a14fe75431252a2709b8
                [~CHECKWORD_TIME] => now()
                [ID] => 5
                [RESULT] => 5
            )
    )


    Итого на выходе у нас:
    - Подписка на событие (работает)
    - Автолоадер, который позволит подключать классы по мере использования (без необходимости прописывать явно)
    - Разделение логики между подпиской и обработчиком.

    Хорошо было бы углубиться в:
    - php классы (namespace, static, public, protected, private)
    - composer

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

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


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

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Вопрос: Как узнать "Идентификатор чата" - где его посмотреть?


    Через метод im.chat.get
    Ответ написан
  • Как реализовать отображение данных из внешней БД в битрикс24?

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


    Это слишком обширный и абстрактный вопрос на который нельзя дать однозначный ответ.
    Например вы пишите про "Битрикс24", но он поставляется в двух редакциях: облачной версии и коробочной.
    Если вы пишите про облако - пишете свое приложение и выводите как вы хотите. Вам доступно все что позволяет API.
    Если вы говорите про коробку, то ваш вопрос можно классифицировать по-разному: от логического "как я хочу видеть данные из внешней БД" до технического "как на php я могу подключиться к базе данных". В любом случае вам поможет официальная документация разработчика по платформе (у управления сайтом и битрикс24 общая платформа).

    Возможно если вы конкретизируете свой вопрос или разобьете его на несколько частей ответ будет более точным полезным.

    P.S. Если приводить аналогию то ваш вопрос звучит "Как покорить Эверест?", что согласитесь слишком абстрактно. Если вы разобьете его на несколько вопросов (например "Какое снаряжение нужно для покорения горы", "Как проходит подъем на гору" и т.п.) то ответ будет более точным.
    Ответ написан
  • Как в бизнес-процессе получить инфу о датах отсутствия сотрудника?

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

    В облаке подобного api нет, но можно попробовать сделать запросы на calendar.accessibility.get и получить занятость. Это конечно не только отпуск, но и любое другое отсутствие, но возможно подойдет.
    Ответ написан
    1 комментарий