Имя: Пароль:
1C
1С v8
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С, СУБД...) транзакция - и в африке транзакция.
Хотя, если взять военное время...