Заметки
Задачи разработки Bitrix24: ошибки, примеры кода и разборы решений для облака и коробки.
Материалов: 343
- Заметка Как перенести сделку в другую воронку через REST Смена categoryId через crm.item.update без создания второй сделки. Почему crm.deal.update для этого не подходит.
- Заметка Как получить наблюдателей сделки через REST Наблюдатели сделки находятся в observers ответа crm.item.get. OBSERVER в select старого метода не заменяет это поле.
- Заметка Как перенести CRM-дело в другую сделку Перенос привязки через crm.activity.binding.move и отличие от обновления полей дела.
- Заметка disableBizProc не отключает роботов CRM У операции CRM запуск роботов и запуск шаблонов бизнес-процессов управляются разными настройками.
- Заметка DateTime::compile в ORM: в фильтр попал объект другого класса Как передать дату в D7 ORM и не перепутать PHP DateTime с Bitrix Main Type DateTime.
- Заметка BX is not defined после подключения BX24.js BX24.js даёт интерфейс приложения, а BX относится к JavaScript-ядру портала. Почему одна библиотека не заменяет другую.
- Заметка imconnector.send.status.delivery: почему DATA пустой Какие ID отправлять при подтверждении доставки сообщения открытой линии и как читать SUCCESS с пустым DATA.
- Заметка Почему не склоняется ФИО в шаблоне документа FormattedName и ContactFormattedName относятся к разному контексту шаблона. Проверяем код поля и модификатор Case.
- Заметка Как получить имя файла в бизнес-процессе Модификатор name возвращает имя файла, когда подстановка поля выводит числовой ID.
- Заметка Вложенная формула БП выводится текстом: лишние скобки и formatDate Как совместить date и dateadd в одном выражении бизнес-процесса без повторного обрамления внутренней функции.
- Заметка Как убрать «Пригласить сотрудника» из EntitySelector Ссылка приглашения управляется опцией провайдера user, а не только footer диалога.
- Заметка Два urlrewrite.php в коробке: где искать правила ЧПУ Файл правил в корне сайта и обработчик /bitrix/urlrewrite.php выполняют разные задачи.
- Заметка XLSX скачивается с ошибкой: перед архивом попал HTML Почему header.php, отладочный вывод или BOM могут испортить выгрузку PhpSpreadsheet из коробки.
- Заметка Сообщение записалось, а Push не пришёл: проверьте завершение обработчика Для собственного AJAX-обработчика коробки ранний exit может оборвать отправку накопленных Push and Pull событий.
- Заметка После settype ID превратился в true settype меняет переменную по ссылке, а возвращает признак успеха. Почему присваивание её результата портит ID.
- Заметка Cannot find template: лишняя папка templates в local Как расположить пользовательский шаблон компонента и не скопировать вместе с ним лишний уровень системного пути.
- Заметка Почему CCatalogProduct::GetByID не возвращает название товара Параметры торгового каталога и поля элемента инфоблока хранятся на разных уровнях API.
- Заметка print_r показывает имя отправителя, но скрывает email Адрес в угловых скобках может исчезнуть при выводе в HTML, хотя в исходной строке письма он есть.
- Заметка Как получить название стадии смарт-процесса по её коду Справочник DYNAMIC_entityTypeId_STAGE_categoryId и сопоставление STATUS_ID с NAME через crm.status.list.
- Заметка crm.deal.add создаёт сделку не в той воронке: проверьте fields CATEGORY_ID передан, но сделка попала в основную воронку. Разбираем уровень вложенности параметров crm.deal.add.
- Заметка user.update возвращает true, но поле пользователя не меняется У user.update поля передаются рядом с ID. Вложенный FIELDS из примеров CRM для этого метода не подходит.
- Заметка lists.element.add не видит IBLOCK_ID из-за лишнего fields Где должны находиться IBLOCK_TYPE_ID, IBLOCK_ID, ELEMENT_CODE и FIELDS при создании элемента списка через REST.
- Заметка REST 3.0: JSON правильный, а заголовок cURL не отправился Запятая вместо => в curl_setopt_array ломает настройку Content-Type. Пример JSON-запроса в чат задачи.
- Заметка Почему limit=100 не увеличивает страницу crm.deal.list Как получить все страницы REST-списка и почему start=-1 не означает «вернуть всё».
- Заметка Как найти сделки, где контакт указан не первым Фильтр contactIds в crm.item.list учитывает список связанных контактов, а не только основной контакт сделки.
- Заметка Поиск контакта по телефону через crm.duplicate.findbycomm Запрос для поиска по телефону, ограничения формата номера и поведение метода при большом числе дублей.
- Заметка Где получить XML_ID значений списка CRM через REST userfieldconfig.get возвращает настройки списка вместе с enum и xmlId каждого варианта.
- Заметка Как привязать к задаче несколько сделок через REST UF_CRM_TASK принимает массив строк D_ID. Разбираем передачу нескольких связей и чтение текущего набора.
- Заметка Откуда берутся отрицательные статусы задач STATUS, REAL_STATUS и метастатусы: как не смешать просрочку с состоянием выполнения задачи.
- Заметка CTaskItem::add: Incorrect date/time при передаче DEADLINE ISO 8601 из REST-примера не всегда подходит старому PHP API задач. Как передать дату в формате сайта.
- Заметка EntitySelector открылся, но не запрашивает данные провайдера dynamicLoad и dynamicSearch включаются у сущности селектора. enableSearch только показывает поиск в диалоге.
- Заметка Пагинация main.ui.grid есть, а строки не переключаются Грид рисует навигацию, но ограничивать выборку нужно отдельно через getLimit и getOffset.
- Заметка addBackgroundJob не запускается через cron Фоновая задача Application выполняется в конце текущего запроса. Почему работающие агенты не подтверждают её запуск.
- Заметка Файл в сообщении: ATTACH или im.disk.file.commit Ссылка в блоке ATTACH и отправка файла Диска — разные операции. Минимальные JSON-примеры обеих.
- Заметка Как открыть файл по своей ссылке через ui.viewer ItemAttributes добавляет к ссылке параметры штатного просмотрщика файлов в коробке.
- Заметка booking.v1 не находит ресурс из calendar.resource.list У календарного бронирования и Онлайн-записи разные реестры ресурсов. Как выбрать правильный API.
- Заметка Как передать числовой ID сотрудника в поле БП типа Пользователь Модификатор > user преобразует число в пользовательское значение бизнес-процесса.
- Заметка Почему вебхук не может запретить уже выполненную смену стадии Откат через ONCRMDEALUPDATE и проверка перед сохранением решают разные задачи. Что учитывать в облаке и коробке.
- Заметка Как правильно подключать prolog_before.php в CLI-скрипте Для CLI-скрипта в /local/tools сначала задайте корень сайта, затем подключите служебный пролог.
- Заметка Почему $_SERVER['DOCUMENT_ROOT'] пустой в консоли В CLI нет веб-сервера, который установил бы DOCUMENT_ROOT. Поэтому пустое значение в консольном PHP — нормальная ситуация, а не повреждённая настройка портала.
- Заметка Где хранить свои PHP-скрипты в коробке Одноразовую консольную команду, обработчик HTTP-запроса и библиотечный класс лучше размещать по-разному.
- Заметка Почему не стоит всё писать в init.php init.php подключается во многих запросах портала. Если положить туда выборку всех сделок или обращение к внешнему API, эта работа начнёт выполняться далеко за пределами нужного…
- Заметка Как подключить свой JS к карточке сделки в коробке Для коробочной доработки JavaScript можно подключить только на странице сделки.
- Заметка Как безопасно менять страницы портала без правки /bitrix Обновления заменяют файлы поставки в /bitrix. Поэтому собственную логику коробочного портала размещают в /local: модуль, компонент, шаблон компонента или JS-расширение — в…
- Заметка Как искать D7-классы и методы в исходниках коробки Документация описывает доступный API, а исходники коробки помогают понять поведение именно установленной версии.
- Заметка Loader::includeModule / CModule::IncludeModule: что использовать В новом D7-коде модуль обычно подключают через Bitrix\Main\Loader::includeModule().
- Заметка Как получить фабрику CRM через Container Фабрика получается по entityTypeId, а не по ID отдельной карточки.
- Заметка Как обновить CRM-элемент через D7 Operation с проверкой прав Обновление элемента в коробочном Bitrix24: фабрика, контекст пользователя и результат операции.
- Заметка Почему DealTable::getList фильтрует UF-поле под админом, но не под сотрудником DealTable::getList — ORM-выборка. Она сама по себе не должна восприниматься как список сделок, автоматически ограниченный CRM-правами текущего сотрудника.
- Заметка Как вывести SQL запроса ORM для отладки В D7 можно собрать ORM-запрос и посмотреть SQL до его выполнения.
- Заметка Почему getCount ломается с пользовательскими свойствами инфоблока Проблема с подсчётом элементов по свойству бывает двух видов. ORM не знает такого поля — тогда запрос падает.
- Заметка Как поймать событие изменения реквизита CRM Изменение реквизита не следует искать только в событии обновления компании.
- Заметка Можно ли запретить удаление комментария таймлайна Скрыть кнопку удаления комментария можно на уровне интерфейса, но это не запрещает удаление через другой клиент или REST.
- Заметка Файл на Диске и комментарий CRM: как связать две операции Загрузка на Диск и комментарий в таймлайне — две независимые операции.
- Заметка Создание события через CCalendar::SaveEvent: какие поля нельзя пропустить При создании события через PHP нужны не только название и даты. Событие должно попасть в существующий календарь с корректными владельцем, типом и разделом.
- Заметка Почему созданное событие календаря не кликабельное Если событие видно в календаре, но оно не открывается, проверьте не только URL.
- Заметка Как в коробке добавить/убрать модуль Установка модуля — это не только копирование каталога. Установщик может создавать таблицы, регистрировать события, агентов и права.
- Заметка Как организовать классы модуля в /local/modules/.../lib Автозагрузка D7 связывает namespace с ID модуля и путём внутри lib.
- Заметка Как писать агент в модуле Агент должен быть доступен без открытой страницы пользователя: его класс загружается через модуль, указанный при регистрации.
- Заметка Как запускать PHP-код разово через php_command_line.php /bitrix/admin/php_command_line.php — административная страница выполнения PHP, а не системная CLI-команда.
- Заметка Как запускать скрипт через cron в коробке В cron нужны абсолютные пути: текущий каталог там может отличаться от каталога скрипта.
- Заметка Как подключить кастомное поле userfieldtype.add userfieldtype.add регистрирует тип поля приложения. После этого нужно отдельно создать само поле нужной сущности с этим типом.
- Заметка Почему кастомное поле не очищается при передаче пустой строки У кастомного поля могут быть три состояния: значение в интерфейсе, значение скрытого input и значение, отправленное API.
- Заметка Как отследить изменение документа/файла в коробке У документа на Диске есть объект и версии содержимого. Переименование файла и загрузка новой версии — разные изменения, поэтому сравнения одного имени недостаточно.
- Заметка Как исправлять дублирующийся PHPSESSID Два PHPSESSID в браузере обычно различаются доменом или путём. Например, один cookie записан для portal.example.ru с Path=/, другой — для .example.ru или /bitrix.
- Заметка Как разбирать Call to undefined method после обновления PHP/Битрикса Call to undefined method означает, что у фактически загруженного класса нет вызванного метода.
- Заметка PHP 8: почему старые статические вызовы стали fatal error В PHP 8 вызов нестатического метода через ClassName::method() приводит к ошибке.
- Заметка Как тестировать после изменения файла ядра/модуля После изменения модуля проверять нужно сценарии, которые проходят через изменённый код.
- Заметка Коробочный модуль после обновления: что проверить После обновления собственного модуля полезнее пройти один рабочий сценарий целиком, чем просто проверить, что он остался в списке установленных.
- Заметка Как работать с множественными переменными в БП Для множественной переменной «Пользователь» можно подготовить массив, убрать пустые ID и повторы, а затем записать его через SetVariable.
- Заметка Почему БП не записывает значение в поле типа Список Подпись пункта списка и значение, которое нужно записать в поле, могут отличаться.
- Заметка Как сбросить поле Да/Нет в состояние “не заполнено” Поле «Да/Нет» не всегда различает три состояния «да», «нет» и «не заполнено».
- Заметка Как в БП создать задачу и дождаться её завершения В конструкторе БП для создания задачи используйте штатное действие с ожиданием завершения, если такая настройка доступна в вашем сценарии.
- Заметка Задание БП и задача: что выбрать для согласования Для решения «согласовать или отклонить» обычно достаточно задания БП.
- Заметка Срок задания БП и срок задачи: почему их нельзя подменять У задания бизнес-процесса и задачи из раздела «Задачи» разные сроки и механизмы исполнения. DEADLINE обычной задачи не управляет ожиданием согласования в БП.
- Заметка Как получить комментарии прерванного бизнес-процесса Прерывание процесса не означает, что все связанные с ним комментарии лежат в одном архиве.
- Заметка Где в базе хранятся комментарии к БП Под «комментарием к БП» могут иметь в виду запись журнала, ответ в задании согласования, комментарий к обычной задаче или сообщение в таймлайне CRM.
- Заметка Как запустить БП по сделкам агентом Агент может выбрать сделки и запустить по ним шаблон БП через CBPDocument::StartWorkflow.
- Заметка Почему агент запускается вручную, но не запускается автоматически Кнопка ручного запуска подтверждает только то, что функция отработала в текущем запросе.
- Заметка Как автозапускать БП при создании дела в таймлайне Создание дела и сохранение сделки — разные события. Письмо или звонок может появиться в таймлайне без изменения стадии, поэтому запуск БП только по стадии его пропустит.
- Заметка Как запустить БП при входящем письме без смены стадии Проверки PROVIDER_ID = CRM_EMAIL недостаточно: так можно отобрать и исходящее письмо.
- Заметка Как запустить роботов после создания сделки из кода Если созданная кодом сделка появляется в CRM, но роботы молчат, сравните путь её создания с обычной карточкой.
- Заметка Почему роботы зависли после обновления модуля Разделите зависшие старые процессы и новые запуски после обновления.
- Заметка Объединение лидов из БП: что можно поручить автоматизации Объединение лидов — это перенос связанных данных, а не удаление лишней карточки после копирования её телефона.
- Заметка Как БП получить связанные элементы смарт-процесса Связанные элементы ищут по полю, в котором реально хранится связь.
- Заметка Как БП связать два смарт-процесса по совпадению двух полей Для связи по двум полям оба условия должны попасть в один фильтр.
- Заметка Как записать в поле связи со смарт-процессом Сначала определите, что именно называют «связью»: системного родителя CRM или пользовательское поле типа «Привязка к CRM».
- Заметка Чат из БП: создание, участники и связь с CRM Создать чат и связать его с CRM — два отдельных действия. Название «Сделка №123» само по себе не создаёт системную связь с карточкой.
- Заметка Сводка по таймлайну в поле CRM: что именно сохранять Таймлайн CRM объединяет разные объекты: комментарии, дела, изменения полей и системные записи.
- Заметка Почему обработчик ONCRMDEALUPDATE срабатывает несколько раз Один клик «Сохранить» может привести к нескольким обновлениям сделки: первое делает интерфейс, следующие — робот или обработчик. REST-событие ONCRMDEALUPDATE не является…
- Заметка Как не зациклить БП при изменении карточки Процесс запускается на изменение карточки, записывает в неё значение и этим создаёт новое изменение.
- Заметка Как сделать автозапуск БП только при изменении конкретного поля Автозапуск БП «при изменении» может сработать на сохранение карточки, которое вообще не затронуло нужное поле.
- Заметка Как в БП менять поле типа Сайт/Телефон/Email Телефон, email и сайт — мультиполя CRM. В API это набор записей с типом и значением, даже когда в карточке видна одна строка.
- Заметка Почему PHP-функция в БП даёт Cannot redeclare при массовом запуске Именованная функция, объявленная внутри PHP-действия БП, попадает в область функций PHP.
- Заметка Как передать входные параметры ручного запуска БП в код Параметры ручного запуска задаются в шаблоне БП. При запуске из PHP передайте их по тем же кодам третьим аргументом CBPDocument::StartWorkflow.
- Заметка Как сделать несколько сообщений с задержкой из БП Для двух напоминаний в одном процессе обычно достаточно цепочки «сообщение → пауза → проверка условия → сообщение».
- Заметка Как в БП отправить email на адрес из карточки компании У компании может быть несколько email. Перед отправкой письма выберите конкретный адрес: например, рабочий, а при его отсутствии — первый заполненный.
- Заметка Документ из связанных элементов: где подготовить строки таблицы Если в документе нужна таблица дочерних элементов, сначала получите полный список связей.
- Заметка Как в БП сделать счёт/КП по данным смарт-процесса Нужен печатный файл с названием «Счёт» или отдельная сущность счёта в CRM?
- Заметка Когда лучше разделять автоматизацию на несколько БП Делить БП стоит по независимым причинам запуска. Проверка входных данных, отправка уведомлений и обмен с внешней системой часто имеют разные условия повтора и разные ошибки.
- Заметка БП не стартует: базовая диагностика Отсутствие результата ещё не означает, что БП не стартовал. Сначала найдите экземпляр процесса в журнале карточки и проверьте, какое действие было последним.
- Заметка БП стартует, но не меняет поле Сначала выясните, поле вообще не записалось или было записано и затем изменено обратно.
- Заметка Роботы не отрабатывают после импорта/кода Сравните одну сделку, созданную вручную, с одной импортированной: категория, стадия, ответственный и условия роботов должны совпадать.
- Заметка Как получать комментарии задачи: старый API и новый чат Когда нужен task.commentitem.getlist, а когда — im.dialog.messages.get.
- Заметка Почему task.commentitem.getlist возвращает пустой список Как отличить сообщения нового чата задачи от старых комментариев и ошибок доступа.
- Заметка Как получить историю изменения описания задачи tasks.task.history.list показывает историю событий задачи. Для изменения описания это не обязательно архив полного текста каждой редакции.
- Заметка Как создать задачу с файлами с Диска через PHP В коробке существующий файл Диска можно прикрепить при создании задачи через классический CTaskItem.
- Заметка Как сопоставить ufTaskWebdavFiles и реальные файлы Диска У файлового поля задачи различаются формат записи и формат чтения.
- Заметка Как добавить чек-лист в задачу из БП Чек-лист добавляют после создания задачи, когда уже известен её ID.
- Заметка Как назначить соисполнителей/наблюдателей в пункт чек-листа В пункте чек-листа участники задаются полем MEMBERS. Ключ — ID пользователя, TYPE: 'A' означает соисполнителя, TYPE: 'U' — наблюдателя.
- Заметка CTasks::update vs CTaskItem::update: почему не приходят уведомления В коробке CTasks и CTaskItem относятся к разным уровням API. При переносе старого кода важно сравнивать не только сохранённые поля, но и контекст пользователя, параметры вызова…
- Заметка Как изменить текст почтовых уведомлений по задачам Сначала выясните, какое письмо нужно изменить. Уведомление о новой задаче, комментарии и просрочке могут формироваться разными событиями и шаблонами.
- Заметка Доступ к задачам отдела без фиктивной роли руководителя Раздел «Руковожу» связан с руководительской ролью и областью задач подчинённых.
- Заметка Как ставить задачи только руководителям отдела Требование «ставить задачи только руководителям» нужно уточнить на уровне процесса: ограничить выбор исполнителя в своей форме или запретить остальные назначения во всём портале.
- Заметка Как отфильтровать сделки без задач «Сделка без задач» и «сделка без запланированных дел» — не один фильтр.
- Заметка Задача из email: что делать с телом письма и вложениями Полное письмо включает больше, чем поле описания задачи: HTML или текстовую часть, вложения и технические заголовки.
- Заметка Почему быстрый шаблон задачи показывает старые данные Изменённый шаблон и уже созданная по нему задача — разные объекты.
- Заметка Как настроить права на задачи по отделам Доступ к задаче зависит не только от отдела. Важны роли в самой задаче, проект или рабочая группа, иерархия руководителей и доступные настройки прав.
- Заметка Как дать доступ к брошенным корзинам Раздел брошенных корзин относится к данным интернет-магазина. Наличие CRM-роли у сотрудника ещё не означает доступ к заказам и корзинам модуля sale.
- Заметка Как ограничить доступ к товарному каталогу в облаке Скрытый пункт меню каталога не запрещает чтение товаров через другие интерфейсы и API.
- Заметка Как убрать колонку телефона из CRM-списка Если телефон просто мешает в CRM-списке, откройте настройку колонок и уберите соответствующую колонку.
- Заметка Как дать внешнему участнику место для комментария Сначала определите, что именно пользователь должен комментировать: задачу в рабочей группе, запись ленты или CRM-карточку.
- Заметка Свой статус сотрудника: поле профиля или отсутствие Надпись «на выезде» в профиле и штатное отсутствие сотрудника — разные возможности.
- Заметка Как считать стаж по дате приёма на работу Для стажа в полных годах нельзя делить число секунд на 365 * 24 * 60 * 60: високосные годы и ещё не наступившая годовщина дадут ошибки.
- Заметка Новая структура компании: почему руководители и подчинённые видны не так После изменения структуры компании привычное поле подразделения может перестать объяснять всю картину.
- Заметка Что проверить перед увольнением сотрудника Увольнение пользователя стоит проверять как передачу работы и технических зависимостей.
- Заметка Почему входящие письма не создают лиды Письмо может попасть в ящик, но не создать лид по двум разным причинам: оно ещё не обработано CRM либо уже связано с существующим клиентом.
- Заметка Новый лид на каждое письмо: что придётся учесть Правило «каждое письмо — новый лид» отличается от обычного поиска клиента по email.
- Заметка Как получить тело письма из CRM-дела Если ID email-дела уже известен, его текст можно запросить напрямую:
- Заметка Как поменять отправителя по умолчанию в коробке У системного уведомления, письма из CRM и пользовательского почтового ящика могут быть разные отправители.
- Заметка Почему письма уходят от noreply@portal, а не от ящика пользователя Подключённый ящик сотрудника и отправитель системного письма — разные настройки.
- Заметка SMTP Яндекс и Mail в коробке: что проверить при настройке Для SMTP в коробке нужно проверить весь путь от Битрикса до почтового провайдера.
- Заметка MailEvent::sendImmediate не отправляет письмо Mail\Event::sendImmediate() обрабатывает почтовое событие сразу, но успешный вызов ещё не подтверждает доставку в ящик адресата.
- Заметка Почему письмо есть в отправленных, но клиент его не получает Копия в «Отправленных» подтверждает действие почтового клиента, но не попадание письма во входящие адресата.
- Заметка Site default status=error: с чего начать разбор почтовой настройки В сообщении Site default status=error, not allow create email for it ключевая часть — состояние сайта error.
- Заметка Почтовый ящик не синхронизируется: что проверить перед ручным запуском Кнопка обновления почты и завершённая синхронизация — не одно событие.
- Заметка Почему список исключений email не блокирует создание лида Если адрес находится в исключениях, но лид всё равно создаётся, сначала найдите источник создания.
- Заметка Как отправить HTML из поля в письмо без экранирования Если письмо показывает <p> и <br> как текст, проверьте две вещи: отправляется ли письмо в HTML-формате и не было ли значение заранее экранировано. CSS white-space: pre-wrap не…
- Заметка Почему маркетинговые сегменты постоянно формируются и почта из маркетинга не уходит Формирование сегмента и отправка рассылки — два этапа. Если сегмент ещё не собран, настройка SMTP сама по себе не запустит отправку.
- Заметка navigator.mediaDevices is undefined при звонке в приложении Если navigator.mediaDevices равен undefined, проверьте защищённый контекст страницы.
- Заметка Облачная АТС не звонит из карточки CRM При нажатии на номер в CRM звонок проходит несколько участков: выбранная линия, приложение телефонии, сопоставление сотрудника с АТС и запуск вызова.
- Заметка Как работает click2call в Битрикс24 При click2call нажатие в CRM инициирует запрос к телефонии. Дальше сценарий зависит от подключения: браузерный звонок, SIP-устройство или callback, при котором АТС сначала…
- Заметка Можно ли подключить аппаратную АТС к облаку через SIP Подключение аппаратной АТС к облачному Bitrix24 возможно через поддерживаемый SIP-сценарий, если сама АТС умеет нужный режим и доступна по сети.
- Заметка Маршрутизация звонков по сотруднику и времени Выбор телефонии по сотруднику и времени — задача маршрутизации. Настройка приложения по умолчанию и динамический выбор провайдера для каждого звонка — разные возможности.
- Заметка Исходящий звонок по условию: какой API действительно набирает номер Для исходящего вызова сначала нужно выбрать механизм телефонии. У встроенной телефонии есть voximplant.callback.start; у внешней АТС реальный набор номера обычно выполняется её…
- Заметка Ошибка оплаты: “Не указан номер телефона клиента” Сообщение «Не указан номер телефона клиента» при создании оплаты относится к данным покупателя в платёжном сценарии.
- Заметка Как скрыть телефон от сотрудника, а не только убрать колонку Скрытая колонка телефона не является защитой номера. Если значение остаётся в HTML, сетевом ответе или доступном REST-методе, пользователь всё ещё может его получить.
- Заметка Реализация из товаров сделки: какие операции должна выполнить интеграция Автоматическую реализацию стоит разбирать как цепочку: получить товарные строки, создать поддерживаемый документ, заполнить позиции и склады, установить связи, провести документ.
- Заметка Почему созданная реализация не привязывается к сделке Складской документ с теми же товарами и названием сделки не обязан быть связан с этой сделкой.
- Заметка Почему реализация не проводится и товар не списывается Созданный документ реализации ещё не списывает товар: для этого он должен успешно пройти проведение.
- Заметка Автоподстановка склада при интеграции с 1С Склад в строке документа и склад, из которого обмен получил остатки, могут быть разными настройками.
- Заметка Синхронизация Б24 и 1С в реальном времени: что реально уходит «Обмен в реальном времени» обычно означает реакцию на предусмотренные изменения с небольшой задержкой.
- Заметка Почему элемент, созданный БП, не попадает в 1С Если элемент виден в CRM, но не появляется в 1С, это ещё не доказывает, что бизнес-процесс создал его неправильно.
- Заметка Как безопасно обновлять товарные позиции сделки При изменении одной товарной позиции лучше работать с её ID, а не заменять весь список товаров сделки.
- Заметка Как работать с резервами товаров в сделке Резерв относится к конкретному количеству товара на складе. Строка сделки, общий остаток и резерв других сделок могут показывать разные числа без ошибки данных.
- Заметка Как исправить сделку, где товары есть, но склад считает иначе Товары в карточке, резерв и проведённое складское движение — разные состояния.
- Заметка Импорт SKU и цен: какие ID подготовить перед созданием До первого запроса создания получите ID основного каталога, каталога вариаций и нужного типа цены. ID из примера документации не описывают каталог вашего портала.
- Заметка Закупочная цена оффера: проверьте, какую запись вы обновляете Закупочная цена предложения относится к записи каталога. Цена продажи в товарной строке сделки и цена родительского SKU — другие значения.
- Заметка Почему не нужно передавать priceScale в catalog.price.update priceScale — не второе поле, в которое нужно дублировать продажную цену.
- Заметка Права каталога: просмотр, цены и изменение — отдельные проверки У товара есть несколько независимых действий: посмотреть карточку, изменить описание, увидеть закупочную цену, провести складской документ.
- Заметка Как импортировать товары из Excel в смарт-процесс Перед импортом определите, что означает строка Excel: товарную позицию одного смарт-элемента или отдельный дочерний элемент.
- Заметка Поиск товарных строк по товару: ограничение REST-фильтра crm.item.productrow.list читает строки конкретного владельца: в фильтре обязательны тип и ID CRM-элемента.
- Заметка Интеграция 1С-Битрикс: ошибка [GD1]/[SD2] Communication error [GD1] или [SD2] Communication error указывает на сбой обмена, но сам код не объясняет, был ли это DNS, TLS, HTTP-отказ или неожиданный ответ приложения.
- Заметка Коннектор 1С: что проверять при проблемах обмена У обмена с 1С минимум две стороны. Поэтому запись «синхронизация завершена» в одном журнале ещё не доказывает, что конкретный объект появился на другой стороне.
- Заметка placement.bind: почему открывается install.php, а не нужная страница Установочная страница приложения и обработчик вкладки — два разных адреса.
- Заметка Как зарегистрировать вкладку приложения в карточке сделки Вкладка сделки регистрируется через placement.bind. Этот вызов выполняется от имени приложения; в качестве HANDLER нужен публичный HTTPS-адрес самой вкладки.
- Заметка Почему BX24.placement.info не вызывает callback Синхронный возврат контекста виджета и получение ID сделки без функции обратного вызова.
- Заметка Как открыть карточку CRM в слайдере из приложения Из iframe приложения карточку CRM удобно открывать через BX24.openPath.
- Заметка Высота iframe приложения и высота слайдера — разные настройки В приложении легко перепутать высоту собственного iframe и размер слайдера, который открыл портал. CSS height: 100% внутри iframe не управляет внешним контейнером.
- Заметка Куда можно добавить свой пункт меню в Bitrix24 Сначала стоит уточнить, какое меню нужно изменить. Ссылка на приложение в левом меню портала, пункт меню карточки CRM и элемент собственной страницы приложения добавляются…
- Заметка Как встроить приложение в карточку компании/контакта/смарта У вкладок разных CRM-сущностей свои коды placement. Для компании используется CRM_COMPANY_DETAIL_TAB, для контакта — CRM_CONTACT_DETAIL_TAB, для смарт-процесса —…
- Заметка Почему приложение не видит данные карточки Встройка передаёт приложению контекст, а не всю карточку. Наличие ID сделки в BX24.placement.info() ещё не означает, что в этом объекте будут её название, ответственный и…
- Заметка Статичное и серверное приложение Bitrix24: в чём разница Слово «локальное» означает, что приложение установлено на конкретном портале.
- Заметка Как хранить OAuth-токены приложения Токены нужно хранить раздельно для каждой установки приложения. Один глобальный access_token рано или поздно приведёт к запросу на чужой портал.
- Заметка ERROR_OAUTH: Application not installed Application not installed стоит разбирать в контексте конкретной пары «приложение — портал».
- Заметка Приложение в закрытом контуре: что не заработает В закрытом контуре нужно отдельно учитывать три направления соединений: браузер сотрудника → интерфейс приложения, портал → сервер приложения и сервер приложения → REST портала.
- Заметка Бесплатное приложение и тарифы в карточке Маркета Статус «бесплатное» и заполнение коммерческих условий в карточке решения — не одно и то же.
- Заметка Кодировка/base64 при загрузке модуля в маркетплейс Base64 кодирует байты и сам по себе не исправляет кодировку текста.
- Заметка Как упаковать модуль для маркетплейса Перед упаковкой отделите файлы модуля от рабочего окружения. В пакет не должны попасть токены, журналы, резервные копии, тестовые выгрузки и каталог зависимостей, который не…
- Заметка Как не сломать приложение при обновлении портала Чаще всего после обновления ломается место, где приложение опиралось на детали интерфейса портала: CSS-класс, внутренний объект или элемент DOM.
- Заметка Ошибка DesktopApi is undefined Ошибка DesktopApi is undefined говорит о недоступной переменной в текущем JavaScript-контексте.
- Заметка Почему публичная ссылка CRM-формы даёт 404 При 404 у CRM-формы сначала скопируйте её текущую публичную ссылку из настроек формы.
- Заметка Как кастомизировать карточку CRM без правки ядра Выбор расширения карточки зависит от того, что требуется добавить.
- Заметка После обновления: Class ... not found При Class ... not found сначала проверьте, существует ли сам класс в установленной версии.
- Заметка После обновления CRM-страница даёт 500 Если после обновления падает именно CRM-страница, сравните обычное открытие и запрос, которым загружается её содержимое.
- Заметка Смарт-процессы/лиды/пользователи ломаются после обновления Когда после одного обновления одновременно ломаются лиды, смарт-процессы и пользователи, полезно искать общую зависимость.
- Заметка Как искать причину 500 в коробке Код 500 — следствие, а не название ошибки. Начните с времени запроса и соответствующей записи в журнале PHP или веб-сервера.
- Заметка Бэкап коробки зависает или не восстанавливается Нужно сначала понять, на каком шаге остановилась резервная копия: выгрузка базы, упаковка файлов или передача архива.
- Заметка Mysql connect error после восстановления После восстановления Mysql connect error сначала стоит читать как ошибку подключения, а не как признак повреждённой CRM.
- Заметка Как проверить cron и агенты в коробке Проверять нужно не только наличие cron_events.php, но и режим выполнения агентов.
- Заметка Что делать, если роботы/почта/сегменты не работают, а cron “работает” Запись в crontab подтверждает только наличие расписания. Даже успешный старт PHP не означает, что отработали очередь писем, агент паузы БП и сегменты CRM.
- Заметка Закрытый контур: почему приложения не устанавливаются даже с открытыми IP Открытый IP решает только часть сетевой задачи. Установка может остановиться на DNS, проверке TLS, обращении к серверу авторизации или обратном запросе к обработчику.
- Заметка Перенос облака в коробку: какие проблемы ждать При переносе в коробку полезно разделять данные портала и его окружение.
- Заметка Как диагностировать fsockopen в коробке fsockopen проверяет соединение, но не выполняет полноценный HTTP-запрос.
- Заметка Звонок открылся, но звука нет: где искать причину Когда интерфейс звонка открылся, но звука нет, отделите доступ к микрофону от соединения с другой стороной.
- Заметка Как проверить .access.php, если до компонента код не доходит Если код компонента не выполняется, запрос может быть остановлен проверкой доступа раньше.
- Заметка Как включить подробные ошибки без раскрытия пользователям На рабочем портале подробности ошибки должны попадать в серверный журнал, а пользователю — понятное сообщение без stack trace, SQL и путей конфигурации.
- Заметка Что собрать перед обращением в поддержку коробки Обращение «после обновления всё сломалось» трудно передать другому инженеру.
- Заметка После обновления коробки: минимальный регресс-тест После обновления выберите небольшую тестовую карточку и пройдите обычный рабочий маршрут.
- Заметка Стандартный отчёт не фильтруется по дате Если отчёт не меняется при выборе дат, сначала выясните, к какому полю относится период.
- Заметка BI-конструктор или своё приложение: что выбрать Если пользователю нужно посмотреть показатели и отфильтровать их по периоду, начинать стоит с отчёта.
- Заметка Что считать просрочкой в отчёте по заданиям БП Просроченное задание бизнес-процесса — это не обычная задача из tasks.task.list.
- Заметка Как сделать отчёт по сделкам без задач Для отчёта «сделки без незавершённых задач» удобнее собрать два набора: выбранные сделки и ID сделок, встречающиеся в привязках подходящих задач.
- Заметка Как строить отчёт по истории изменений CRM-полей Текущее значение поля не позволяет восстановить, каким оно было месяц назад.
- Заметка Как выгрузить данные CRM в свою витрину Выгрузку CRM во внешнюю витрину удобнее разделить на первоначальную загрузку и последующие изменения.
- Заметка Как учитывать рабочее время в отчётах «Рабочее время» в отчёте может означать плановый график сотрудника, фактически отмеченный рабочий день или длительность обработки заявки внутри рабочих часов.
- Заметка CoPilot в коробке: что зависит от домена и внешнего доступа Встроенный в коробку интерфейс CoPilot не означает, что обработка полностью происходит на вашем сервере.
- Заметка Автоматизация зависит от AI-оценки: что делать, если расчёт недоступен Если автоматизация принимает решение по AI-оценке, отсутствие оценки нельзя молча считать нулём.
- Заметка Внешняя модель и CRM: с чего начать интеграцию Для интеграции CRM с внешней моделью удобно начать с узкой операции: например, подготовить черновик ответа по выбранной сделке.
- Заметка CRM-помощник в чате: как ограничить доступ к данным У CRM-помощника есть неприятная ловушка: бот может работать с широкими правами интеграции и отвечать сотруднику данными из чужих сделок.
- Заметка Как провести аудит вебхуков на портале Полезный аудит вебхуков заканчивается списком понятных интеграций, а не только количеством ключей.
- Заметка Как найти владельцев вебхуков после увольнения В URL входящего вебхука после /rest/ находится ID пользователя, от имени которого выполняется вызов.
- Заметка Как ограничить вебхуки по IP и времени Если у потребителя есть прямой секрет входящего вебхука облачного портала, ваш внешний прокси не сможет запретить ему обращаться к порталу напрямую.
- Заметка Как собрать журнал интеграций и не записать в него секреты Единого журнала всех интеграций с одинаковыми данными обычно нет.
- Заметка Безопасность локального приложения в коробке Приложение установлено локально и лежит на том же сервере, что портал.
- Заметка Почему нельзя отключать проверку прав ради чат-бота Бот может работать под техническим пользователем с широким доступом, а запрос к нему отправляет обычный сотрудник.
- Заметка Как проверить утечки доступа к файлам Диска Проверка утечки файла отличается от вопроса «может ли его открыть администратор».
- Заметка Что возвращает CFile::GetPath и как проверить ссылку на файл Путь обычного файла, объект Диска и защищённое скачивание — разные механизмы Bitrix.
- Заметка Почему файл скачивается в браузере, но не через file_get_contents Браузер и file_get_contents() выполняют разные запросы. Браузер отправляет cookie авторизованного сотрудника, следует своим редиректам и иногда открывает просмотрщик.
- Заметка Как прикрепить файл к элементу списка через REST В файловое свойство универсального списка передают содержимое файла, а не локальный путь.
- Заметка Файл Диска и вложение в комментарий CRM: почему ID недостаточно Загрузка файла на Диск и добавление вложения в комментарий CRM — разные операции.
- Заметка Как переименовать папку Диска по ID Для переименования папки достаточно disk.folder.rename. Метод работает через REST и в облаке, и в коробке; прямое обновление таблиц Диска здесь не нужно.
- Заметка Как получить ID папки или файла Диска У Диска несколько уровней идентификаторов. ID хранилища указывает на личный или общий Диск.
- Заметка Почему недостаточно прав при редактировании сформированного документа из email-слайдера Ошибка редактирования в email-слайдере не всегда означает, что пользователю закрыта вся сделка.
- Заметка documentgenerator.template.list возвращает пусто Пустой ответ documentgenerator.template.list не объясняет, почему шаблон не попал в выборку.
- Заметка Как вывести многострочный текст в генераторе документов Если многострочный комментарий превратился в одну строку документа, проверьте значение до подстановки.
- Заметка Что нужно для таблицы связанных элементов в Word-шаблоне Таблица связанных элементов в документе требует двух частей: набора строк и описания того, как генератор должен повторять строку шаблона.
- Заметка Как считать суммы в Word-шаблоне документа Формула Word =SUM(ABOVE) считает значения в ячейках выше, но её результат зависит от обновления полей документа.
- Заметка Почему документ по смарту не формирует счёт Генератор документов создаёт файл по шаблону. Счёт в CRM — отдельная сущность.
- Заметка Как сформировать PDF из документа CRM Создание документа и получение готового PDF могут завершаться в разное время.
- Заметка OnlyOffice/Р7/МойОфис после обновления: что проверить После обновления документ может скачиваться с Диска, но не открываться в онлайн-редакторе.
- Заметка Как редактировать сформированный документ из CRM Если сформированный документ открывается, но не редактируется, сначала определите, какой объект открыл интерфейс: документ генератора, файл Диска или публичную ссылку.
- Заметка Как хранить документы по сделке в своей структуре папок Для собственной структуры документов храните в сделке ID папки, а не её название.
- Заметка Как искать файлы CRM по ID сущности По ID сделки нельзя одним запросом получить все её файлы. Они могут находиться в пользовательских полях, письмах, делах, комментариях и документах генератора.
- Заметка Как проверять доступ к файлу Диска без изменения прав Права папки, прикрепления и публичные ссылки: что проверять при разборе доступа к файлу Bitrix24.
- Заметка Связь открытой линии со сделкой: дело и контекст диалога У открытой линии есть чат, сессии и CRM-контекст. Сделка — ещё один объект в этой цепочке.
- Заметка Почему чат ОЛ есть в таймлайне, но запись не открывается Если запись в таймлайне называется чатом, но не открывается, сначала выясните её происхождение.
- Заметка Как показать существующее дело открытой линии в компании Если переписка уже представлена штатным CRM-делом открытой линии, для появления этого дела в компании можно добавить дополнительную CRM-привязку.
- Заметка Как написать свой коннектор открытых линий Собственный коннектор нужен, когда внешняя переписка должна попасть в очередь открытой линии: с оператором, историей и связью с CRM.
- Заметка Как отлаживать imconnector и imopenlines Когда сообщение теряется между внешним каналом и открытой линией, нужен один конкретный экземпляр сообщения, который можно проследить в обе стороны.
- Заметка Как отправлять несколько сообщений с задержкой в ОЛ У цепочки сообщений с паузами есть условие, которое важнее самого таймера: продолжать ли отправку после ответа клиента или подключения оператора.
- Заметка Как сгруппировать фотографии при отправке из Битрикс24 в Telegram-бот Чтобы фотографии пришли альбомом, коннектор должен отправить их одним вызовом Telegram sendMediaGroup.
- Заметка Как ITR-боту отправлять сообщения через заданное время Чтобы бот написал через пять минут, не нужно держать обработчик события в sleep(300).
- Заметка Как бот может запросить телефон клиента в Telegram и связать с контактом В личном чате бот может предложить кнопку request_contact. Телефон придёт только после действия пользователя; это не скрытое чтение номера из его профиля.
- Заметка Как связать клиента Telegram не по username, а по телефону Для технической связи сохраняйте Telegram user.id. Телефон нужен для первоначального поиска клиента в CRM, а username оставьте отображаемым атрибутом.
- Заметка Локальный чат-бот в коробке: где заканчивается обработчик события Для бота в коробке нужны две независимые части: регистрация приложения/бота и обработчик событий.
- Заметка Безопасность чат-бота с доступом к HL-блокам и инфоблокам Бот, который читает HL-блок или инфоблок, становится ещё одним входом к этим данным.
- Заметка Как получить событие сообщения в обычном чате сотрудников События открытых линий не подходят для чтения любого внутреннего чата.
- Заметка Как создать групповой чат из карточки CRM Обычный групповой чат можно создать через im.chat.add, передав название и участников.
- Заметка Как удалять приветствие бота после подтверждения клиента Чтобы убрать приветствие после подтверждения, сохраните ID сообщения в момент отправки.
- Заметка Telegram-бот для задач: авторизация, разбор команды и создание Для бота, который создаёт задачи, самая важная часть — сопоставление автора. Telegram username нельзя использовать как постоянный ID сотрудника: храните связь Telegram user.id…
- Заметка Задание БП или задача: что удобнее сотруднику с телефона Для короткого решения — согласовать сумму, выбрать вариант, подтвердить получение — задание бизнес-процесса подходит хорошо.
- Заметка Как получить текущую сделку во встроенном приложении Контекст карточки сделки через BX24.placement.info и чтение сделки через crm.deal.get.
- Заметка Как получить текст email, прикреплённого к лиду, через REST Тело письма, сохранённого в CRM, ищут среди дел, связанных с лидом.
- Заметка Как получить ID файлов задачи через REST и сопоставить с Диском У задачи файловое поле нужно запросить явно:
- Заметка Почему PRODUCT_ID из товарной позиции не находится через crm.product.get У товарной позиции есть собственный ID строки и PRODUCT_ID товара каталога.
- Заметка Как добавить товарные позиции в сделку через REST без удаления старых Для добавления одной позиции используйте crm.item.productrow.add.
- Заметка Почему crm.deal.productrows.set перезаписывает все товары crm.deal.productrows.set задаёт весь список товаров сделки. Строки, которых нет в переданном наборе, не сохраняются как «старые».
- Заметка Почему после REST-добавления товара сделка не закрывается: «недостаточно товара на складе» Ошибка «недостаточно товара» после REST-записи не означает, что строка не сохранилась.
- Заметка Как добавить доставку в товары сделки через REST Строка «Доставка» в товарах сделки добавляет стоимость, но не создаёт отгрузку, службу доставки или заказ курьеру.
- Заметка Изменение товаров сделки: событие или сравнение снимков Не стоит считать ONCRMDEALUPDATE полной историей изменения товаров сделки.
- Заметка Как в REST-фильтре найти сделки по товару Поле фильтра CRM-списка и поле товарной строки — не одно и то же.
- Заметка Как через REST добавить комментарий в таймлайн смарт-процесса Для комментария таймлайна смарт-процесса используется crm.timeline.comment.add.
- Заметка Как получить удалённый элемент в ONCRMDYNAMICITEMDELETE Когда приходит ONCRMDYNAMICITEMDELETE, элемент уже удалён. Вызывать после этого crm.item.get и ожидать полную карточку поздно: событие удаления не заменяет архив данных.
- Заметка Как найти элемент смарт-процесса по UF-полю Фильтр crm.item.list по внешнему идентификатору с согласованными именами пользовательских полей.
- Заметка Как читать и обновлять UF-поля через crm.item.* Одинаковый режим имён полей в crm.item.fields, crm.item.get и crm.item.update.
- Заметка Почему crm.item.update меняет title, но не UF-поле Проверка имени и типа пользовательского поля при частично успешном обновлении CRM-элемента.
- Заметка Привязка пользовательского поля к КП: что проверить в настройках типа Для ссылки на КП важно проверить, поддерживает ли используемая версия пользовательского типа crm нужную сущность.
- Заметка Как через REST работать с полем типа crm / привязка к CRM Формат CRM-привязки зависит от настроек поля. В одном поле ожидается ID сущности известного типа, в другом — значение с указанием типа.
- Заметка Как передать телефон или email в контакт через REST Телефон и email контакта передаются массивами объектов, а не одной строкой.
- Заметка Как удалить все телефоны/email из контакта Пустой массив PHONE не стоит использовать как универсальную команду удаления.
- Заметка Почему HAS_PHONE/HAS_EMAIL не пересчитываются после импорта HAS_PHONE и HAS_EMAIL описывают наличие мультиполей. Если после импорта флаг расходится с карточкой, проверьте, как импорт записывал сами телефоны и email.
- Заметка Как получить дату приёма на работу через user.get В ответе user.get дата приёма может находиться в UF_EMPLOYMENT_DATE.
- Заметка Какие поля user.get проверять для действующего сотрудника Для проверки через REST запросите пользователя по ID, не отбрасывая неактивные записи заранее:
- Заметка Как через REST получить данные инфоблока из локального приложения Локальное приложение не получает прямой доступ к PHP-классам инфоблоков.
- Заметка Как через REST запускать метод с несколькими параметрами в batch В batch каждая команда — строка с методом и query string. Амперсанд внутри значения не должен стать разделителем следующего параметра, поэтому параметры лучше кодировать…
- Заметка Почему команды в batch не видят результат предыдущей команды Результат предыдущей команды в batch доступен через специальную подстановку $result[имя_команды].
- Заметка Как подписать приложение на несколько событий REST Для каждого события вызывается отдельный event.bind. Один и тот же обработчик может принимать несколько событий — различать их нужно по полю события во входящих данных.
- Заметка Исходящий вебхук из активити БП: GET или POST Не определяйте HTTP-метод по названию действия «вебхук». Его задаёт конкретная реализация отправки.
- Заметка Почему обработчик не получает сообщения рабочего чата Подписка создана, обработчик доступен, но сообщения из рабочего чата не приходят.
- Заметка Как отличить входящий вебхук, исходящий вебхук и OAuth-приложение Входящий вебхук позволяет вашей системе вызывать REST Bitrix24. Секрет находится в URL, а действия выполняются в пределах прав его владельца и разрешённых разделов.
- Заметка Почему вебхук вернул method not found method not found означает, что запрос не нашёл доступный метод по указанному имени и маршруту.
- Заметка Почему REST-метод есть в документации, но не работает на портале Начните с точного кода ошибки. METHOD_NOT_FOUND, insufficient_scope и отказ в доступе к объекту означают разные причины; «не работает» их скрывает.
- Заметка Как логировать REST-события без токенов и полного payload Минимальный журнал входящих событий: тип события, ID объекта и время приёма без заголовков и секретов.
- Заметка Как защититься от дублей REST-событий Ключ из типа события, ID сущности и timestamp выглядит удобным, но не всегда различает два настоящих изменения в одну секунду.
- Заметка Как обрабатывать вебхуки и восстанавливать пропущенные изменения Надёжная обработка начинается с сохранения полученного события в устойчивую очередь.
- Заметка Как обновить цену через catalog.price.update Запись price и currency по ID цены; почему priceScale не нужно передавать в обновление.
- Заметка Почему не сохраняется закупочная цена вариации товара Поля purchasingPrice и purchasingCurrency, отличие от продажной цены и ограничение складского учёта.
- Заметка Как создать товар/вариацию/цену в каталоге через REST В каталоге нужно различать простой товар, головной товар с вариациями и саму вариацию.
- Заметка Как добавить планируемое дело в карточку CRM через REST Для обычного планируемого дела используйте специализированный crm.activity.todo.add.
- Заметка Почему своё CRM-дело не заменяет диалог открытой линии Дело с названием «Диалог открытой линии» не становится штатной перепиской.
- Заметка Почему запись в таймлайне не кликабельна Таймлайн содержит разные виды записей: комментарии, дела, документы и системные события.
- Заметка Как получить список полей сущности CRM и их enum-значения Для схемы универсальной CRM-сущности вызовите crm.item.fields с её entityTypeId.
- Заметка Как определить entityTypeId смарт-процесса Для crm.item.* нужен entityTypeId смарт-процесса. Его можно получить из списка типов:
- Заметка Чем смарт-процессы отличаются от сделок в коробке Смарт-процесс похож на сделку в интерфейсе, но для кода это отдельный тип CRM со своим entityTypeId.
- Заметка Как получить элементы смарт-процесса PHP-кодом без REST В коробке элементы смарт-процесса доступны через CRM-фабрику. Пример для административной выборки:
- Заметка Как сохранить множественное поле смарт-процесса через фабрику Для множественного пользовательского поля через D7 передают массив значений.
- Заметка Как получить дату создания элемента смарт-процесса Где найти createdTime и почему dateCreate или begindate не заменяют дату создания в универсальном API.
- Заметка Элемент смарт-процесса не отображается в списке до пересохранения Если элемент появляется в списке только после ручного сохранения, сравните способ его создания со штатной CRM-операцией.
- Заметка Смарт-процессы показывают 404 в коробке При 404 сначала сравните адрес с реальной карточкой: /crm/type/{entityTypeId}/details/{id}/.
- Заметка Как запретить редактировать поле Клиент в смарт-процессе Сделать поле «Клиент» неактивным в карточке и запретить изменение клиента — разные задачи.
- Заметка Как ограничить доступ к смарт-процессу по ответственному и соисполнителю Ответственный — часть модели прав CRM. Пользователь в поле «Соисполнитель» — просто значение, пока система или ваша доработка не использует его при проверке доступа.
- Заметка Почему поле «Соисполнитель» само не даёт права на смарт-процесс Поле типа «Пользователь» хранит ссылку на сотрудника. Оно не выдаёт ему права на элемент автоматически, даже если назвать поле «Соисполнитель».
- Заметка Как добавить кастомную вкладку в карточку смарт-процесса Для вкладки конкретного смарт-процесса в код placement входит его entityTypeId.
- Заметка Почему placement есть в сделке, но не появляется в смарт-процессе Размещение CRM_DEAL_DETAIL_TAB относится к сделкам. Оно не распространяется автоматически на каждый смарт-процесс портала.
- Заметка Как открыть элемент смарт-процесса в слайдере Способ открытия зависит от места выполнения JavaScript. На странице коробочного портала с загруженным SidePanel можно открыть карточку так:
- Заметка Как связать смарт-процесс с компанией и вывести все элементы в документ Если у смарт-процесса включён штатный клиент и элемент связан с компанией, выборка выполняется по companyId:
- Заметка Почему в документ попадает только первый связанный элемент смарта Когда документ показывает только первый связанный элемент, проверьте данные до генерации.
- Заметка Как связать элементы двух смарт-процессов Между смарт-процессами можно настроить системную родительскую связь или хранить ссылку в пользовательском поле.
- Заметка Новая воронка сделки или отдельный смарт-процесс Отдельная воронка подходит, когда объект остаётся продажей: есть клиент, сумма, вероятность и результат, который должен попадать в отчёты продаж.
- Заметка Почему пользовательское поле видно в списке смарта, но оно не сортируется Колонка может отображаться в списке смарт-процесса, но не поддерживать сортировку.
- Заметка Как выводить элементы смарт-процесса с другого портала BX24.callMethod() внутри приложения обращается к порталу, в котором открыто приложение.
- Заметка Синхронизация смарт-процесса с 1С: почему элемент из БП не уходит в 1С Если ручное изменение элемента смарта попадает в 1С, а изменение из БП — нет, сравните оба пути до отправки пакета.
- Заметка Как добавить дело к элементу смарт-процесса Чат и CRM-дело решают разные задачи. Если нужно напомнить сотруднику о действии по элементу смарт-процесса, создайте универсальное дело, а не email-активность с TYPE_ID: 4.
- Заметка Как переименовать папку Диска по ID из элемента смарт-процесса В элементе смарт-процесса удобно хранить ID созданной папки, чтобы переименовывать её при изменении заявки.
- Заметка Как собрать один счёт из нескольких элементов смарт-процесса Один счёт по нескольким заявкам требует явного набора исходных элементов.
- Заметка Как получить товарные строки смарт-процесса Чтение crm.item.productrow.list с кратким ownerType, ID элемента и постраничной загрузкой.
- Заметка Почему DYNAMIC_178 не подходит для ownerType Разница между entityTypeId, entityTypeName и кратким кодом владельца товарных строк CRM.
- Заметка Поле типа Файл и поле типа Файл Диска: в чём разница Число в файловом поле не всегда является ID для CFile. В Битриксе нужно различать три записи:
- Заметка Ошибка доступа экстранет-пользователя к /index.php В старой коробочной конфигурации экстранет может быть отдельным сайтом.
- Заметка Как перевести экстранет-пользователя в интранет в коробке Для перевода внешнего пользователя в сотрудника начните со штатного действия в профиле, если оно доступно в вашей версии коробки.
- Заметка Уволен, офлайн или ещё приглашён: как не смешивать статусы пользователя «Неактивный» — слишком расплывчатое условие для назначения ответственного.
- Заметка Почему пользователя нельзя удалить: «является владельцем блога» Сообщение «пользователь является владельцем блога» означает, что модуль блогов сохранил связь, которая мешает физическому удалению учётной записи.
- Заметка Как передать массив в итератор БП Итератору нужна множественная переменная, а не строка, похожая на список.
- Заметка Как прочитать переменную БП в PHP-активити В PHP-действии коробочного БП переменную читают по её коду, а не по подписи в редакторе.
- Заметка $this->SetVariable() в PHP-активити: где работает и где нет $this->SetVariable() работает внутри активности БП. Метод записывает переменную экземпляра процесса; он не меняет поле CRM и не создаёт глобальную переменную портала.
- Заметка Как отлаживать PHP-код внутри бизнес-процесса Начните отладку PHP-действия с сообщения в журнале БП. Оно покажет, дошёл ли процесс до этого участка:
- Заметка Дата в БП: System:Date, System:Now, System:NowLocal — чем отличаются Для сравнения календарных дней нужна дата, а для дедлайна в 17:00 — дата со временем.
- Заметка Как в БП сделать отрицательную разницу дат Если нужна разница со знаком, важно определить направление: «дедлайн минус текущий момент» даёт отрицательное значение для прошедшего срока.
- Заметка Как в БП прибавлять и вычитать дни, часы и минуты Для сдвига даты в выражении БП используется dateadd. Например, прибавить два дня к текущему моменту:
- Заметка Как прибавить к дате 1 рабочий день и поставить время 17:00 Прибавить к дедлайну сутки и прибавить рабочий день — разные задачи.
- Заметка datediff в роботах: почему вместо разницы дат получается 0 У datediff форматы %d и %a отвечают на разные вопросы. %d — дневная часть составного интервала, %a — общее число дней.
- Заметка Как безопаснее обновлять коробочный Bitrix24 Обновление лучше сначала повторить на копии портала с теми же локальными модулями и данными.
- Заметка BX24.js и B24JsSDK: какую библиотеку выбрать для приложения Для небольшой вкладки с несколькими REST-вызовами BX24.js остаётся понятным вариантом: подключили скрипт, дождались BX24.init, вызвали метод и разобрали callback.
- Заметка Код статичного приложения можно посмотреть по URL обработчика HTML и JavaScript статичного приложения загружаются в браузер. Всё, что записано в этих файлах, пользователь может прочитать через DevTools — в том числе значения, которые не…
- Заметка BX24.fitWindow может не уменьшить фрейм После сворачивания блока iframe иногда остаётся высоким. Причина может быть в разметке: min-height, высота body или растянутый контейнер продолжают удерживать прежний размер.
- Заметка Удалили лид, а открытая линия всё ещё считает его связанным После удаления лида повторный imopenlines.crm.lead.create может не дать ожидаемый новый лид.
- Заметка Тему письма в mail() нужно кодировать отдельно Content-Type: text/plain; charset=UTF-8 задаёт кодировку тела письма.
- Заметка Пустое значение поля в CRM может быть не null Пустая строка, null и отсутствующий ключ — разные результаты. А 0 может быть вполне заполненным значением: например, нулевой суммой.
- Заметка Паузы в бизнес-процессах могут срабатывать с задержкой Пауза БП не держит отдельный PHP-процесс до указанного времени. Продолжение выполняется фоновым механизмом, поэтому просроченная пауза часто требует проверки агентов.
- Заметка Повторный вызов обработчика CRM зациклился Если обработчик обновляет ту же сделку, он может вызвать сам себя.
- Заметка Не все места встройки видны в интерфейсе приложения Отсутствие нужной вкладки в форме настройки локального приложения не всегда означает отсутствие самой встройки.
- Заметка Ошибка PHP в бизнес-процессе может скрыть факт запуска Сообщение «действие выполнено» в конце PHP-кода ничего не скажет, если выполнение оборвалось раньше.
Ничего не найдено. Измените запрос или откройте общий каталог.