---
metadata:
  - name: generator
    content: Diplodoc Platform v5.50.6
alternate:
  - https://yandex.ru/dev/direct/doc/en/best-practice/modify.md
  - https://yandex.ru/dev/direct/doc/ru/best-practice/modify.md
sourcePath: ru/dg/best-practice/modify.md
---
> **Documentation Index:** Fetch the complete configuration index at https://yandex.ru/dev/direct/doc/ru/llms.txt

# Операции над массивом объектов

На вход всех методов, изменяющих данные, подается массив объектов, для которых требуется выполнить операцию.

Элементам входного массива соответствуют элементы выходного массива, следующие в том же порядке. Каждый элемент входного массива содержит:

- в случае успешного выполнения операции — идентификатор созданного, измененного или удаленного объекта;
- в случае если операция выполнена с какими-либо особенностями — идентификатор объекта и массив `Warnings`;
- в случае если операция не выполнена вследствие ошибки — массив `Errors` (и, возможно, массив `Warnings`); идентификатор объекта не возвращается.

Ошибка при выполнении операции с одним из объектов не влияет на успешность выполнения операции с остальными объектами. **Исключение:** отсутствие обязательного параметра для одного из объектов приравнивается к неверному формату запроса и вызывает ошибку обработки всего запроса (а не выполнения отдельной операции).

Массивы `Errors` и `Warnings` содержат одну или несколько структур `ExceptionNotification`:

#|
||
**Параметр**
|
**Тип**
|
**Описание**
||

||
**Структура ExceptionNotification**
| >
| >
||
||
`Code`
|
int
|
Числовой код ошибки или предупреждения.
||
||
`Message`
|
string
|
Текст сообщения об ошибке или предупреждения.
||
||
`Details`
|
string
|
Подробное описание ошибки или предупреждения.
||
|#

Коды и описания ошибок и предупреждений перечислены в разделе .

- [Как обрабатывать ошибки](#errors-processing)
- [Как обрабатывать предупреждения](#warnings-processing)
- [Дубликаты id](#duplicate-id)

## Как обрабатывать ошибки {#errors-processing}

- Наличие массива ошибок `Errors` в ответе означает, что операция не выполнена.

- Приложение не должно пытаться повторить операцию, которая завершилась ошибкой.

- Приложение должно протоколировать ошибки. Рекомендуется также отправлять ошибки на почту или в систему мониторинга.

- Необходимо анализировать ошибки и вносить изменения в приложение, чтобы предотвратить повторение ошибок.

Обратите внимание, что за ошибку выполнения операции списывается увеличенное количество баллов по сравнению с успешной операцией.

## Пример ошибки

Во входном массиве два объявления, которые требуется добавить. Первая операция добавления выполнена успешно, возвращен идентификатор объявления. Вторая операция завершилась ошибкой.

**Запрос**:

```javascript translate=no
    {
      "method": "add",
      "params": {
        "Ads": [{
          "AdGroupId": 1234567,
          "TextAd": {
            "Text": "Слоны всех пород. Сертифицированный питомник",
            "Title": "Купи слона!",
            "Href": "http://exotic-farm.com/elefants",
            "Mobile": "NO"
          }
        },
        {
          "AdGroupId": 1234567,
          "TextAd": {
            "Text": "Носороги с доставкой. Весенняя распродажа",
            "Title": "Купи носорога!",
            "Mobile": "NO"
          }
        }]
      }
    }
```

**Ответ**:

```javascript translate=no
    {
      "result": {
        "AddResults": [{
          "Id": 7654321
        },
        {
          "Errors": [{
            "Code": 6000,
            "Message": "Неконсистентное состояние объекта",
            "Details": "В объявлении должна быть указана или визитка или основная ссылка"
          }]
        }]
      }
    }
```

## Как обрабатывать предупреждения {#warnings-processing}

- Наличие массива предупреждений `Warnings` и идентификатора объекта в ответе означает, что операция выполнена успешно. Приложение может продолжать работу.

- Приложение должно протоколировать предупреждения. Рекомендуется также отправлять предупреждения на почту или в систему мониторинга.

- Необходимо анализировать предупреждения и вносить изменения в приложение, чтобы предотвратить повторение предупреждений.

## Пример предупреждения

Во входном массиве два объявления, которые требуется остановить. Для первой операции остановки выдано предупреждение, поскольку объявление уже было остановлено ранее.

**Запрос**:


```javascript translate=no
    {
      "method": "suspend",
      "params": {
        "SelectionCriteria": {
          "Ids": [7654300, 7654321]
        }
      }
    }
```

**Ответ**:

```javascript translate=no
    {
      "result": {
        "SuspendResults": [{
          "Id": 7654300,
          "Warnings": [{
            "Code": 10200,
            "Message": "Объявление уже остановлено"
          }]
        },
        {
          "Id": 7654321
        }]
      }
    }
```

## Дубликаты id {#duplicate-id}

Если в одном вызове метода _update_, _set_ или _delete_ содержится несколько объектов с одинаковым идентификатором, то для всех этих объектов операция не выполняется и возвращается ошибка. Остальные объекты в запросе обрабатываются обычным образом.

Если в одном вызове метода _suspend_, _resume_, _moderate_, _archive_, _unarchive_ содержится несколько объектов с одинаковым идентификатором, операция выполняется, но для повторяющихся идентификаторов возвращается предупреждение.
