← К документации

Бизнес-процессы

Поля документа бизнес-процесса

Как читать документ БП и не перепутать его идентификатор с ID карточки CRM.

PHP-примеры относятся к коробочному Bitrix24. Код для действия «PHP-код» вставляется без открывающего тега PHP; ядро и контекст действия уже доступны.

Идентификатор документа

$document_id = $this->GetDocumentId();
$document_service = $this->workflow->GetService('DocumentService');
$document_fields = $document_service->GetDocument($document_id);

if (!is_array($document_fields)) {
    throw new \RuntimeException('Документ недоступен');
}
$title = (string) ($document_fields['TITLE'] ?? '');

Состав полей определяет провайдер документа. TITLE подходит не для каждого вида документа. Полученный массив не следует целиком писать в журнал: он может содержать контакты и пользовательские поля.

ID сделки нужно разбирать строго

Для классического документа сделки ожидается тройка crm, CCrmDocumentDeal, DEAL_123. Извлечение последней группы цифр из произвольной строки опасно: другой документ можно ошибочно принять за сделку.

$document_id = $this->GetDocumentId();
if (($document_id[0] ?? null) !== 'crm'
    || ($document_id[1] ?? null) !== 'CCrmDocumentDeal'
    || !preg_match('/^DEAL_([1-9][0-9]*)$/D', (string) ($document_id[2] ?? ''), $matches)
) {
    throw new \RuntimeException('Ожидался документ сделки');
}
$deal_id = (int) $matches[1];

Для смарт-процессов и других документов используйте их формат идентификатора. Проверка выше специально их не принимает.

Изменение полей

Для стандартного изменения из БП обычно достаточно действия «Изменение документа». Если требуется PHP, используйте операцию фабрики CRM с явно выбранным доверенным контекстом пользователя. Прямое обновление ORM-таблицы обходит часть проверок и сопутствующей логики.

Фабрики и операции CRM · Права доступа CRM