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

CRM

Телефоны и email: множественные поля CRM

Как адресовать отдельное значение и не потерять остальные телефоны при обновлении.

Пример относится к REST. Таблица множественных полей и CCrmFieldMulti в коробке не заменяют проверку прав на карточку.

У каждого значения свой ID

В старых REST-методах контактов и компаний телефоны и email приходят массивами PHONE и EMAIL. У элемента массива есть собственный ID, значение VALUE и назначение VALUE_TYPE. ID строки телефона не равен ID контакта.

Сначала прочитайте карточку через crm.contact.get или соответствующий метод компании. Схемы старых методов и crm.item.* не нужно смешивать.

Изменить конкретный телефон

Пример использует уже известные ID контакта и его телефона. Назначение WORK не заменяет ID существующей строки.

BX24.init(function () {
    BX24.callMethod('crm.contact.update', {
        id: 123,
        fields: {
            PHONE: [{ ID: '456', VALUE: '+70000000000', VALUE_TYPE: 'WORK' }]
        }
    }, function (result) {
        if (result.error()) {
            console.error(result.error());
            return;
        }
        console.log(result.data());
    });
});

Номер в примере — заглушка. Для удаления конкретного значения применяется его ID и признак DELETE: 'Y', согласно контракту метода. Передача новой строки без ID и изменение существующей строки — разные операции.

Почему опасно сначала удалить всё

Последовательность «удалить все телефоны → добавить новые» оставляет карточку без данных, если второй шаг завершится ошибкой. Даже успешное чтение перед записью не защищает от параллельного изменения другим пользователем.

Сохраняйте исходный набор и план изменения по ID строк. После записи перечитайте карточку и сравните именно изменённые значения. Нормализацию для поиска дублей храните отдельно от исходного номера: удаление всех символов, кроме цифр, не всегда сохраняет добавочный номер и международный префикс.

Источники