09.04.10 — 09:12
У нас работают несколько расчетчиков в зп каждый формирует документ по определенным подразделениям сотр(сотрудников много), и соответсвенно ошибка «Ошибка обращения к данным при транзакции, выполняемой другим пользователем » , также например один может проводить документы а другие печатают отчеты -тоже ошибка.
поставили 300 сек время ожидания захвата таблиц всеравно такая хрень.
Что делать ? больше ставить? тормозить будет если поставить болше может снова вылететь ведь им постоянно нужно работать
1 — 09.04.10 — 09:13
базу переписывать
2 — 09.04.10 — 09:14
ставить всем 0.
3 — 09.04.10 — 09:15
Вот это поставь, полегче будет.
http://x-romix.narod.ru/vk_TerminalSleep.rar
А вообще, курить где тупит и переписывать на прямые…
4 — 09.04.10 — 09:17
Или распределить работу кадровиков, расчетчиков так, что бы не возникала обходимость одновременного обращения к одним и тем же таблицам.
5 — 09.04.10 — 09:18
Если в запросе условие по подразделению он ведь блокирует толко эти записи или нет?
6 — 09.04.10 — 09:19
(5) Нет.
7 — 09.04.10 — 09:20
(5) запрос вообще ничего не блокирует.
8 — 09.04.10 — 09:20
(5)Запрос блокирует весь список данных, которые использует 🙂
Начни разбираться в структуре хранения данных в 7.7 и все поймешь 🙂
… так же запросы во время проведения, это зло 🙂
9 — 09.04.10 — 09:21
+7 блокировка, только ежели кто-то чего-то проводит, ибо проведение — это всегда транзакция.
10 — 09.04.10 — 09:21
(7)Может быть, но ты записать, то же нечего не смогешь 🙂
Только читать
11 — 09.04.10 — 09:21
(8) Гон.
1с-кий запрос построен на «грязном чтении» и он не блокирует ничего.
12 — 09.04.10 — 09:22
(10) да ну ?
13 — 09.04.10 — 09:23
нет я понял, просто вот спросил там в основном условия по перебору элементов например справочника сотр тоже вылетает ошибка если это сделать на запросе будет лучше?
14 — 09.04.10 — 09:24
При формировании отчетов
15 — 09.04.10 — 09:25
выборка блокирует как я понимаю?
16 — 09.04.10 — 09:26
17 — 09.04.10 — 09:26
(15) Твоя задача, чтобы проведение и запись шли быстрее
18 — 09.04.10 — 09:28
(11)Ну не гони, у нас как раз вот запросы от 1С и блокировали всю базу, при этом это просто отчет по регистру 🙂
При этом, пока не выкидывали сего пользователя, все курили 🙂
19 — 09.04.10 — 09:30
а как тогда? одна делает расчет другая формирует отчет и ошибка но записей пока нет если перебор не влияет то что?
20 — 09.04.10 — 09:31
(19) Вот как разсчёт и блокирует…
21 — 09.04.10 — 09:31
весь журнал расчетов?
22 — 09.04.10 — 09:33
(18) ты бред то не неси..
23 — 09.04.10 — 09:33
нет смысла ставить секунды да хоть 500? просто расчет мин 20 идет
24 — 09.04.10 — 09:33
(22) Руками в тот отчет транзакцию влепили, вот и блокировал походу.
25 — 09.04.10 — 09:34
тогда на 20 мин все записи заблокированы транзакцией? Отчет не может?
26 — 09.04.10 — 09:35
(25) Ну не так чтобы все, но общий журнал блокирует, а без него все висит…
27 — 09.04.10 — 09:37
в отчете нет ранзакций
28 — 09.04.10 — 09:37
как тчеты формировать тогда что не правильно
29 — 09.04.10 — 09:37
какой общий?
30 — 09.04.10 — 09:38
Еще раз — ошибка блокировки возникает только при записи/проведении объектов ИБ..
и всё.
31 — 09.04.10 — 09:39
Ну я понял это у расчетчика которая хочет сформировать отчет вылазит данная ошибка
32 — 09.04.10 — 09:39
(31) ты это понял или ты это видел ?
33 — 09.04.10 — 09:40
вот видел
34 — 09.04.10 — 09:40
(22)Сам был поражен, но запрос был по дебиторке и брал данные за год 🙁
35 — 09.04.10 — 09:42
(34) да хоть за 100..
36 — 09.04.10 — 09:42
(33) чего видел ? Ленина ?..
37 — 09.04.10 — 09:43
вобщем если один человек формирует отчет, а у другого проводится расчет то у которого отчет вылазит ошибка блокировки данных другим пользователем
38 — 09.04.10 — 09:44
(37) не верю.
Что за конфа ? Что за отчет ?
39 — 09.04.10 — 09:45
(30) Не говори оп, пока не перелетел через забор 1С-ных глюков 🙂
К примеру если делать запрос типо
Запрос=СоздатьОбъект(«Запрос»);
…тут сам запрос
…Апосле еще раз ту же переменную
Запрос=СоздатьОбъект(«Запрос»);
И так в подряд 20 раз, то на 3-ем цикле, сеи запросы вообще покажут что нет данных, но они есть 🙂
Пока не занулил (Запрос=0;) перед каждым запросом… отчет показывал бред
…Конечно это не относится к блокировкам, но сея 7.7 полна неожиданностей 🙂
40 — 09.04.10 — 09:46
(38)Я ему верю 🙂 И еще как 🙂
(0)Совет, пиши прямые запросы 🙂
41 — 09.04.10 — 09:47
сказочники.
42 — 09.04.10 — 09:49
(29) 1sjourn вестимо. Как правило одинэсовские запросы его джойнят, а во время проведения он заблокирован полностью, вот и обломинго с отчетом.
43 — 09.04.10 — 09:51
ага на него ругается на 1sjourn правильно понял
44 — 09.04.10 — 09:51
и как быть?
45 — 09.04.10 — 09:53
(44) я ж тебе сразу сказал, базу надо переписывать
46 — 09.04.10 — 09:53
(44)Убрать запросы из модуля проведения 🙂
Оптимизировать сам метод проведения, постараться не писать в другие справочники, во время проведения…
Пользователям стараться вдалбливать, что не кашерно делать один документ с 20000 строк 🙂 Лучше 20000 документов, но с одной строкой 🙂
47 — 09.04.10 — 09:57
Для всех сказочников, делаем простой тест:
В модуль проведения документа втыкаем Предупреждение, у одного пользователя проводим этот документ, появляется окошко — всё, все таблички заблокированы…
У второго пользователя пробуем делать отчеты.
А потом извиняемся и больше никогда не рассказываем сказки про 1с.
48 — 09.04.10 — 10:01
Обработка расчет зарпалты, она там блокирует
49 — 09.04.10 — 10:01
когда считаем зарплату
50 — 09.04.10 — 10:02
Там используются транзакции
51 — 09.04.10 — 10:02
не документ
52 — 09.04.10 — 10:03
(48) п..ц.
Ты разницу между отчетом — это чтение данных и Обработкой расчет зарпалты — которая вносит изменения в саму ИБ не видишь???
53 — 09.04.10 — 10:04
как не вижу я понимаю
54 — 09.04.10 — 10:04
там транзакции используются
55 — 09.04.10 — 10:05
+(47) вот именно
все запросы в 1с ке выполняются грязночтением…как то так
если посмотреть профайлер то только и видно хинты
(nolock)
56 — 09.04.10 — 10:06
(54) тем более, журнал и другие таблички уже заблокированы другим пользователем — пока он не проведёт свой документ — ты транзакцию не сможешь поставить — идёт ожидание захвата таблички.
И всего лишь.
57 — 09.04.10 — 10:07
Если так? тогда зачемошибка если просто чтение
58 — 09.04.10 — 10:07
убрать транзакции?
59 — 09.04.10 — 10:08
доки ни кто вэто время может не проводит
60 — 09.04.10 — 10:08
только расчет, и отчеты

