Закажите бесплатный расчет стоимости вашей задачи по 1С!
Перезвоним за 10 минут!

Транзакции в 1С 8.3(8.2) и СУБД

В рамках подготовки к сертификации 1С «Эксперт» в преддверии двух очень важных и глобальных тем — блокировок и взаимоблокировок хотелось бы разобрать то, без чего невозможны вышеназванные понятия, — транзакция СУБД.

Схема транзакции 1С

Что такое транзакция

Транзакция — логически связанная, неделимая последовательность действий. Транзакция может быть либо выполнена целиком, либо вообще не выполнена. Для фиксации транзакции в СУБД используется метод COMMIT.

Типичный пример транзакции — перевод денежных средств с одного счета на другой:

Получите 267 видеоуроков по 1С бесплатно:

  1. начать транзакцию;
  2. прочесть количество денежных средств на счету номер 123;
  3. уменьшить баланс счета 123 на 100 рублей;
  4. сохранить баланс счёта номер 123;
  5. прочесть количество денежных средств на счету номер 321;
  6. увеличить баланс на 100 рублей;
  7. записать новое количество денежных средств на счете 321;
  8. зафиксировать транзакцию.

Как мы видим, если транзакция выполнена не полностью, то она не имеет смысла.

Ключевые требования (ACID) к транзакционной СУБД

Одним из наиболее распространённых наборов требований к транзакциям и транзакционным СУБД является набор ACID (Atomicity, Consistency, Isolation, Durability). Это те свойства, которыми должна обладать любая транзакция:

  • Атомарность (Atomicity) — никакая транзакция не должна быть зафиксирована частично;
  • Согласованность (Consistency) — система находится в согласованном состоянии до начала транзакции и должна остаться в согласованном состоянии после завершения транзакции;
  • Изолированность (Isolation) — во время выполнения транзакции параллельные транзакции не должны оказывать влияние на её результат;
  • Надежность (Durability) — в случая сбоя изменения, сделанные успешно завершённой транзакцией, должны остаться сохранёнными после возвращения системы в работу.

Транзакции в 1С

Транзакции в 1С 8.3 и 8.2 создаются как автоматически, так и описываются разработчиками.

С помощью метода ТранзакцияАктивна() можно узнать, активна ли транзакция.

Пример автоматической транзакции — обработка проведения документа, запись элемента справочника в базу данных, запись набора записей регистра сведений и т.д.

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

НачатьТранзакцию();

По окончании транзакции её необходимо зафиксировать:

ЗафиксироватьТранзакцию();

Если Вы хотите отменить действия транзакции, необходимо выполнить метод:

ОтменитьТранзакцию();

1С не поддерживает вложенных транзакций.  Поэтому, если Вы несколько раз открываете транзакцию, она «сливается» в одну. Если же Вы фиксируете или отменяете её, то это действие производится со всеми транзакциями, активируемыми ранее.

Если я не понятно расписал, рекомендую видеолекцию от коллег:

P.S. Наша компания предоставляет услуги по настройке, доработке и комплексному внедрению 1С. Закажите бесплатный расчет стоимости вашей задачи на странице Услуги 1С или по телефону +7 (499) 350 29 00.

Остались вопросы?

СПРОСИТЕ в комментариях!

Комментариев: 2 на “Транзакции в 1С 8.3(8.2) и СУБД
  1. Кстати не совсем верно, 1С 8 поддерживает вложенные транзакции. Однако это прозрачно для пользователя и не так прямо в языке выражено.
    + еще момент интересный: управляемые транзакции не всегда дают выигрыш по сравнению с автоматикой из-за оптимизации SQL запросов (к примеру на DB2).

    Ответить

    • «1С 8 поддерживает вложенные транзакции». Нет и это явно описано в документации, а также подтверждается тестами и практикой.
      «Однако это прозрачно для пользователя и не так прямо в языке выражено.» Что вы вообще этим хотели сказать?
      Может вы вложенные транзакции путаете с конструкцией попытка — исключение? там вложенность поддерживается.

      Ответить

Добавить комментарий: