|
Чем метод Записать() отличается от метода ЗафиксироватьТранзакцию()? | ☑ | ||
---|---|---|---|---|
0
loonypy
01.03.12
✎
09:56
|
Из чтения справки по обоим методам как-то не уловил разницы - и там, и там записывает изменения в базу.
|
|||
1
Капитан О
01.03.12
✎
09:57
|
зафиксируй транзакцию документу, скажем
|
|||
2
vde69
01.03.12
✎
09:58
|
офигеть!
я под столом.... |
|||
3
vde69
01.03.12
✎
10:00
|
записать - записывает данные (при этом не обязательно что данные останутся в базе)
зафиксироватьТранзакцию - сделать все предыдущие изменения актуальными |
|||
4
PuhUfa
01.03.12
✎
10:00
|
(0) купи правильный СП от ...
|
|||
5
Ненавижу 1С
гуру
01.03.12
✎
10:00
|
в первом случае это примерно аналог INSERT/UPDATE, во втором фиксация транзакции
|
|||
6
0xFFFFFF
01.03.12
✎
10:01
|
... и главное ведь полосочка то уже не короткая :)
|
|||
7
Reset
01.03.12
✎
10:17
|
Понапридумывали синонимов для запутывания юных умов
|
|||
8
Spieluhr
01.03.12
✎
10:17
|
чем отличается железо от говядины?
|
|||
9
Кириллка
01.03.12
✎
10:19
|
метода ЗафиксироватьТранзакцию какого класса?
|
|||
10
Heckfy
01.03.12
✎
10:19
|
(8) Да ничем. Кило железа весит столько же сколько кило говядины.
|
|||
11
loonypy
01.03.12
✎
10:20
|
Что все так удивлены, будто у меня стаж лет 5, а я все еще таких вещей не знаю? Реального опыта у меня нет, только по Радченко (во франче с месяц "работаю" - итски развожу). Вот и пример из Радченко:
Товар = Справочники.Номенклатура.СоздатьЭлемент(); Товар.Наименование = "фыв"; ..... Товар.Записать(); //Почему не просто ЗафиксироватьТранзакцию()? ps >>... и главное ведь полосочка то уже не короткая :) У меня все большое:) |
|||
12
Reset
01.03.12
✎
10:21
|
(10) Нефига, кило говядины весить меньше будет, у ней объем при равной массе (1кг) больше, ее атмосферное давление сильнее выталикивает, поэтому вес меньше!
|
|||
13
zladenuw
01.03.12
✎
10:21
|
||||
14
Wobland
01.03.12
✎
10:22
|
(12) 510 постов - мало? ;)
что тяжелее? |
|||
15
Heckfy
01.03.12
✎
10:22
|
(12) Ну это если кусок говядины попилить на мелкие, что бы площадь соприкосновения с воздухом стала больше, а изначально они равны будут.
|
|||
16
Reset
01.03.12
✎
10:23
|
(14) ыыы не видел той ветки, я только v8 читаю ))
|
|||
17
zladenuw
01.03.12
✎
10:23
|
(11)
НачатьТранзакцию (BeginTransaction) Синтаксис: НачатьТранзакцию() Описание: Открывает транзакцию. Транзакция предназначена для записи в информационную базу согласованных изменений. Все изменения, внесенные в информационную базу после начала транзакции, будут затем либо целиком записаны, либо целиком отменены. Пример: // Увеличение закупочной цены на 5% ВыборкаТоваров = Справочники. Номенклатура. Выбрать(); НачатьТранзакцию(); Пока ВыборкаТоваров.Следующий() Цикл ТоварОбъект = ВыборкаТоваров.ПолучитьОбъект(); ЗакупочнаяЦена = ТоварОбъект.ЗакупочнаяЦена; Если ЗахупочнаяЦена <> 0 Тогда ТоварОбъект.ЗакупочнаяЦена = ЗакупочнаяЦена * 1.05; ТоварОбъект.Записать(); КонецЕсли; КонецЦикла; ЗафиксироватьТранзакцио(); См. также: Глобальный контекст, метод ЗафиксироватьТранзакцию. Глобальный контекст, метод ОтменитьТранзакцию. ОтменитьТранзакцию (RollBackTransaction) Синтаксис: ОтменитьТранзакцию() Описание: Отменяет открытую ранее транзакцию. Все изменения, внесенные в информационную базу в процессе транзакции, будут отменены. Пример: Если ОбнаруженыОшибки Тогда ОтменитьТранзакцию(); КонецЕсли; |
|||
18
Spieluhr
01.03.12
✎
10:24
|
(11) Узнайте сначала что такое транзакция, вопрос сам собой отпадет
|
|||
19
Reset
01.03.12
✎
10:25
|
(15) Не будем оффтопить в серьезной тематической ветке! хотя я остаюсь при своем мнении ;P
|
|||
20
Maxus43
01.03.12
✎
10:26
|
пятница уже? я что-то пропустил
|
|||
21
Heckfy
01.03.12
✎
10:26
|
(19) Согласен. Не будем грешить
|
|||
22
Heckfy
01.03.12
✎
10:26
|
+ (21) ЗЫ: Только я имел ввиду вес, а не массу.
|
|||
23
D_Pavel
01.03.12
✎
10:28
|
(15) Как не пили, обьем кусочков не изменится. Все равно говядина весит меньше.
|
|||
24
loonypy
01.03.12
✎
10:33
|
>>Узнайте сначала что такое транзакция, вопрос сам собой отпадет
Знаю, что такое: если не вся последовательность операций в транзакции выполнилась, то вся последовательность отменяется - в базу ничего не пишется. В примере мы записываем в справочник Номенклатура новый элемент. Это либо один insert, либо несколько, если у элемента есть табличная часть. У Радченко во всех таких примерах пока ни разу не видел метода ЗафиксироватьТранзакцию() (пока до 16го задания дошел) - решил, что это делает метод Записать(). Получается у Радченко не совем точно и нужно всегда добавлять ЗафиксироватьТранзакцию() после внесения изменений? |
|||
25
D_Pavel
01.03.12
✎
10:35
|
метод Записать() сам фиксирует транзакцию, если ты вручную не дал команду что транзакцию не нужно фиксировать автоматически методом НачатьТранзакцию()
|
|||
26
D_Pavel
01.03.12
✎
10:35
|
Если НачатьТранзакцию() нет, то ЗафиксироватьТранзакцию() не требуется.
|
|||
27
Reset
01.03.12
✎
10:35
|
(24) Не нужно. Не ты начинал - не тебе закрывать!
Нужно только если ты начал ее НачатьТранзакцию(). Можешь для упрощения рассматривать как некие логические скобки |
|||
28
Maxus43
01.03.12
✎
10:36
|
(25) ты его запутаеш ещё сильнее. не надо смешивать Записать() и Транзакции, каша в голове будет
|
|||
29
Reset
01.03.12
✎
10:36
|
Занимательная транзактология на мисте
|
|||
30
zak555
01.03.12
✎
10:36
|
(24) так ты у него и не увидишь
|
|||
31
D_Pavel
01.03.12
✎
10:37
|
(28) Я так и подумал. Написал следом попроще!
|
|||
32
loonypy
01.03.12
✎
10:38
|
Получается это одно и тоже? Либо
Товар.Записать(); либо НачатьТранакцию() ... ЗафиксироватьТранзакцию() |
|||
33
Maxus43
01.03.12
✎
10:38
|
(32) нееееееееееет
|
|||
34
Reset
01.03.12
✎
10:38
|
(32) Нет
|
|||
35
Maxus43
01.03.12
✎
10:39
|
Записать - метод ОБЪЕКТА. Начать-Зафиксировать - принимать или нет изменения над даныыми ИБ произошедшие в рамках данной транзакции
|
|||
36
zak555
01.03.12
✎
10:39
|
(32) наиши так
НачатьТранакцию() Товар.Записать(); ОтменитьТранку(); |
|||
37
Reset
01.03.12
✎
10:40
|
Вот архикривейший (не делай так;P) аналог
НачатьТранзакцию(); А=Создать(); А.Записать(); ОтменитьТранзакцию(); или А=Создать(); А.Записать(); А.Удалить(); |
|||
38
Ненавижу 1С
гуру
01.03.12
✎
10:40
|
(0) почитай про транзакции
|
|||
39
D_Pavel
01.03.12
✎
10:40
|
(32) Получается это одно и тоже:
Либо Товар.Записать(); либо НачатьТранакцию() Товар.Записать(); ЗафиксироватьТранзакцию() |
|||
40
D_Pavel
01.03.12
✎
10:41
|
(37) Это не аналог!! ! ! В первом случае произойдет запись и удаление, во втором не происходит
|
|||
41
Ненавижу 1С
гуру
01.03.12
✎
10:41
|
(39) да, а вот это нет
Товар1.Записать(); Товар2.Записать(); или НачатьТранзакцию(); Товар1.Записать(); Товар2.Записать(); ЗафиксироватьТранзакцию(); |
|||
42
Reset
01.03.12
✎
10:42
|
(40) Да ты чо)
|
|||
43
Reset
01.03.12
✎
10:42
|
(40) Не реагируй серьезно, пример шуточный. Написал же.
|
|||
44
D_Pavel
01.03.12
✎
10:42
|
(42) Именно так! Только наоборот, В первом случае НЕ произойдет запись и удаление, во втором происходит
|
|||
45
Maxus43
01.03.12
✎
10:43
|
(40) произойдёт запись таки, но потом и откат транзакции, это не удаление в привычном смысле но всё таки
|
|||
46
Ненавижу 1С
гуру
01.03.12
✎
10:44
|
(45) может не произойти ))
|
|||
47
D_Pavel
01.03.12
✎
10:44
|
(41) нет , а вот это да
Товар1.Записать(); Товар2.Записать(); или НачатьТранзакцию(); Товар1.Записать(); ЗафиксироватьТранзакцию(); НачатьТранзакцию(); Товар2.Записать(); ЗафиксироватьТранзакцию(); |
|||
48
Maxus43
01.03.12
✎
10:45
|
(46) ну если при записи отказа не будет - таки запишется, в рамках данной транзакции и запросы к записаному элементу делать можно, чего нельзя делать к незаписанному
|
|||
49
D_Pavel
01.03.12
✎
10:46
|
И еще, самое главное! Чтобы НачатьТранзакцию() выделялось красным, нужно вконце ставить ";"
НачатьТранзакцию(); |
|||
50
D_Pavel
01.03.12
✎
10:46
|
НачатьТранзакцию();
НачатьТранзакцию(); |
|||
51
Maxus43
01.03.12
✎
10:47
|
бгг
|
|||
52
D_Pavel
01.03.12
✎
10:47
|
Ой. Даже синим не выделяется....
|
|||
53
Maxus43
01.03.12
✎
10:47
|
надо 5 и более строк помойму чтоб раскрас пошёл
|
|||
54
D_Pavel
01.03.12
✎
10:48
|
НачатьТранзакцию();
НачатьТранзакцию(); НачатьТранзакцию(); НачатьТранзакцию(); НачатьТранзакцию(); |
|||
55
ptiz
01.03.12
✎
10:48
|
Упрощенно:
Любое внесение изменений в базу данных - это транзакция. Несколько изменений можно объединить в одну большую транзакцию. Транзакции могут быть вложенными: внутри одной большой - несколько маленьких. |
|||
56
Reset
01.03.12
✎
10:48
|
НачатьТразакцию() |
|||
57
Maxus43
01.03.12
✎
10:48
|
(55) тока в 1с нет вложеных транзакций)
|
|||
58
D_Pavel
01.03.12
✎
10:49
|
А если так сделать, запишется или нет?
НачатьТранзакцию(); НачатьТранзакцию(); Док.Записать; ЗафиксироватьТранзакцию(); ОтменитьТранзакцию(); |
|||
59
Reset
01.03.12
✎
10:49
|
(55) А большая внутри маленькой не может?
|
|||
60
Maxus43
01.03.12
✎
10:49
|
(57) + точнее отмена вложеной ведёт к отмене общей. ЕМНИП
|
|||
61
Reset
01.03.12
✎
10:49
|
+(57) По кр мере на логическом уровне)
|
|||
62
D_Pavel
01.03.12
✎
10:49
|
(60) Логично. Если это так
|
|||
63
Maxus43
01.03.12
✎
10:51
|
(62) не логично, может потребоваться именно вложенная транзакция в прямом смысле, без отмены общей
|
|||
64
Федя Тяпкин
01.03.12
✎
10:51
|
(11) месяц только во франче. забудь тогда просто конструкцию "ЗафиксироватьТранзакцию();" в ближайший год, она тебе точно не понадобится.
|
|||
65
D_Pavel
01.03.12
✎
10:52
|
(63) может. И это не доказывает что не логично.
|
|||
66
D_Pavel
01.03.12
✎
10:53
|
(63) не правильно прочитал (60). Всё правильно, это не логично
|
|||
67
loonypy
01.03.12
✎
10:57
|
>>месяц только во франче. забудь тогда просто конструкцию "ЗафиксироватьТранзакцию();" в ближайший год, она тебе точно не понадобится.
По хорошему мне сейчас СКД заняться надо, но раз тему начал, то нужно довести. А то через какое-то время опять с ней вылезу. Что делает метод Записать();? Судя по обсуждению, его использование не гарантирует, что изменения запишутся в базу. |
|||
68
Ненавижу 1С
гуру
01.03.12
✎
10:59
|
(58) имхо, нет
|
|||
69
Reset
01.03.12
✎
10:59
|
(67) В общем случае да. Но (64) прав - не забивай сейчас этим голову
|
|||
70
Maxus43
01.03.12
✎
10:59
|
(67) если не будет ошибок при записи - запишется
|
|||
71
Reset
01.03.12
✎
11:00
|
(58) (70) не запишется
|
|||
72
Jaffar
01.03.12
✎
11:00
|
(17) что есть "ЗафиксироватьТранзакцио();"? :-)
|
|||
73
Reset
01.03.12
✎
11:00
|
(70) Вложенности нет, но счетчик "начал" есть
|
|||
74
Jaffar
01.03.12
✎
11:01
|
(17) и что есть "ЗахупочнаяЦена"? :-)
|
|||
75
Reset
01.03.12
✎
11:01
|
грубая аналогия
Если Если Прервать <--- аналог отменить КонецЕсли; <--- аналпг зафиксировать КонецЕсли; <--- аналпг зафиксировать |
|||
76
Maxus43
01.03.12
✎
11:02
|
(71)(73) при чем тут (70)?)
|
|||
77
Reset
01.03.12
✎
11:03
|
(76) НЕ при чем, я смотрел косо на номера постов, изв (
|
|||
78
loonypy
01.03.12
✎
11:08
|
То запишет, то не запишет. Черт, я думал вы тут в курсе. А еще стебаться стали в начале:) Когда мне необходимо будет писать код в блоке НачатьТранзакцию(); ... ЗафиксироватьТранзакцию(); а когда ограничиться одним Записать();?
|
|||
79
loonypy
01.03.12
✎
11:09
|
Кто в каких случаях как делает?
|
|||
80
Reset
01.03.12
✎
11:10
|
(78) Никогда не пиши.
Когда время придет, разберешься. |
|||
81
Reset
01.03.12
✎
11:12
|
Стебаться начали, потому что вопрос, ну мягко говоря, странный. Чем стол от стула отлчиается, ведь ножки и там там.
|
|||
82
Jaffar
01.03.12
✎
11:12
|
(78) скажем так: метод Записать() служит для записи только одного объекта, а транзакционные скобки можно использовать для групповой записи (или отмены записи) нескольких объектов.
например, ты создаешь элемент справочника "Номенклатура" и его подчиненные единицы измерения. НачинаешьТранзакцию, потом каждую из них (и саму номенклатуру) ты Записываешь, и если все хорошо - ЗакрываешьТранзакцию (тогда у тебя есть гарантия, что записались ВСЕ объекты), а если где-то произошла ошибка - тогда ОтменяешьТранзакцию (тогда у тебя есть гарантия, что НИ ОДИН объект не записался). |
|||
83
Maxus43
01.03.12
✎
11:13
|
(78) мы всё понимаем, внимательней прочитай что писали
|
|||
84
Spieluhr
01.03.12
✎
11:14
|
(79) Открой любую типовую конфигурацию и сделай глобальный поиск по тексту НачатьТранзакцию()
|
|||
85
n koretsky
01.03.12
✎
11:15
|
(0) тролль детектед?
|
|||
86
Jaffar
01.03.12
✎
11:16
|
кстати, Записать() - методы объектов (документа, элемента справочника), аналогичные методы - у наборов записей регистров, а НачатьТранзакцию()/ЗафиксироватьТранзакцию()/ОтменитьТранзакцию() - это методы глобального контекста, то есть им пофих, что записывать и отменять.
и да - ЗафиксироватьТранзакцию() или ОтменитьТранзакцию() не сработают без НачатьТранзакцию(). |
|||
87
Reset
01.03.12
✎
11:24
|
В качестве пятничного анонса:
Процедура ОбработкаПроведения(Отказ, РежимПроведения) Сообщить(ТранзакцияАктивна()); ОтменитьТранзакцию(); КонецПроцедуры Почему сначала пишет "Истина", а потом происходит ошибка времени выполнения: {Документ.ХХХ(nn)}: Ошибка при вызове метода контекста (ОтменитьТранзакцию) по причине: Транзакция не активна |
|||
88
Ненавижу 1С
гуру
01.03.12
✎
11:25
|
вот проблема которая имеет место быть: транзакции живут только до завершения метода вызвавшего его
то есть нельзя по первой кнопке начать транзакцию, потом что то делать, а потом по другой кнопке зафиксировать |
|||
89
loonypy
01.03.12
✎
11:25
|
>>мы всё понимаем, внимательней прочитай что писали
>>скажем так: метод Записать() служит для записи только одного объекта, а транзакционные скобки можно использовать для групповой записи (или отмены записи) нескольких объектов. Записать() - insert\update на уровне одного объекта, но при создании нового элемента справочника (например) бывает нужно еще и связать его с другими объектами (справочниками\документами) по ссылке. Создание может быть выполнено, а связь по какой-либо причине нет. Чтобы такого не случилось, оборачиваем весь этот код (создание элемента, связь с другим элементом справочника\документа - несколько строк) транзакцией. Так? |
|||
90
Reset
01.03.12
✎
11:26
|
(89) Примерно так.
|
|||
91
Maxus43
01.03.12
✎
11:27
|
(89) как вариант применения. сам метод ЗафиксироватьТранзакцию - фиксирует изменения, если Записать у объекта нет - нечего фиксировать
|
|||
92
Maxus43
01.03.12
✎
11:28
|
(88) и правильно. ибо накуа?
|
|||
93
Reset
01.03.12
✎
11:28
|
(89) Т.е. это делается дл того, что при записи гаранитированно и создавалась свять. Если это по какой-то причине не удалось, то и записть не долдна произойти.
|
|||
94
loonypy
01.03.12
✎
11:35
|
Мне похоже действительно рано за этот вопрос браться - мозг на 1с не перестроился еще.
Всем большое спасибо за терпеливые разъяснения. |
|||
95
Maxus43
01.03.12
✎
11:37
|
(94) это не 1с, насколько помню ни в одном языке програмирования Транзакция не выполняет функцию записи. это из другой оперы вобще
|
|||
96
loonypy
01.03.12
✎
11:41
|
(95) Транзакция только подтверждает запись?
|
|||
97
Maxus43
01.03.12
✎
11:42
|
(96) да. подтверждает все изменения с данными в рамках транзакции
|
|||
98
Reset
01.03.12
✎
11:43
|
Или не подтверждает;) - это основная фича) чтобы можно было отменить
|
|||
99
loonypy
01.03.12
✎
11:44
|
Типа логического блока. Тогда все встало на свои места. Получается Ненавижу 1С в самом начале ответил. Черт, не приятно, когда читаешь и не понимаешь.
Тогда все, тема исчерпана. Еще раз всем большое спасибо. |
|||
100
n koretsky
01.03.12
✎
11:53
|
100!
|
|||
101
Ненавижу 1С
гуру
01.03.12
✎
12:39
|
(92) неправильно, ибо может быть так надо
|
|||
102
Maxus43
01.03.12
✎
12:51
|
(101) открывай офрму модально и делай на ней чонить в рамках транзакции
|
|||
103
Ненавижу 1С
гуру
01.03.12
✎
12:52
|
(102) я не спрашиваю как это сделать через задницу ))
|
|||
104
Maxus43
01.03.12
✎
12:54
|
(103) ну работать то будет же!) а открытую транзакцию оставлять когда юзер ушёл домой продолжать свой род - тоже не правильно
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |