Имя: Пароль:
1C
 
Допустим ли такой список для транзакции?
0 Kvantic
 
11.03.05
11:54
При записи одного из документов мне необходимо, одновременно менять
ещё и некоторые значения справочников. Причём все изменения должны либо происходить все одновременно, либо вообще не происходить.
В модуле формы документа применяю такю конструкцию
Перем СЗ; // уровня формы
// Тело модуля
СЗ=СоздатьОбъект("СписокЗначений");
//
Процедура Процедура1(Элемент1)
Спр1=СоздатьОбъект("Справочник1");
Спр1.НайтиПоНаименованию("Элемент1");
Спр1.Реквизит1=..Присваиваю значения реквизитам .. какие либо
...
СЗ.ДобавитьЗначение(Спр1.ТекущийЭлемент(),"Записать");
КонецПроцедуры

Процедура ПоКнСохранить()
 Перем п,стр;
 СЗ.ДобавитьЗначение(Контекст,"Записать");
 Попытка
   НачатьТранзакцию()
   Для ш=1 По СЗ.РазмерСписка() Цикл
     п=СЗ.ПолучитьЗначение(ш,стр);
     Если стр="Записать" Тогда
       п.Записать()
     КонецЕсли;
   КонецЦикла;
    ЗафиксироватьТранзакцию();
 Исключение
    ОтменитьТранзакцию();
 КонецПопытки;
КонецПроцедуры

Причём процедура 1 может вызываться несколько раз и причём может добавить в список значений для записи один и тот же элемент справочника несколько раз только с разными реквизитами.
И по идее после фиксирования транзакции у этого элемента справочника,
должны быть записаными реквизты соответствующие последним внесённым
процедрой1 реквизитами.
Справиться ли механизм транзакций с таким заданием?
1 Дурочкааа 1С
 
11.03.05
11:57
Мазохизм.
2 Kvantic
 
11.03.05
12:00
Да мазохизм, но никуда не денешься!
Задача такова.
3 Дурочкааа 1С
 
11.03.05
12:06
Какая на хрен задача?! Какие транзакции?! Уймись. Это же 1С. Транзакции здесь нужны в таких редких случаях, что тебе до этого не додуматься.
4 Kvantic
 
11.03.05
12:24
Да что вы говориттте! Уважаемая! Конечно куда нам убогим до такого - как пешком до Китая.
Однако в (0) задача поставлена точно как она стоит и кроме как с помощью механизма транзакций её не решить.
5 Kvantic
 
11.03.05
13:49
Вообщем провел ряд экспериментов. И выяснил если кому интересно
Если в пределах одной транзакции пытаешься два раза записать один и тот же объект - возникает исключение и транзакцию завершить не получиться.
Поэтому список для транзакции пришлось проверять на дубли перед внесением туда объектов.
6 Дурочкааа 1С
 
11.03.05
16:23
Не знаю, конечно, что у тебя за задача такая, но писать реквизиты справочников при записи документа это, вряд ли, хорошее решение. Обычно документы меняют периодические реквизиты справочников. И делается это не при записи (???), а при проведении, которое, кстати, происходит всегда в режиме транзакции. Соответственно, корректно отрабатывается перепроведение.
7 SKrin
 
11.03.05
16:35
вынеси скобки транзакции за скобки попытки
8 427
 
11.03.05
19:36
хм ... при записи документа или проведении документа?
9 Чебурген
 
11.03.05
19:50
говори, что при проведении и он тебя обгадит по полной .. :-)
10 427
 
11.03.05
20:05
я на дятлов в (0) не обижаюсь... Долбят мирно железный столб и пусть долбят...
11 Чебурген
 
11.03.05
20:06
(10) а на столбы? ;-)
12 427
 
11.03.05
20:44
а столбы не я ставил - нах мне чужие охранять...
13 Пит
 
11.03.05
20:45
14 laview
 
12.03.05
00:38
(3) Неправда, транзакции вещь очень интересная, допустим тебе нужно

НачатьТранзакцию()
    // что то сделать
Если // если получилось Тогда
ЗафиксироватьТранзакцию()
Иначе
ОтменитьТранзакцию()
КонецЕсли

