• Возможно ли редактировать программный код сайта разработанного на конструкторе Битрикс24?

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


    Нет.
    Но при разработке собственных блоков вы имеете полный доступ к файлам вашего блока.

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


    Нет
    Ответ написан
    2 комментария
  • Как настроить триггер в задачах (Мой план) - чтобы он возвращал задачу на определённую стадию после возобновления?

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

    Попробуйте написать в техническую поддержку с вашим кейсом.
    Ответ написан
    Комментировать
  • Как удалить кнопку "Соисполнители" в задачах?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    1. Сделайте файл с css, который будет скрывать `span[data-bx-id="task-edit-toggler"][data-target="accomplice"]`
    Рекомендую сделать через Extension: https://dev.1c-bitrix.ru/learning/course/index.php...

    2. На события onEpilog добавьте свой css-файл (или extension) в код страницы.
    Подробнее про события: https://dev.1c-bitrix.ru/learning/course/index.php...
    Ответ написан
    Комментировать
  • Как обновить страницу канбана лидов?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Штатно такой возможности нет.

    Самый простой способ это реализовать:
    - Создает свое pull-событие (См. документацию: https://dev.1c-bitrix.ru/community/blogs/hazz/work...)
    - Подписаться на событие создание сделки (см. документацию: https://dev.1c-bitrix.ru/learning/course/index.php...)
    - Поставить ловушку на страницу канбака (см пункт 1)
    - Обновить канбан ( код обновления канбана: window.Kanban.reload() )

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

    и т.п.
    Ответ написан
    Комментировать
  • Когда отправляется исходящий вебхук из коробочного Битрикса, то запрос идёт сразу в на "URL вашего обработчика"?

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


    Нет, не сразу.
    Формируется специальное сообщение и отправляется на oauth.bitrix.info, там оно попадает в очередь и один из воркеров отправляет его на адрес вебхука.

    Таким образом: если у вас закрытый контур или не оплачена лицензия исходящие вебхуки не работают.
    Ответ написан
    Комментировать
  • Как включить в Битрикс24 раздел "Группы и проекты"?

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

    Но насколько я знаю можно попробовать выполнить код в php-консоли (в админке)
    CBXFeatures::ModifyFeaturesSettings([], ["Workgroups" => true]);
    Ответ написан
    Комментировать
  • Как в битриксе придумать псевдослучайный порядок вывод элементов?

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


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

    1. Вы можете использовать `rand` ключ сортировки из `CIblockElement::GetList` - это позволит выбирать псевдослучайные записи в количестве которые вы укажие в navParams.
    В случае такой задачи это будет наиболее правильное решение.

    2. Если такой вариант не подходит, то можете сделать многоуровневое кеширование.
    Т.е. отдельный кеш идентификаторов элементов и (можете, но не обязательно) отдельный кеш под каждый элемент.
    Соответственно получаете все ID (запросом или из кеша), перемешиваете и делаете ЛИБО получение через GetList скармливая в order порядок элементов либо обращение к своему методу и забор кеша (то самое многоуровневое кеширование).

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

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

    Еще увидел у вас в комментариях ваше предложение:
    в result_modifier.php передать данные в component_epilog.php, получить ITEMS в component_epilog.php, рандомно сортировать этот массив, перенести содержимое template.php в component_epilog.php и выводить. Данные будут браться из кэша и при этом каждый раз сортироваться. Норм?))


    Оно бессмысленное потому что передавать данные можно только в одном порядке: component -> result_modifier -> template -> component_epilog.
    Т.е. дойдя до component_epilog вернуть в сам template (если только это не отложенная функция, но в таком случае профита нет никакого).
    Ответ написан
    Комментировать
  • Как отредактировать код для корректной отправки данных сайта в битрикс 24?

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

    Т.е. ваш код должен быть таким:
    $.ajax({
    	url: apiUrl,
    	method: 'POST',
    	data: {
    		fields: fields
    		params: {
    			REGISTER_SONET_EVENT: "Y",
    		}
    	},
    	success: function(response) {
    	    console.log('Lead created successfully');
    	},
    	error: function(error) {
    	    console.error('Error creating lead:', error);
    	}
    });


    Ну и соотстветно:
    1. Ключи в fields лучше передавать как в Битрикс24 - в верхнем регистре
    2. Смотрите корректные названия для UTM меток в документации
    Ответ написан
    Комментировать
  • Страницы с символьным кодом bitrix в индексации яндекса?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Самый простой способ: модернизировать компонент (который отдает 404) и прописать запись в лог referrer'ов, т.е. откуда пришел пользователь.
    Таким образом вы узнаете страницу откуда пришел этот пользователь.

    Можно конечно пойти другим путем: установить метрику и попытаться отследить источник этой ссылки, но там вроде как просто не будет.

    Из очевидных вещей: если таких ссылок очень много советую посмотреть карту сайта - возможно в настройках инфоблока и на странцие разные параметры ЧПУ и соответственно на сайте одно, а в sitemap другое.
    Ответ написан
    Комментировать
  • Битрикс 24 Облако как посчитать количество символов в строке?

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

    Т.е. приводим к строке и используем strlen
    Ответ написан
    Комментировать
  • Как ограничить количество показов CRM формы в Битрикс24?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Таких настроек нет.
    Ответ написан
    Комментировать
  • Как получить контакт из бизнес-процесса?

    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)
    - Через бизнес-процессы. Т.е. создать Н доп.полей в сделке и БП запускаемый при создании, который получит поля, создаст контакт и изменит сделку
    Ответ написан
    Комментировать