Ответы пользователя по тегу Битрикс24
  • Как в называется плагин для битрикс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 комментарий
  • Как разом закрыть просроченные дела в CRM Битрикс24?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Перейдите в раздел "Мои дела" (http://ваш.б24/crm/activity/) - найдите по фильтру все необходимые дела. Внизу таблицы отметьте "Для всех" и выберите пункт "Отметить выполненным"
    Ответ написан
    Комментировать
  • Как в Битрикс дать права администратору филиала на создание пользователей только в рамках своего филиала?

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


    Если у вас Битрикс24: Энтерпрайз и Филиал красноярск выделен в отдельный сайт, то в рамках этого сайта есть кнопка "Пригласить", которая частично решает вашу задачу.

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

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


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

    Т.е. если вам нужно значение переменной - добавляете его при регистрации bizproc.activity.add.
    Если хотите его изменить: добавляете в выходные значения и добавляете блок изменения переменных после вашего действия.

    Других возможностей нет.
    Ответ написан
    Комментировать