В рамках підготовки до сертифікації 1С «Експерт» напередодні двох дуже важливих і глобальних тем - блокувань і взаімоблокіровок хотілося б розібрати те, без чого неможливі вищеназвані поняття, - транзакція СУБД.
Що таке транзакція
Транзакція - логічно пов'язана, неподільна послідовність дій. Транзакція може бути або виконана цілком, або взагалі не виконана. Для фіксації транзакції в СУБД використовується метод COMMIT.
Типовий приклад транзакції - переказ грошових коштів з одного рахунку на інший:
Як ми бачимо, якщо транзакція виконана в повному обсязі, то вона не має сенсу.
Ключові вимоги (ACID) до транзакционной СУБД
Одним з найбільш поширених наборів вимог до транзакцій і транзакційних СУБД є набір ACID (Atomicity, Consistency, Isolation, Durability). Це ті властивості, якими повинна володіти будь-яка транзакція:
- Атомарність (Atomicity) - ніяка транзакція не повинна бути зафіксована частково;
- Узгодженість (Consistency) - система знаходиться в узгодженому стані до початку транзакції і повинна залишитися в узгодженому стані після завершення транзакції;
- Ізольованість (Isolation) - під час виконання транзакції паралельні транзакції не повинні впливати на її результат;
- Надійність (Durability) - в випадку збою зміни, зроблені успішно завершеною транзакцією, повинні залишитися збереженими після повернення системи в роботу.
Транзакції в 1С
Транзакції в 1С 8.3 та 8.2 створюються як автоматично, так і описуються розробниками.
За допомогою методу ТранзакціяАктівна () можна дізнатися, активна чи транзакція.
Приклад автоматичної транзакції - обробка проведення документа, запис елемента довідника в базу даних, запис набору записів регістра відомостей і т.д.
Розробник може і сам створити транзакцію. Для виконання дій в транзакції необхідно в код активувати її:
Після закінчення транзакції її необхідно зафіксувати:
Якщо Ви хочете скасувати дії транзакції, необхідно виконати метод:
1С не підтримує вкладених транзакцій. Тому, якщо Ви кілька разів відкриваєте транзакцію, вона «зливається» в одну. Якщо ж Ви фіксуєте або відкидаєте її, то ця дія проводиться з усіма транзакціями, що активуються раніше.