1с ошибка ожидается выражение

Обновлено: 04.07.2024

Доброго времени суток!<br><br>Вопрос в следующем:<br>При выполнении регламентного задания (в клиент-серверной версии базы, выполнение на сервере) возникла ошибка "В данной транзакции уже происходили ошибки!", и, естественно, при каждом последующем запуске оно вылетает на эту же ошибку, даже не пытаясь ничего реально запускать. <br><br>Я сталкивалась с подобной ошибкой при выполнении кода на клиенте, и в этом случае спасало просто перезайти в базу - дальше все работало. А если на стороне сервера возникает эта ошибка? Каждый раз перезагружать сервер никто не даст. <br><br>Как сбросить эту ошибку, чтобы продолжить функционирование регламентного задания, почему ошибка могла возникнуть и как избежать ее повторения?

В основном такая штука случается, когда внутри одной транзакции оказывается другая, в которой собственно и присходит ошибка. Самый простой способ её увидеть:<br> Открываем транзакцию, начинаем проводить документы, причем проведение стоит в Попытка-Исключение, чтобы программа не вываливалась. Какой-то докумен не может быть проведен и выкидывает ошибку, после этого Зафиксировать транзакцию уже нельзя.<br><br>Вывод - либо отказаться от транзакции, либо от обработки ошибок. Я выбрал отказ от транзакции в таких случаях или закрываю транзакцию до записи объектов (особенно если они типовые).<br><br>> продолжить функционирование регламентного задания<br>Продолжить никак. Лучше всего его полностью остановить и запустить снова.<br>

"Продолжить - я имела ввиду не текущее выполнение регламентного задания, а работу рег.задания при последующих запусках. Кого остановить? Рег.задание?<br><br>Поясните, пожалуйста, подробней.<br>Почему нельзя Зафиксировать транзакцию, если, к примеру, используется конструкция:<br><br>НачатьТранзакцию();<br> Попытка<br> // проводим докумены<br> Исключение<br> // обработка исключения<br> КонецПопытки;<br>ЗафиксироватьТранзакцию();<br><br>И что значит "отказаться от отработки ошибок"? То есть, убрать из этой конструкции Попытку-Исключение?"

"> Поясните, пожалуйста, подробней.<br>> Почему нельзя Зафиксировать транзакцию, если, к примеру, используется конструкция:<br>> <br>> НачатьТранзакцию();<br>> Попытка<br>> // проводим докумены<br>> Исключение<br>> // обработка исключения<br>> КонецПопытки;<br>> ЗафиксироватьТранзакцию();<br>> <br>> И что значит "отказаться от отработки ошибок"? То есть, убрать из этой конструкции Попытку-Исключение?<br><br>Представть, что ваша конструкция теперь выглядит так (просто есть кусок которого вы не видите - не вы его писали):<br><br>НачатьТранзакцию();<br> Попытка<br> //Вот этот код где-то там - далеко в каком-нибудь модуле, да и 1С, что-то такое ведет в случае проведения<br> НачатьТранзакцию();<br> Попытка<br> //Здесь возникает ошибка<br> Исключение<br> ОтменитьТранзакцию();<br> КонецПопытки;<br> ЗафиксироватьТранзакцию();<br> Исключение<br> // обработка исключения<br> КонецПопытки;<br>ЗафиксироватьТранзакцию();<br><br>Так вот, если я правильно понимаю, то если вложенная транзакция закрывается, то транзакция верхнего уровня это видит и отказывается закрываться (возможно она уже тоже закрытая). В общем - кроме отмены транзакции уже ничего не сделать.<br><br>Вот и получается, что несмотря на обработку ошибки (исключения) - ошибка уже была и ничего с этим не сделать. Значит надо от чего-то отказаться. Или увидеть ошибку или убрать транзакцию.<br>"

> Кого остановить? Рег.задание?<br>А что у вас показывает "Консоль Заданий " по поводу вашего зависшего задания?

"1> НачатьТранзакцию();<br>2> Попытка<br>3> //Вот этот код где-то там - далеко в каком-нибудь модуле, да и 1С, что-то такое ведет в случае проведения<br>4> НачатьТранзакцию();<br>5> Попытка<br>6> //Здесь возникает ошибка<br>7> Исключение<br>8> ОтменитьТранзакцию();<br>9> КонецПопытки;<br>10> ЗафиксироватьТранзакцию();<br>11> Исключение<br>12> // обработка исключения<br>13> КонецПопытки;<br>14> ЗафиксироватьТранзакцию();<br><br>В этой последовательности получается, что если мы попадаем на отмену транзакции в строке 8, то потом в строке 10 закрывается не внутренняя транзакция, а внешняя, и при закрытии ее повторно в 14 появляется ошибка. В данном случае, я бы предложила фиксацию внутренней транзакции перенести во внутреннюю попытку (в самый конец). Но это уже так, отступление. <br><br>Ок, в этой последовательности понятно, спасибо. Только будет очень трудно найти, где же оно в реальном коде ломается. <br><br>>> Кого остановить? Рег.задание?<br>>А что у вас показывает "Консоль Заданий " по поводу вашего зависшего задания? <br><br>Вот "КонсольЗаданий" как раз и показывала в графе Ошибка "В данной транзакции уже происходили ошибки!". Правда, потом убрали Использование Рег.задания, а сегодня опять его запустили - ошибка прошла. Но есть вероятность, что сервер перезагружали, узнать пока точно не могу - это сервер нашего филиала в другом городе. "

Читайте также: