|
v8: Транзакция | ☑ | ||
---|---|---|---|---|
0
Trainee
29.04.12
✎
13:34
|
Дано что-то вроде: v.8.2 Модуль формы.
&НаКлиенте Процедура Выполнить() ВыполнитьНаСервере() КонецПроцедуры &НаСервере Процедура ВыполнитьНаСервере() НачатьТранзацию() ... ЗафиксироватьТранзакцию()/ОтменитьТранзакцию() КонецПроцедуры Почему считается,что код внутри транзакции(допустим, заполнение таблицы документа из регистра сведений) будет выполняться быстрее? И почему не нужно его писать, допустим, формируя данные диаграммы? Это - http://www.intuit.ru/department/database/sql/16/4.html -пролистано, но моя-твоя-не-понимай по-прежнему)) |
|||
1
golden-pack
29.04.12
✎
13:38
|
>>>будет выполняться быстрее
WTF ? |
|||
2
Trainee
29.04.12
✎
13:40
|
Нет, вебинар Чистова ... Только вспомнить не могу в каком случае ...
|
|||
3
GROOVY
29.04.12
✎
13:59
|
Транзакции на быстродействие могут повлиять только при физической записи данных. На заполнение ТЧ вообще никак не повлияет.
|
|||
4
Trainee
29.04.12
✎
14:14
|
)) Спасибо, Павел )) Если можно уточните, пож. у Вас это в СПР обработка заполнения графиков работы.
А я видел вот такой код: &НаКлиенте Процедура Заполнить(Команда) ЗаполнитьСерв(); КонецПроцедуры // <Описание процедуры> // // Параметры // <Параметр1> - <Тип.Вид> - <описание параметра> // <продолжение описания параметра> // <Параметр2> - <Тип.Вид> - <описание параметра> // <продолжение описания параметра> // &НаСервере Процедура ЗаполнитьСерв() НачатьТранзакцию(); ДокОбъект = РеквизитФормыВЗначение("Объект"); Если Объект.СобираемыйКомплект.ВидНоменклатуры <> Перечисления.ВидыНоменклатуры.Комплект Тогда Сообщение = Новый СообщениеПользователю; Сообщение.Текст = "Собираемый комплект не имеет вида номенклатуры комплект"; Сообщение.Сообщить(); Возврат; КонецЕсли; Запрос = Новый Запрос("ВЫБРАТЬ | СоставКомплектов.ТМЦ КАК Номенклатура, | ЕСТЬNULL(СоставКомплектов.Количество, 0) * &КоличествоКомплектов КАК Количество |ИЗ | РегистрСведений.СоставКомплектов КАК СоставКомплектов |ГДЕ | СоставКомплектов.Комплект = &Комплект"); Запрос.УстановитьПараметр("Комплект", ДокОбъект.СобираемыйКомплект); Запрос.УстановитьПараметр("КоличествоКомплектов", ДокОбъект.Количество); ДокОбъект.СписокТМЦ.Загрузить(Запрос.Выполнить().Выгрузить()); ЗначениеВРеквизитФормы(ДокОбъект, "Объект"); ОтменитьТранзакцию(); КонецПроцедуры // ЗаполнитьСерв() (вопрос дурацкий, но не понимаю) |
|||
5
andrewks
29.04.12
✎
14:14
|
транзакция обеспечивает не быстроту, а целостность записи данных.
по времени может выходить как быстрее, так и медленнее, в зависимости от количества записываемых данных и кода внутри транзакции |
|||
6
Trainee
29.04.12
✎
14:16
|
Я читал определение и примеры транзакции. И я привел 2 куска кода в кот. они используются. Хочу понять зачем.
|
|||
7
andrewks
29.04.12
✎
14:19
|
(6) думаю, это просто гкодинг, а правильнее в данном случае использовать конструкцию "для изменения" или блокировки
|
|||
8
Trainee
29.04.12
✎
14:25
|
Не, это точно не гкодинг. ) Это один из вариантов решения... Мои в разы хуже ...
Идею я понял: в 1 случае - это ускорение записи в регистр. 2 - видимо, ошибка. Спасибо, теперь понятно ) |
|||
9
Aleksey
29.04.12
✎
15:01
|
(8) Это точно весь код? Ибо если Объект.СобираемыйКомплект.ВидНоменклатуры <> Перечисления.ВидыНоменклатуры.Комплект Тогда мы получим вечную транзакцию. Нет отмены транзакции
|
|||
10
maxile
29.04.12
✎
15:08
|
Зачем нужна транзакция? Вопрос по-моему очевиден. Транзакция - это блокировка, используемая для обновления.
|
|||
11
andrewks
29.04.12
✎
15:10
|
(10) ышо адын
|
|||
12
Anton_2011
29.04.12
✎
15:17
|
(10) Интересная мысль сэр. Я немного разжую для остальных: транзакция - есть договор о блокировке системы для её обновления.
|
|||
13
Trainee
29.04.12
✎
15:20
|
"Транзакция - это набор операций или действий, которые представляют собой, одну, неделимую операцию. Транзакция может быть либо выполнена в полном объеме, либо не выполнена вообще. Сделано это для сохранения логической целостности базы."©
Еще вопрос тогда ... В чем все-таки отличие управляемой блокировки от БлокироватьДляИзменений и от блокировки таблицы в запросе ... (ДА,теория прочитана.)Но я видел применение 2-ого варианта только в новом методе, а 3-его ...нигде. |
|||
14
andrewks
29.04.12
✎
15:20
|
да что же вы ограниченные какие? сущность транзакции вовсе не в блокировке. учите теорию, блеать
|
|||
15
KarpovDeniska
29.04.12
✎
15:21
|
(0)в транзакции данные копятся в буфер, а потом разом записываются разом в базу ,получается быстрее ( для чтения не катит)
|
|||
16
Anton_2011
29.04.12
✎
15:21
|
Советую использовать Предупреждение("") в модулях проведения документов. Ибо скучно уже. А так - очень забавляет наблюдать как $рут кирпичами "грамотные" 1Ц-спецыалисты увидев такое )
|
|||
17
Anton_2011
29.04.12
✎
15:22
|
(13) Транза?кция или транса?кция (англ. transaction, от лат. transactio — совершение, договор) — минимальная логически осмысленная операция, которая имеет смысл и может быть совершена только полностью (или полностью отменена).
До конца XX века в русском языке обычно фигурировало написание «трансакция»[1], в последнее время превалирует написание «транзакция» |
|||
18
andrewks
29.04.12
✎
15:24
|
(15) тоже неверное, в общем, утверждение
|
|||
19
Trainee
29.04.12
✎
15:24
|
Я привел определение транзакции. Я понимаю, что это не блокировка)))
Опытные 1С специалисты срут кирпичами увидев "Предупреждение" в коде )) |
|||
20
Anton_2011
29.04.12
✎
15:25
|
(19) В коде где? Если модуль формы - то разрешаю.
|
|||
21
Trainee
29.04.12
✎
15:25
|
Второй вопрос НЕ связан с первым. Просто лень топик открывать.
Уточните, если не сложно, про блокировки? |
|||
22
Anton_2011
29.04.12
✎
15:26
|
НачатьТранзакцию();
Предупреждение("Таки начали транзакцию!"); ЗафиксироватьТранзакцию(); |
|||
23
Trainee
29.04.12
✎
15:29
|
Anton_2011, зачем?
|
|||
24
andrewks
29.04.12
✎
15:29
|
транзакция 1С и транзакция СУБД суть две большие разницы.
1С != СУБД (файловый недоросток не в счёт) |
|||
25
Trainee
29.04.12
✎
15:31
|
KarpovDeniska, спасибо ))
|
|||
26
Anton_2011
29.04.12
✎
15:32
|
(23) хз
|
|||
27
Anton_2011
29.04.12
✎
15:33
|
(24) Не в даваясь в тех. подробности(1С, СУБД...) транзакция - и в африке транзакция.
Хотя, если взять военное время... |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |