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

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

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

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

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

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

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

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

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

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

Ключевые требования (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 поддерживает вложенные транзакции». Нет и это явно описано в документации, а также подтверждается тестами и практикой.
      «Однако это прозрачно для пользователя и не так прямо в языке выражено.» Что вы вообще этим хотели сказать?
      Может вы вложенные транзакции путаете с конструкцией попытка — исключение? там вложенность поддерживается.

      Ответить

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

Ваш e-mail не будет опубликован.