|
Про транзакции и запись объекта | ☑ | ||
---|---|---|---|---|
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) покачану. платформа тебе предоставляет некий абстрактный уровень работы с объектами, что там происходит внутри может зависеть от СУБД, операционки, версии платформы и много чего ещё.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |