Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
29 мар 2024, 08:02

Помогите разобраться как работают транзакции в 1с

Автор andron81_81, 01 ноя 2018, 11:43

0 Пользователей и 1 гость просматривают эту тему.

andron81_81

Добрый день.

не понимаю такой важной фундаментальной вещи как транзакция, потому что никогда не работал и не сталкивался. а теперь пришлось.

вот я делаю вот такой код

Попытка
НачатьТранзакцию( РежимУправленияБлокировкойДанных.Автоматический );
Стоимость=11111;
Записать();
н = 2/0;
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
КонецПопытки


я посмотрел пошагово выполнение
он выполнил строку н=2/0 ;
строку зафиксироватьТразакцию() он не выполинл, а перескочил на исключение и выполнить отмен
Но отката транзакции я не вижу . Стоимость обратно не вернулась. Может для этого надо чтобы выполнилась строка ЗафиксироватьТранзакцию();
Или я совсем не понимаю. Наведите на верную мысль, пожалуйста.

wise

(0) запись объекта ВСЕГДА выполняется в транзакции... и она прошла УСПЕШНО...
Представьте себе, какая была бы тишина, если бы люди говорили только то, что знают

andron81_81

Цитата: wise от 01 ноя 2018, 13:13
(0) запись объекта ВСЕГДА выполняется в транзакции... и она прошла УСПЕШНО...

ок. но потом случился конфликт и должен ведь произойти откат ?

wise

(2) когда транзакция окончена её больше НЕТ и про неё НИКТО ничего НЕ знает...
в Вашем случае переменная "Стоимость" вернётся к прежнему значению, а Записать() - это УЖЕ исполненная транзакция о которой НИКТО ничего НЕ знает...
Представьте себе, какая была бы тишина, если бы люди говорили только то, что знают

alex0402

Цитата: andron81_81 от 01 ноя 2018, 11:43Но отката транзакции я не вижу . Стоимость обратно не вернулась.

Если смотреть в отладчике, то в нем видно реквизиты объекта (в памяти).
А откат происходит в базе....

Я специально создал пустую, пустой документ с одним реквизитом Сумма. Код поместил в ОбработкаПроведения. Все работает как надо... :)
Спасибо за Сказать спасибо

andron81_81

Цитата: alex0402 от 02 ноя 2018, 09:57
Цитата: andron81_81 от 01 ноя 2018, 11:43Но отката транзакции я не вижу . Стоимость обратно не вернулась.

Если смотреть в отладчике, то в нем видно реквизиты объекта (в памяти).
А откат происходит в базе....

Я специально создал пустую, пустой документ с одним реквизитом Сумма. Код поместил в ОбработкаПроведения. Все работает как надо... :)

спасибо. сейчас попробую тоже на пустой. код помещу в кнопку в событие по нажатию
Добавлено: 02 ноя 2018, 11:41


Цитата: alex0402 от 02 ноя 2018, 09:57
Цитата: andron81_81 от 01 ноя 2018, 11:43Но отката транзакции я не вижу . Стоимость обратно не вернулась.

Если смотреть в отладчике, то в нем видно реквизиты объекта (в памяти).
А откат происходит в базе....

Я специально создал пустую, пустой документ с одним реквизитом Сумма. Код поместил в ОбработкаПроведения. Все работает как надо... :)

1. сделал новую пустую базку
2. создал кнопку . в ней прописал событие на нажатие


Процедура Кнопка1Нажатие(Элемент)

Попытка
НачатьТранзакцию( РежимУправленияБлокировкойДанных.Автоматический );
Стоимость=11111;
Записать();
н = 2/0;
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
КонецПопытки
КонецПроцедуры


А теперь вопросы .
0. Стоимость в документе выставил 2200. Сохранил документ и переоткрыл.
1. Я нажимаю на кнопку, стоимость при этом становится теперь 11111.
2. Закрываю документ , он спрашивает нужно ли сохранить - я нажимаю без сохранения, ведь мы сохранили в коде события.
3. Переоткрываю, а стоимость там 2200. Почему ? Почему ?

Добавлено: 02 ноя 2018, 12:53






truncate table test--очистим

select * from test --покажем , что табла пуста
go
BEGIN TRY 
begin transaction   
insert into test(test) values (11111)
SELECT 1/0
   
COMMIT
select 'Всё хорошо'
END TRY 
BEGIN CATCH 
    ROLLBACK
    select 'Всё плохо. откатили'
END CATCH;   
go
select * from test --покажем содержимое таблы



вот как подобная хрень работает в MS SQL Server . тут всё предсказуемо и понятно. а как в 1С понять не могу :(
Добавлено: 02 ноя 2018, 13:30


всё, я разобрался. я просто тупил )))

alex0402

Цитата: andron81_81 от 02 ноя 2018, 10:18select * from test --покажем содержимое таблы

эта команда не выполнена на форме 1С. Форма не знает, что не смогла записать данные.
Спасибо за Сказать спасибо

andron81_81

Цитата: alex0402 от 02 ноя 2018, 15:13
Цитата: andron81_81 от 02 ноя 2018, 10:18select * from test --покажем содержимое таблы

эта команда не выполнена на форме 1С. Форма не знает, что не смогла записать данные.

вы о чем ? это не 1с . это я приводил аналогию с MS SQL Server.

alex0402

Цитата: andron81_81 от 02 ноя 2018, 15:17вы о чем ? это не 1с . это я приводил аналогию с MS SQL Server.

а я сказал, что в 1С выполняются аналогичные команды, только вот последняя не выполняется и форма не обновляется :)
Спасибо за Сказать спасибо

andron81_81

Цитата: alex0402 от 02 ноя 2018, 15:27
Цитата: andron81_81 от 02 ноя 2018, 15:17вы о чем ? это не 1с . это я приводил аналогию с MS SQL Server.

а я сказал, что в 1С выполняются аналогичные команды, только вот последняя не выполняется и форма не обновляется :)


а они прямо так выполнятся ? )))
без всяких там Зпрс = Новый Запрос(...


Похожие темы (5)

Рейтинг@Mail.ru

Поиск