Рекомендуется1С-БитриксPHP

1С-Битрикс: D7-транзакции

Связанные изменения БД фиксируйте одной транзакцией и проверяйте Result каждого вызова.

Проверено Изменено

Плохо

$first->save();
$second->save(); // ошибка игнорируется

Хорошо

$db = \Bitrix\Main\Application::getConnection();
$db->startTransaction();
try {
  foreach ([$first, $second] as $entity) {
    $result = $entity->save();
    if (!$result->isSuccess()) {
      throw new \RuntimeException('Save failed');
    }
  }
  $db->commitTransaction();
} catch (\Throwable $e) {
  $db->rollbackTransaction();
  throw $e;
}

Почему это важно

Ошибка второго сохранения не должна оставлять первое изменение отдельно от общего результата.

Когда применять

D7, API сущностей с save(): Result, одна транзакционная БД/соединение. Внешние вызовы и файлы не откатываются вместе с БД. Для конкретного модуля проверьте транзакционное поведение его событий.

Кто что делает

Человек

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

AI-агент

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

Пример применения

При обновлении двух связанных сущностей тест принудительно отклоняет вторую запись. После выполнения первая остаётся без изменений.

Как проверить у себя

  • Ошибка второго сохранения откатывает первое.
  • Ошибки Result не игнорируются.
ПервоисточникиИстория изменений на GitHub

Дата проверки отражает содержательную сверку. Синхронизация сайта не обновляет её автоматически.