И тебе не нужно писать целый фрагмент кода предусматривающий действия при неудачном проведении документа, например.
Система все сделает сама!
15 Дурочкааа 1С
 
12.03.05
01:58
(14) Обожаю клоунов. Только что слезли с телеги фокспро или акцеса или еще чего-нибудь. Увидев транзакцию, радуются как дети. Ну, как же! Такая удача! ""тебе не нужно писать целый фрагмент кода Система все сделает сама!"" Интересный ты мой, транзакция в модуле проведения - масло масленное. Если ты придумаешь ситуацию в которой требуется использование транзакции, значит ты не умеешь организовать данные. И никакие транзакции тебя не спасут, как, впрочем, и (0). Через какое-то время эти приблуды, типа (0) либо отпадут сами собой (и это будет самый бескровный вариант), либо база превратится в помойку.

.               0_
.                 \  `.       ___,
.                   \   \    /   __>0
.            /\     /    | /'   /
.          /     \/      `     \,` ' --.__
.        /     /(___________)_   \
.        |    /  // .--.       .--.  \\   \   \
.        0    //  :@  ___ @:  \\    \/
.              ( o  ^ (___) ^  o )    0
.               \   \_______/   /
.                 '._________.'
16 427
 
12.03.05
06:10
(13) Помочь утопиться в реке?


(15) я же ведь не зря вопрос (10) задал...
17 Guk
 
12.03.05
06:29
(0) У тебя сертификат, есть?...
18 Alexandr Ch
 
12.03.05
10:03
(15) К теме (0) не относится, но вот Вы про транзакции глупости говорите, без них ни в одной приличной системе не обойтись
19 Дурочкааа 1С
 
12.03.05
13:48
(18) Как здесь принято говорить: спрашивается при чем тут 1С? Я же не про транзакции говорю, а про тему в (0)
20 Редкий случай
 
12.03.05
16:00
(3) Запиши пакет документов в базу (например при переносе) без транзакции и с транзакцией. Почувствуй разницу.
21 Дурочкааа 1С
 
12.03.05
16:02
(20) Не чувствую. Почему?
22 Редкий случай
 
12.03.05
16:12
(+20) Сколько по времени занимает процесс в том и другом случае?
(21) Я не доктор. Органы чувств не лечу.
23 Дурочкааа 1С
 
12.03.05
16:27
Недоктор, не надо меня лечить.
24 France
 
12.03.05
16:27
(22) не надо вопросом на вопрос..
распиши все - а народ оценить всю глубину твоих знаний..
25 Редкий случай
 
12.03.05
16:44
(24) Глубина моих знаний в этих "великих" трех строчках :)
НачатьТранзакцию();
.....
Док.Записать();
ЗафиксироватьТранзакцию();
26 France
 
12.03.05
16:45
(25) где?..
27 Редкий случай
 
12.03.05
16:55
(26) Чувствую сейчас ты проявишь всю "глубину" уже своих знаний :)
...  = заполнение реквизитов документа (из DBF например)
28 France
 
12.03.05
17:01
а на свой вопрос из (22) готов ответить?))
29 Редкий случай
 
12.03.05
17:07
(28) С транзакцией в разы быстрее.
Хватит вопросов. Пора переходить к критике.
30 France
 
12.03.05
17:13
чот лень мне щаз критику разводить..
но транзакция по определению двухступенчатый процесс - и не может быть быстрее чем его отсутствие..
31 427
 
12.03.05
17:14
Редкий случай убогого дятла....
32 France
 
12.03.05
17:16
(31) на кого бочку катиш?..
33 Редкий случай
 
12.03.05
17:23
(32) Разве не понятно? Не на тебя уж точно.
34 France
 
12.03.05
17:29
(33) моя понималка вчера залита водкой на корпоративной вечерике.
35 Редкий случай
 
12.03.05
17:52
(34)Снова замерил время загрузки 400 доков.
С транзакцией - 4 сек.
Без транзакции - 14 сек.
36 Дурочкааа 1С
 
12.03.05
18:00
(35) Немного статистики впечатляет!
37 France
 
12.03.05
18:02
(35) согласен..
сам тож проверил, в силу чего (30) отменяется..
38 France
 
12.03.05
18:03
(35) я справочник подгружал на дбф базу
вот теперь объясни, за счет чего такой прирост производительности.
39 Редкий случай
 
12.03.05
18:04
(36) Техника далеко вперед шагнула :)
На старой разрыв был намного больше.
40 France
 
12.03.05
18:05
хотя, можно не объяснять..
без транзакции количество процедур записи в базу равняется количеству элементов.
с транзакцией запись элементов идет за один раз..
41 Crom
 
12.03.05
19:41
Чел который не знает зачем нужны транзакции (даже не говоря о скорости) просто никогда не занимался серъезными разработками.
Попробуй ДУРОЧКАААААОДИНЭС сделать загрузки 14000 элементов и 50000 документов в неделю из одной базы в другую с требованием либо переходят все и корректно, либо не преходит все и корректно, либо, бухгалтеру мусор не нужен.
Ась? Как ты говоришь это делать? При проведении? Чего? Кота за.......?
А, я так и подумал. СпасибА!
42 427
 
12.03.05
19:49
14000 новых элементов? Чего элементов? номенклатуры?...
43 427
 
12.03.05
19:50
кстати, в рамках одной транзакции загрузить 50000 доков будет .опа
придется колотить транзакции
44 Kvantic
 
12.03.05
19:57
Эва куда обсуждение занесло! Только отлучись на денёк!
Собственно на вопрос я ответ получил сам экспериментально.
Ну а без транзакций всё же не обойтись и даже не в скорости дело!
И менять элементы справочников иногда необходимо не только при проведении, но и при записи.
(15) Представь например задачу где до проведения документ проходит несколько состояний, в каждом из которых оператор, (несколько операторов) совершают с ним различные действия в зависимости от его состояния. И только в завершающем состоянии документ проводится - делает финансовые движения.
Например документ - заказ. Надо его принять выделить ресурсы, отдать заказ исполнителю, при этом следует вести очередь исполнителей - которая меняется при сохранении документа с назначенным исполнителем и другие сопутствующие задачи.
Представь например, что заказ записался, а очередь с исполнителем нет. Возникает путаница.
45 Kvantic
 
12.03.05
20:03
(41) Да такие задачки и у меня тоже возникали.
И опять же здесь без транзакций геморрою было бы достаточно.
А интересно рисунок долго делала или готовый был?
46 Дурочкааа 1С
 
12.03.05
20:32
Что я вам казлам скажу? Все тоже самое. Мазохизм. Реальных задач, при которых требуется использовать транзакцию нет. Все эти ваши цифры и потуги, найти такую ситуацию - детский лепет.
47 Дурочкааа 1С
 
12.03.05
20:38
(41) Это тебе, серьзный ты мой разработчик.

____________________________________________________________________
|  '  |  '  |  ' |  '  |  '  |  '  |  '  |  '  |  '  |  '  |  '  |  '  |  '  |  '  |  '  |  '  |  '  |  '  |  '  |  '  |  '  |  '  |  '  |  '  |  '  |
|          |         |           |          |          |          |           |          |          |          |           |          |    |        
|_____1____2____3____ 4_____5____6____7_____8____9____10____11____12_|
48 Дурочкааа 1С
 
12.03.05
20:45
Что касается загрузки больших объемов данных, то загрузка их в одной транзакции - решение крайне безответсвенное. Дурацкие цифры 15000 справочников и 50000 документов - загрузка таких данных скорее всего никогда не произойдет, потому что система обязательно подвиснет. И транзакция только ухудшит ситуацию - повторную загрузку придется начинать сначала.
49 админ1
 
12.03.05
21:23
ну...мой скромный опыт в плане транзакций-16 тысяч записей в справочник, примерно 10 реквизитов, перебором-45 минут, 1-ой транзакцией-меньше 30 секунд, бил транзакциями по 100 элементов-1,5 минуты
50 427
 
12.03.05
22:10
(49) не факт... попробуй на 10 000 доков...
51 France
 
12.03.05
22:19
Транзакции не предназначены для ускорения процесса загрузки - суть их атомарность.
То, что в 1С при малом объеме данных и базе ДБФ дает ускорение, это побочный эффект.
Я проводил испытания на 250 элементах на ДБФ.
Если будет баааальшой объем, и скорость записи высокой, или же сравнимой с временем подготовки документов для записи, то транзакции не дадут прироста в скорости..
52 laview
 
13.03.05
01:01
(15) На фокспро никогда не писал. И даже не знаю что это такое. А про модуль проведения я ничего не говорил.
53 laview
 
13.03.05
01:06
(15) Конструкция ОтменитьТранзакцию() заменяет собой все действия, предусматривающие ситуацию неудачного выполнения чего то в блоке НачатьТранзакцию(), где например могли элементы справочников создаваться и т.п. И тебе не надо писать алгоритм их удаления.
54 Парижская фанера
 
13.03.05
01:52
(49) У вас очень скромный опыт... Попробуйте загрузить 10 000 или 100 000 в одной транзакции. Дробить надо однозначно, а 1С может и на бок лечь.
55 Дурочкааа 1С
 
13.03.05
02:21
(52)
>>А про модуль проведения я ничего не говорил.

Как же, как же ...

>>И тебе не нужно писать целый фрагмент кода предусматривающий действия при неудачном проведении документа, например.

Это в (14) Пушкин паясничал.
56 France
 
13.03.05
02:34
решил все таки до конца разобраться с влиянием механизма транзакций 1С на ДБФ и SQL базах. Выходит, что производительность повышается при ДБФ за счет сокрашения циклов записи на диск. Влияние транзакций на SQL почти нету  в силу того, что процессом записи на диск занимается SQL. При включеннии механизма кэширования записи падала производительность на SQL базах. При ДБФ результат менялся незначительно.
Ёкспериментировал на машине с Win XP Prof. С4 - 2000 при 256М ОЗУ. Эксперимент проводился на пустой базе, где имелся всего один справочник. Справочник заполнялся в цикле от 0 до 10000 элементов.
         |         DBF                |           SQL    
             |_________________________________|_____________________________  
   диск->|    Кеш вкл          |   Кеш откл.     |   Кеш вкл     | Кеш откл.
С транзакц    | 0 мин 5 сек   | 0 мин 5 сек     |  2 мин 19 сек |  0 мин 56 сек
Без транза    | 21 мин 41 сек |26 мин 40 сек    |  1 мин 12 сек |  0 мин 55 сек

ЗЫ если какой либо дятел будет  утверждать о повышении скорости записи при использовании механизма транзакций, и при этом не говорит про формат хранения, можно смело плюнуть ему в глаз.
ЗЫЫ утверждение в (30) было связано с тем, что все время работал только с SQL базами.
57 France
 
13.03.05
02:40
надеюсь, что щаз хоть таблица прально выведется.
         |         DBF                |           SQL    
         |______________ _____________|__________________________  
   диск->|  Кеш вкл    |   Кеш откл.  | Кеш вкл     | Кеш откл.
С транзакц|0 мин 5 сек  | 0 мин 5 сек  |2 мин 19 сек |0 мин 56 сек
Без транза|21 мин 41 сек| 26 мин 40 сек|1 мин 12 сек |0 мин 55 сек

ЗЫ, если нет, модеры, будте добры, поправьте.
58 Редкий случай
 
13.03.05
09:01
(56)Дорогой любитель дятлов. Прочитайте внимательно (3). Если есть время посмотрите, в той же типовой бухии, использование 1Странзакций (во как сильно придумал :).
(51)Спасибо. Я понял, что суть транзакции в её "атомарности".

Так, ни о чем. Торопиться не надо, работа почасовая.
59 Guk
 
13.03.05
09:06
(55) Ну и какого мы хню несём?...
60 France
 
13.03.05
12:23
(58) перечитал внимательно (3) и какой вывод я должен сделать?
И не понятна ирония по поводу "атомарности" транзакции. Есть сказать по существу данного вопроса?
61 Guk
 
13.03.05
12:31
Удивительной породы люди - одинэсники. До сих пор не перестаю удивляться...
62 427
 
13.03.05
12:48
(61)
У этой породы есть даже товарный знак...

"Сделано в 1С"... (c) Владелец товарного знака
63 Редкий случай
 
13.03.05
13:20
(60)ЖКК с.103 <Процедуры работы с транзакциями>
Спасибо за дискуссию.
ЗафиксироватьТранзакцию().
64 France
 
13.03.05
13:41
(63) ))