Закажите бесплатный расчет стоимости вашей задачи по 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. зафиксировать транзакцию.

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

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

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

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

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

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

Если вы только начинаете программировать в 1С или просто хотите систематизировать свои знания - попробуйте Школу программирования 1С нашего друга Владимира Милькина. Пошаговые и понятные уроки даже для новичка с поддержкой учителя.
Попробуйте бесплатно по ссылке >>

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

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

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

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

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

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

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

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

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

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

К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.

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

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

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

    Ответить

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

      Ответить

      • 1с8 поддерживает вложенные транзакции. ИТС — Технологические вопросы крупных внедрений — Стандарты разработки — Блокировки данных в 1С:Предприятии 8″.

        Цитата «Внутри одной транзакции, которая начата и не завершена 1С:Предприятием, может быть начата еще одна (или несколько) транзакций. Такая логика работы обеспечивается платформой автоматически, а также поддерживается средствами встроенного языка.»

        Ответить

        • … только вот толку от начинания вложенной транзакции — ноль. Просто увеличивается внутренний счётчик транзакций, а сама транзакция всегда одна. Не совсем понятно зачем вообще сделано именно так, но имеем, что имеем.

          Ответить

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

Ваш адрес email не будет опубликован.