Alert ошибка транзакции исключение в коде контракта
В данной транзакции уже происходили ошибки 1С 8.3 как исправить?
Программа 1С является самой популярной и наиболее удобной при автоматизации предприятия. В ней предусмотрены решения, созданные на базе одной платформы, соответственно, функционируют они по одному принципу, что значительно упрощает использование ПО. Нередко пользователи сталкиваются с сообщением «В данной транзакции уже происходили ошибки». Рассмотрим как в 1С 8.3 исправить подобную проблему.
Причина появления сообщения о повторных ошибках в 1С 8.3
Главная проблема заключается в том, что сообщение об ошибке «В данной транзакции уже происходили ошибки» неинформативно, нет никакой конкретики. Поэтому будем опираться на проблемы, с которыми чаще всего сталкиваются пользователи. Например, с технической стороны ошибка такого рода может возникнуть при первой транзакции, то есть и при первичном обращении к базе данных.
Подобная ошибка может произойти при обработки ситуации «Попытка-Исключение». Например, при создании записи «Объект_1» формируется исключительная ситуация, а сама ошибка появляется в «Ссылка_2.Наименование». То есть происходит запрос базы данных объектной модели.
В «Попытке-Исключение» начинается обработка операции, которая также должна быть выполнена в транзакции, которая, в свою очередь, может быть явной или неявной (создается в момент записи объекта).
1С: Предприятие 8.3 не поддерживает транзакций вложенного типа. Однако допускается создание вложенной конструкции сразу нескольких транзакций. Из-за наличия явной и неявной транзакции может возникнуть ошибка. То-есть программа запрещает транзакцию 1-го уровня на более низших уровнях.
Есть ли смысл исправлять ошибки транзакции, которые уже происходили
При работе с 1С 8.3 не стоит оставлять подобные вещи без внимания. Прежде всего, другой пользователь также может столкнуться с ней, но не поймет причин её возникновения. Если не выполнить отладку системы, то в дальнейшем могут возникнуть дополнительные проблемы. Так как оповещение «В данной транзакции уже происходили ошибки» появляется при первом обращении, то в журнале регистрации данная строка обязательно зафиксируется, но, опять же, без подробного пояснения. Хоть ошибка и располагается на нижнем уровне кода, она нарушит необходимую иерархию. Это приведет к сбою других функций и только еще больше запутает администратора.
При наличие некорректного кода, транзакции будут выполняться с нарушениями или не будут выполняться вовсе. Поэтому при возникновении таких сообщений стоит решить проблему.
Устраняем ошибку транзакции в 1С Предприятие версии 8.3
В первую очередь стоит очистить кэш базы данных. Сделать это можно вручную. Для этого:
Также можно выполнить удаление другим способом:
После того, как файл преобразуется, его можно запустить и весь пользовательский кэш удалится автоматически. Пробуем снова запустить программу и выполнить операцию. Если не помогло, то лучше всего обратиться к администратору. Также нужно помнить про основные особенности написания кода с использованием транзакций. Это поможет исключить ряд распространенных ошибок.
Особенности написания кода, которые помогут исключить ошибку в транзакциях
Прежде всего нужно опираться на нюансы корректной обработки исключений:
Решить проблему транзакций, в которых происходят ошибки, самостоятельно получается не всегда. Поэтому стоит попробовать выполнить простейшие действия – перезагрузить программу или очистить кэш. К более серьезным манипуляциям в 1С стоит переходить только при уверенности, что вы обладаете достаточным опытом.
Ошибка «В данной транзакции уже происходили ошибки» в программах 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.
https://rusadmin. biz/soveti/v-dannoj-tranzaktsii-uzhe-proishodili-oshibki-1s-8-3/
https://kazan. koderline. ru/expert/programming/article-oshibka-v-dannoy-tranzaktsii-uzhe-proiskhodili-oshibki-v-programmakh-1s-predpriyatie-8/