61 — 09.04.10 — 10:08
(0) На каких именно строчках модулей ошибки возникают?
62 — 09.04.10 — 10:10
у меня в отчетах запроы чисто. Тогда ошибки не должно быть по вашему мнению.
63 — 09.04.10 — 10:14
(48) бу га га
64 — 09.04.10 — 10:14
это далеко не отчет
65 — 09.04.10 — 10:14
(57) Не тупи — сам же сказал — что в обработке твоей транзакция +, на сколько я помню Зик — эта обработка делает запись в ИБ..
66 — 09.04.10 — 10:21
да транзакция в обработке она вносит записи в журнал расчетов считает. В этоже время другой человек печатает отчеты
67 — 09.04.10 — 10:23
уберу транзакцию
68 — 09.04.10 — 10:23
и нафиг
69 — 09.04.10 — 10:25
не туплю а по твоему размышлению у человека который формирует отчеты не должно быть ошибки
70 — 09.04.10 — 10:25
(67) Чревато… Тогда смогут двое одновременно в эту табличку писать, результат может получиться несколько неожиданным )
71 — 09.04.10 — 10:29
(47)Сказочник… не дальновидный, сделай наоборот!!!
Запусти отчет по регистру, за год… сделай его так что бы он работал час, как мин, напиши не прямыми запросами 🙂 (короче не оптимизируй его :))
Потом попробуй провести документ по тому же самому регистру 🙂
И удивляйся…
При этом в тесте усложним…. Запусти в параллельно… тот же самый запрос на 10-ти разных ПК!!! (или разных терминальных сессиях)
…
Поразись… реальной обстановкой… а не альфо тестером на одном ПК!!
72 — 09.04.10 — 10:31
(71) Не тупи.. у нас юзверов до 80 в базе — таких проблем нет и не было никогда.
73 — 09.04.10 — 10:32
(72)Ну я же пишу… не оптимизируй запросы, на прямые и период возьми по само использованному регистру за год, а не за 10 дней , как макс 🙂
74 — 09.04.10 — 10:32
+71 Если ты такой неверующий Фома- смотри профайлер в скуле, например, там везде хинт nolock в запросе..
Табличка никогда не блокируется, хоть за пятилетку строй запросы свои.
75 — 09.04.10 — 10:32
+(72)И повиснит твоя база… не забудь отрубить ВК 🙂
76 — 09.04.10 — 10:33
(75) Хорош чушь пороть, не позорился бы..
77 — 09.04.10 — 10:33
(74)Но и записать ты при этом не смогешь, 1С требует при записи в табличку (7.7) монопольного доступа, т.е. лочит всю таблицу 🙂
78 — 09.04.10 — 10:34
(76)Вот я то же бы утверждал, что код в (39) не реален… но он так себя и ведет 🙂
79 — 09.04.10 — 10:34
(77) С какой радости то???
Еще раз — ЗАПРОС в 1с не лочит НИЧЕГО.
80 — 09.04.10 — 10:35
(79)Тоже сам все еще поражаюсь 🙁
Сам многому удивляюсь в 7.7, за все годы работы 🙂
81 — 09.04.10 — 10:35
FEAS, http://softpoint.ru/feedback_id40.htm
У софтпоинта спроси, может помогут.
82 — 09.04.10 — 10:36
(79)Я тоже поразился, что он при 1С-ных запросах ложет туже самую таблицу, но во временные файлы 🙂
83 — 09.04.10 — 10:36
Ты там не отмазывайся…сказочник.
84 — 09.04.10 — 10:38
(83)Если бы… я тебе пишу, что и палка стреляет 😉
И твои утверждения, что нечему лочиться там тоже ошибочные 🙂 Не ты же писать платформу 7.7 🙂
85 — 09.04.10 — 10:40
(84) оставайся дальше в своих грёзах.. только вот тут не надо этого писать..
86 — 09.04.10 — 10:49
в это время никто другой не делает это , если запрос чисто читает то он должен без ошибки читать и все
87 — 09.04.10 — 10:51
При транзакции запрос не может счиать или нет Ёпрст3?
88 — 09.04.10 — 10:55
(87)Видишь ли (85) все время твердить, что нет этого у тебя, т.е. реально ты пишешь фигню и нечего не «лочится» 🙂
А я вообще сказочник, мне это привиделось 🙂
…Ты начни думать своей головой, у нас другие ошибки и баги в 7.7… Ты многие найдешь и в 8-ке 🙂 И так же повстречаешь новые, для тебя, 7.7 🙂
89 — 09.04.10 — 10:58
Более 99-и процентов в 1С 7.7. идут с хинтом nolock — что означает грязное чтение. бывают исключения(очень специфические) но очень редко. В случае (0) думаю все идет действительно с грязным чтением. Поэтому основа для понимания — проведение несложного эксперимента. Документы действительно блокируют друг друга а вот отчеты практически на 100 процентов нет.
То DrZombi. А вот у вас нет конструктива. Не надо писать платформу для того что бы проверить очевидные вещи. для этого есть как профайлер так и просто руки с помощью которых можно провести простой эксперимент.
90 — 09.04.10 — 11:02
То 88. Я редко верю тому что говорят пользователи. Поставь систему мониторинга либо проведи эксперимент и убедись в обратном. Я уверен что если у FEAS спросить а проводил ли он лично одновременно документ(запрос в цикле на х итераций в отчете и предупреждение в конце проведения документа) и отчет и видел ли блокировку? — скажет скорее всего нет. А ведь это несложно сделать.
91 — 09.04.10 — 11:04
Единственное но — не нужно путать отчеты и обработки. Обработка выполняя в транзакции определенные действия на изменения действительно может вступать в блокировку.
92 — 09.04.10 — 11:05
(89)Я практик… мне твое написано… мало что говорит…. как правил у нас Аналитик, так красиво расписал программу, щас смотрю на ее реализацию, в 7.7.
Думаю, он много с экономил на программистах, код писали школьники, ужо не говоря про студентов с бух. факов
93 — 09.04.10 — 11:07
когда отчеты формируются ошибка вылазит за чем что то проверять, сам вижу, в это время работает обработка на запись в ИБ. Документы мне пока не нужны
94 — 09.04.10 — 11:07
+(89)Не поленись… проведи експеремент на 10 различных ПК и на данных годовой давности и тогда и пиши, то что написал программер, что бы от него отвалили 🙂
95 — 09.04.10 — 11:11
Если гвоитте отчеты не блокируют тогда зачем ошибка то не пойму, если они только на чтение.
96 — 09.04.10 — 11:12
То FEAS. Ну тогда приведи точно название ошибки, название отчета и название обработки. Бывает исключение из правил (менее 1 процента) но я очень сомневаюсь что это тот случай.
97 — 09.04.10 — 11:15
У нас переписанная конфига ЗП не даст название , отчет например Расчетная ведомость обработка расчет зарплаты.
вот такая хрень вылазит
Если ЖрнЗарплата.ВыполнитьРасчет()=0 Тогда
{Обработка.РасчетЗарплаты.Форма.Модуль(232)}: Таблица: 1SJOURN Ошибка обращения к данным при транзакции, выполняемой другим пользователем
98 — 09.04.10 — 11:21
(97)Где то была библиотечка, которая в дбф-е снимала нагрузку на базу при транзакции 🙂
Но не помню как называлось, вроде ромикса 🙂
Тебе она нуна
99 — 09.04.10 — 11:26
(89) Это смотря как написать отчет.
100 — 09.04.10 — 11:26
100
Здравствуйте обьясните почему появляется следующая ошибка: Конт.УстановитьНовыйНомер(СокрЛП(Константа.ПрефиксИБ) + ПрефиксЮрЛицаФирмы); : {Глобальный модуль(4064)}: Таблица: 1SDNLOCK Ошибка обращения к данным при транзакции, выполняемой другим пользователем. Как это исправить
подождать. поробовать ещё раз. +сходить в поиск.
Потому что нельзя какать вдвоем в один унитаз… Надо по очереди…
Забей. Это безнадежно. Полностью от этой проблемы ты уже не избавишься никогда.
Нет уж надо хоть немножко избавиться.Слишком часто стало появляться.ОБьясните почему происходит это
терм.сервак? или сеть? (хи-хи)
сколько одновременно компов может висеть в одном справочнике или документе
сеть с выделенным сервером
вам бы, батенька, с терминологией разобраться, для начала
Сеть с выделенным сервером под управлением Windows server 2003+ active directory в сети находится 15 машин пожно сказать одновременно работающих либо в справочнике НОменклатура либо в документе Быстрая продажа. Конфа ТИС очень часто выдается сообщение Конт.УстановитьНовыйНомер(СокрЛП(Константа.ПрефиксИБ) + ПрефиксЮрЛицаФирмы); : {Глобальный модуль(4064)}: Таблица: 1SDNLOCK Ошибка обращения к данным при транзакции, выполняемой другим пользователем. В чем проблема почему оно появляется сколько одновременно компов может висеть в одном справочнике или документе
+не в терминальном режиме и на DC
юзеры все в терминальных сессиях?
Они в терминале сидят или доступ к базе через сеть открыт?
«сколько одновременно компов может висеть в одном справочнике или документе» во-первых, не компов, а юзеров. во-вторых, теоретически сколь угодно много. в-третьих, есть понимание термина «транзакция», или надо разъяснить?
насчет транзакции понятно
это жесть при 15 юзерах. база сколько весит?
загоняй в терминал всех +
как это сделать где можно почитать где более подролбно описано
м-дя…. ты чё ждешь-то? пока база окончательно рассыпется и тебя начнуть мочить? срочно: 1. всех в терминал, базу резать или 2. базу на скуль 1-й вар. дешевле (если, конечно, лицензия на скуль уже не имеется в активе)
понятно примерно опиши как какой софт для этого надо либо средствами windows 2003
под понятием рассыпится что имено
у тебя реально на клаве выдраны знаки препинания? Или уважение к участникам форума настолько ничтожно, что знаки препинания они не достойны?
Одним из недостатков DBFной версии “1С:Предприятие 7.7” является ограничение на размер файлов – 1 гигабайт. При этом если система эксплуатируется в однопрограммном режиме, то размер файла может быть 2 гигабайта, однако если появится второй пользователь, а файл будет больше 1 гигабайта, то система 1С начинает сбоить по ЧТЕНИЮ, у одного пользователя, если другой выполняет запись/обновление данных. Например, если выполнять цикл по выборке данных, то он может “тихо” прекратиться в любой момент, не предоставив программе всего множества объектов. А ГДЕ ПРОЧИТАТЬ БОЛЕЕ ПОДРОБНУЮ ИНФОРМАЦИЮ
Тэги:
Комментарии доступны только авторизированным пользователям
Показывать по
10
20
40
сообщений
Новая тема
Ответить
sahzavod
Дата регистрации: 05.09.2003
Сообщений: 2
От чего может возникнуть «Ошибка времени выполнения» при работе транзакции в конфигурации ЗиК.<br><br>Конкретнее:<br><br>Таблица: 1SJOURN Ошибка обращения к данным при транзакции, выполняемой другим пользователем.<br><br>И как востановить потеряные данные?<br><br>Заранее спасибо ![]()
Кот, который гуляет сам по себе
Дата регистрации: 29.10.2001
Сообщений: 882
Возникновение такой ошибки как правило связано с перегруженностью<br><br>сети. Эта ошибка происходит в том случае, когда программа<br><br>в течение продолжительного периода времени пытается захватить<br><br>некоторый файл (на очень непродолжительное время), а у нее не<br><br>получается. После повторения попыток в течение 60 сек. возникает<br><br>такая ошибка.<br><br> Как показывает опыт, причиной практически во всех случаях<br><br>является недостаточная производительность сети или сервера.<br><br>В частности такая ситуация имеет место быть при использовании<br><br>невыделенных или сильно нагруженных другими задачами серверов<br><br>со стороны значительного числа клиентов.<br><br>
vela
Дата регистрации: 18.08.2003
Сообщений: 20
Если дело в этом, то можно попробовать увеличить время ожидания захвата таблиц Базы Данных, к примеру до 90 сек. От многого уберегает, может и здесь поможет.
qwer007.070
Дата регистрации: 21.08.2007
Сообщений: 1
Как можно устранить ошибку при транзакций?
Alexandr VA
Дата регистрации: 07.01.2007
Сообщений: 1666
> Как можно устранить ошибку при транзакций? <br>Способов много, пробуйте:<br>Увеличить время ожидания захвата таблиц. <br>Сжать ДБФные таблицы, выполнить дефрагментацию диска с базами.<br>Повысить производительность сервера и сети.<br>Очистить журнал регистрации (сначала сархивируйте)<br>Перейти в терминалы<br>Перейти на SQL <br><br>
Татьянаааа
Дата регистрации: 07.08.2007
Сообщений: 86
Меню СЕРВИС -> ПАРАМЕТРЫ -> (Закладка ОБЩИЕ) Время ожидания захвата таблицы поставьте 40-60
Показывать по
10
20
40
сообщений
-
Здраствуйте! Возникает такая проблема — «При выполнении транзакции произошла ошибка. Таблица 1Sjourn. Ошибка обращения к данным при транзакции, выполняемой другим пользователем»
стоит 15 клиентских компов и один сервер опрационка win server 2003. база 1с7.7 -dbf, объем 1.5гига. В данный момент сейчас бухгалтера все работают в одном документе, и я думаю что это из-за этого. Позвонил в службу поддержки которые обслуживают нашу 1с — там ничего умного не посоветовали — «сказали типа у вас сервак на котором стоит 1с слабый — меняйте» короче прогнали полную чушь и отмазались :unsure: .
Комп под сервак мы приобретали 3 месяца назад (проц. — атлон Х2 5600 оператива 2гига) вообщем понятно что дело не в этом. Так же я попробовал увеличить Значение ожидания, как было написано здесь на форуме, проблема не исчезла. Подскажите пожалуйста что можно еще сделать, и есть ли выход из этой ситуации??????? -
Offline
bob
Опытный в 1С- Регистрация:
- 7 май 2008
- Сообщения:
- 394
- Симпатии:
- 1
- Баллы:
- 29
в одном документе работать одновременно невозможно. Ошибка из-за того, что при проведении документа, блокируется определенное кол-во таблиц, и другие пользователи могут с ними работать только после окончаниЯ проведения. Это только один из множества вариантов, есть еще, звоните в более компетентную службу поддержки.
-
Offline
Kaboom
Опытный в 1С- Регистрация:
- 2 июл 2007
- Сообщения:
- 158
- Симпатии:
- 0
- Баллы:
- 26
-
Заранее всем спасибо. завтра на работе попробую!
Содержание:
1. Причина ошибки в 1С Предприятие 8.3
2. Почему ошибку «В данной транзакции уже происходили ошибки» надо устранить
3. Как устранить ошибку в программе 1С Предприятие 8
Довольно часто пользователи программы 1С Предприятие 8 сталкиваются с ошибкой «В данной транзакции уже происходили ошибки».
В данной транзакции уже происходили ошибки
Документ не записывается, а понять, в чем причина невозможно, т.к. текст сообщения об ошибке ни чего конкретного не сообщает.
Давайте разберемся в чем причина.
1. Причина ошибки в 1С Предприятие 8.3
С технической точки зрения эта ошибка в 1С:Предприятие 8.3 возникает в транзакции в момент первого обращения к базе данных после обработки исключительной ситуации операторами (Попытка-Исключение).
Ниже на рисунке продемонстрирован пример, когда при записи объекта «Объект_1» вызывается исключительная ситуация, при этом ошибка возникает в строке «Ссылка_2.Наименование», т.к. осуществляется запрос к базе данных в объектной модели данных. И не важно, запись это или чтение.
Возникновение ошибки в 1С Предприятие 8.3 при записи объекта
Причем в попытке-исключении обрабатываться операция, которая также выполняется в транзакции. Чаще всего это сочетание явных и неявных транзакций, т.е. транзакций, вызванных оператором НачатьТранзакцию явно и транзакций, вызванных платформой неявно (например, при записи объекта).
Как известно, система 1С:Предприятие 8.3 не поддерживает вложенных транзакций, но допускает организацию вложенной конструкции нескольких транзакций. В нашем примере явный вызов транзакции оператором НачатьТранзакцию – транзакция 1 уровня, а неявная транзакция записи – транзакция 2 уровня и т.д. Возникновение ошибки на нижних уровнях запрещает успешное завершение транзакции 1 уровня. Другими словами, откатывается все «дерево транзакций».
В чем же здесь проблема?
2. Почему ошибку «В данной транзакции уже происходили ошибки» надо устранить
Во-первых, пользователь никогда не поймет в чем причина, т.к. формулировка сообщения об ошибке для него не информативна.
Во-вторых, воспроизведение ошибки и ее отладка администратором тоже будет не простым занятием. Дело в том, что ошибка возникает в момент первого обращения к базе данных, т.е. в журнале регистрации будет зафиксирована именно эта строка. Хотя сама причина этой ошибки находиться в коде на самом нижнем уровне. В нашем примере «Объект_1» может содержать различные проверки перед записью, «завернутые» в конструкцию «Попытка-Исключение», которые, в свою очередь, могут также иметь глубокую иерархию вызовов процедур и функций. Попробуй разберись.
В-третьих, суть этой ошибки – некорректный код. А если быть более точным – несоблюдение требований к написанию кода с использованием транзакций.
Как решить эту проблему в 1С:Предприятие?
3. Как устранить ошибку в программе 1С Предприятие 8
Основным требованием к написанию кода с использованием транзакций, непосредственно связанным с ошибкой «В данной транзакции уже происходили ошибки» в 1С:Предприятие, являются правила использования обработки исключения:
1. Метод НачатьТранзакцию должен находиться за пределами блока Попытка-Исключение;
2. Все действия, выполняемые после вызова метода НачатьТранзакцию, должны находиться в одном блоке Попытка, в том числе чтение, блокировка и обработка данных;
3. Метод ЗафиксироватьТранзакцию должен идти последним в блоке Попытка перед оператором Исключение;
4. В блоке Исключение нужно сначала вызвать метод ОтменитьТранзакцию, а затем выполнять другие действия;
5. При использовании вложенных транзакций в конце блока Исключение рекомендуется добавить оператор ВызватьИсключение. Это позволит перенаправить исключение выше по стеку. В этом случае в журнале регистрации мы получим именно ту строку, которая привела к ошибке;
6. В блоке исключения рекомендуется сделать запись об ошибке средствами встроенного языка.
Общая схема во вложенной транзакции:
Схема вложенной транзакции в системе 1С:Предприятие 8.3
Пример:
Пример вложенной транзакции для решения ошибки «В данной транзакции уже происходили ошибки»
Не следует использовать метод НачатьТранзакцию внутри неявной транзакции, вызванной платформой. В этом нет никакого смысла. Не стоит также «оборачивать» в явную транзакцию операцию записи коллекции объектов, которые не требуют согласованной записи. Если в блоке исключения, вложенной транзакции не используется оператор ВызватьИсключение, а используется, например, сообщение или запись в журнал регистрации, то нужно избегать явного или неявного обращения к базе данных после обработки исключения в конфигурациях 1С Предприятие 8.
Специалист компании «Кодерлайн»
Игорь Торба