|
|
|
Допустим ли такой список для транзакции? | ☑ | ||
|---|---|---|---|---|
|
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
|
помоги чуваку
http://1c.realnet.ru/cgi-bin/forum.cgi?ask=12466&pp=last |
|||
|
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) ))
|
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |