← Назад ко всем вопросам

Когда транзакция закрывается

1️⃣ Как кратко ответить

Транзакция в 1С закрывается автоматически при завершении выполнения процедуры или функции, в которой она была открыта, либо вручную с помощью метода ЗафиксироватьТранзакцию() или ОтменитьТранзакцию().

2️⃣ Подробное объяснение темы

В системе 1С транзакция — это механизм, который позволяет выполнять несколько операций с данными как единое целое. Это значит, что все изменения, сделанные в рамках транзакции, либо фиксируются в базе данных, либо отменяются, если что-то пошло не так. Это важно для обеспечения целостности данных.

Когда транзакция открывается

Транзакция открывается автоматически при первом изменении данных в базе в рамках выполнения процедуры или функции. Это может быть, например, запись документа, изменение справочника или регистра.

Когда транзакция закрывается

Транзакция закрывается в следующих случаях:

  1. Автоматически:

    • При завершении выполнения процедуры или функции, в которой была открыта транзакция. Это стандартное поведение, когда все изменения фиксируются автоматически, если не было ошибок.
  2. Вручную:

    • С помощью метода ЗафиксироватьТранзакцию(). Этот метод явно указывает системе, что все изменения, сделанные в рамках текущей транзакции, должны быть зафиксированы в базе данных.
    • С помощью метода ОтменитьТранзакцию(). Этот метод отменяет все изменения, сделанные в рамках текущей транзакции, возвращая данные в исходное состояние.

Пример кода

Процедура ОбновитьДанные()
    НачатьТранзакцию(); // Открытие транзакции
​
    Попытка
        // Изменение данных
        Справочник.Номенклатура.НайтиПоКоду("0001").Наименование = "Новое наименование";
        Справочник.Номенклатура.НайтиПоКоду("0001").Записать();
​
        // Фиксация изменений
        ЗафиксироватьТранзакцию();
    Исключение
        // В случае ошибки отменяем изменения
        ОтменитьТранзакцию();
        Сообщить("Ошибка при обновлении данных: " + ОписаниеОшибки());
    КонецПопытки;
КонецПроцедуры
  • НачатьТранзакцию(); — открывает новую транзакцию. Все изменения, сделанные после этого вызова, будут частью этой транзакции.
  • Попытка ... Исключение ... КонецПопытки; — блок, который позволяет обработать ошибки, возникшие в процессе выполнения кода.
  • Справочник.Номенклатура.НайтиПоКоду("0001").Наименование = "Новое наименование"; — изменение данных в справочнике.
  • Справочник.Номенклатура.НайтиПоКоду("0001").Записать(); — запись изменений в справочник.
  • ЗафиксироватьТранзакцию(); — фиксирует все изменения, сделанные в рамках транзакции, в базе данных.
  • ОтменитьТранзакцию(); — отменяет все изменения, если произошла ошибка, возвращая данные в исходное состояние.
  • Сообщить("Ошибка при обновлении данных: " + ОписаниеОшибки()); — выводит сообщение об ошибке, если она произошла.

Транзакции в 1С обеспечивают надежность и целостность данных, позволяя откатывать изменения в случае ошибок и фиксировать их только при успешном выполнении всех операций.

Тема: Транзакции и блокировки
Стадия: Tech

🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!

Твои заметки