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Дата проверки отражает содержательную сверку. Синхронизация сайта не обновляет её автоматически.