Пример обработки транзакции в СБиС++

Рассмотрим на простейшем примере, как будут происходить изменения в базе данных при выполнении определённых действий над элементами. И увидим, что произойдёт, если эти же действия выполнить с использованием транзакции.

Возьмём справочник "Организации и ЧП". Заведомо известно, что в этом справочнике есть папка "Банки". В этой папке есть записи. Нужно, к примеру, отметить записи этой папки "плюсом", причём после отметки четвёртой записи отметка оставшихся записей должна прерваться. В программе это реализуется следующим образом:

оОрг = Выборка("Организации");
пНазваниеРаздела = "БАНКИ";
оОрг.ПерейтиВРаздел(пНазваниеРаздела);
пСч=0;
Пока(Следующий(оОрг))
{
   оОрг.Отметить("+");
   пСч++;
   Если (пСч==4)
      Ошибка("Прервать отметку");
}

В результате выполнения предложенной последовательности действий в базе данных произойдут изменения. А именно, в папке "Банки" справочника организаций будет отмечено только четыре записи, в то время как остальные останутся нетронутыми.

А теперь попробуем выполнить эти же действия с записями, запустив при этом сеанс транзакции. В программе это реализуется следующим образом:

оОрг = Выборка("Организации");
пНазваниеРаздела = "БАНКИ";
оОрг.ПерейтиВРаздел(пНазваниеРаздела);
пСч=0;
Транзакция (оОрг)
{
  Пока(Следующий(оОрг))
  {
    оОрг.Отметить("+");
    пСч++;
    Если (пСч==4)
       Ошибка("Прервать отметку");
  }
}

В результате происходит следующее: перебираются записи в папке "Банки" и выполняется отметка записей до тех пор, пока не доберёмся до пятой записи. Срабатывает ошибка, и процесс отметки оставшихся записей прекращается. Произошло прерывание транзакции. В этом случае, происходит откат базы данных к исходному состоянию, т.е. изменения в базе данных, которые были сделаны до прерывания, будут отменены и база данных вернётся к состоянию на момент начала транзакции. В нашем случае, отмеченных записей в папке мы не увидим. При этом логическая целостность БД была сохранена.