Имя: Пароль:
1C
1С v8
Про транзакции и запись объекта
, ,
0 БукинГена
 
10.09.14
08:50
Как я понял, транзакция это когда данные записываются в базу данных по принципу или все или ничего.
У справочника объекта есть событие "ПриЗаписи()".
Вот его описание:
"Возникает при записи объекта. Процедура-обработчик вызывается после записи объекта в базу данных, но до окончания транзакции записи. "

У меня от этого крышв едет, возникает кагни..., конги..
йобт когнитивный дисонанс.

Как можно записать объект базу, если транзакция не успешно окончена?

И если можно, можно провести ликбез по этой области?
1 Necessitudo
 
10.09.14
08:54
ну какой ликбез - сначала срабатывает ПередЗаписью, потом ПриЗаписи, потом платформа генерирует SQL-запрос для записи)
2 Рэйв
 
10.09.14
08:54
Иногда нужно работать с ссылкой в процессе записи. Перед записью ее еще нет. В ПриЗаписи она уже есть. Но если все будет плохо, то откатится и ее снова не будет.
3 БукинГена
 
10.09.14
08:56
(2) "В ПриЗаписи она уже есть"
т.е. уже перед ПриЗаписи объект уже записан в базу?
4 Рэйв
 
10.09.14
08:57
(3)Да, но в транзакции. Т.е. если сделать Отказ=Истина, то объекта снова в базе не будет.
5 Рэйв
 
10.09.14
08:57
(3)Пока транзакция не зафиксированна запись считается незавершенной.потому итак и пишут
6 БукинГена
 
10.09.14
08:57
(4) Означает ли это что эта инфа записана в жесткий диск?
Если откат, тогда данные удаляются из жесткого диска?
7 Рэйв
 
10.09.14
08:58
(6)Вот в этом не уверен. А тебе какая разница на жестком уже или просто эмулирует? Ссылка есть, с ней можно работать.Если зафиксируется транзакция, то сто провентов все будет в базе
8 H A D G E H O G s
 
10.09.14
09:00
(6)
да
нет
9 Рэйв
 
10.09.14
09:00
(8)Проверял?:-)  Мне как то в голову не приходило сомтреть
10 Ник второй
 
10.09.14
09:02
(8) Первое точно "Нет".
11 ДенисЧ
 
10.09.14
09:04
(10) не точно. Незавершённая транзакция может быть вытеснена на диск по необходимости
12 БукинГена
 
10.09.14
09:19
(7) Допустим есть справочник "Контрагенты". У него три реквизита: код, наименование, БИН.
Вот наступило событие ПриЗаписи(), а запись объекта уже в физической таблице ДБФ(записана на жесткий диск).
В событие ПризАписи обнаружил, что БИН заполнен неправильно и результат "отказ=истина"
Получается объект удаляется из файл ДБФ и соответсвенно данные из жесткого диска?
13 Necessitudo
 
10.09.14
09:20
(12) Есть такая штука - журнал транзакций.
14 Ник второй
 
10.09.14
09:28
(11) Именно. Причем необходимость определяет сам SQl
15 БукинГена
 
10.09.14
09:29
(13) и?
16 Храбрый
 
10.09.14
09:32
(0) Всякий мусор в программисты пошел, не знает что такое транзакция, еще и Стаж: 4 года 5 месяцев 8 дней печально печально
17 rs_trade
 
10.09.14
09:32
(0) Как можно записать объект базу, если транзакция не успешно окончена?

А как можно успешно закончить транзакцию, если объект не записан?
18 БукинГена
 
10.09.14
09:35
(16) На личности переходишь?
А для чего форум тогда?
19 rs_trade
 
10.09.14
09:37
Механизм транзакций лучше изучать по материалам например для MS SQL сервера. А никак не в контексте 1с. Имея уже академические знания о транзакциях, смотреть как это работает в 1с.
20 Рэйв
 
10.09.14
09:46
(12)Такие проверки лучше делать ПередЗаписью . ПриЗаписи только тогда если нужна Ссылка. Для проверки БИН тебе ссылка не нужна
21 БукинГена
 
10.09.14
09:49
(20) А в чем тогда сокральный смысл ПриЗаписи()?
22 Йохохо
 
10.09.14
09:53
(21) спр ГруппыДоступаФизическихЛиц
Если НЕ ОбменДанными.Загрузка Тогда
        НастройкаПравДоступа.ОбновитьПраваДоступаКИерархическимОбъектамПриНеобходимости(Ссылка, ПрошлыйИзмененныйРодительОбъектаДоступа, Отказ);
КонецЕсли;
23 _fvadim
 
10.09.14
09:56
(21) ты бы теорию чуток почитал, разобрал бы в голове кашу из субд, дбф и платформы.
24 Йохохо
 
10.09.14
10:06
(23) это целостность не субд дбф или платформы, а целостность бизнес логики
25 rs_trade
 
10.09.14
10:11
(21) в умных книжках все написано

Событие ПриЗаписи вызывается  после  того,  как  была  выполнена
запись  данных  в  базу  данных,  но  до  окончания  транзакции  записи.
В обработчике этого события выполняются действия над данными, неразрывно связанными с данными объекта, которые не могут быть изменены
отдельно  от  основных  данных.  Здесь  также  разработчик  может  отка-заться от записи данных, если, например, в результате записи этих данных
в базу нарушаются какие-либо условия.
26 _fvadim
 
10.09.14
10:12
(24) вообще это называется логическая целостность базы данных (в терминах СУБД). Я вообще к тому, что ТС в базовых понятиях плавает и у него "объект удаляется из файл ДБФ и соответсвенно данные из жесткого диска".
27 Йохохо
 
10.09.14
10:13
(26) а теперь догадайся что субд тут не при чем, (25) до просветления
28 _fvadim
 
10.09.14
10:15
(27) поплыл штоле?
29 БукинГена
 
10.09.14
10:27
(25) запись  данных  в  базу  данных = Запись в физическую таблицу ДБФ(допустим 1с файловый)?
30 _fvadim
 
10.09.14
10:30
(29) в контексте событий объекта тебя вообще не должно волновать, что там происходит на физическом уровне и на уровне СУБД.
31 Ник второй
 
10.09.14
10:31
(29) Если говорит с отрывом от контекста, то да.
32 Ник второй
 
10.09.14
10:31
(30) Энто почему?
33 _fvadim
 
10.09.14
10:35
(32) покачану. платформа тебе предоставляет некий абстрактный уровень работы с объектами, что там происходит внутри может зависеть от СУБД, операционки, версии платформы и много чего ещё.
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс