Как исправить ошибку «В текущей транзакции уже происходили ошибки» при изменении параметров учета в 1С:Бухгалтерия 2.0?

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия Бухгалтерский учет
← На главную

В процессе работы с конфигурацией «1С:Бухгалтерия» (например, редакция 2.0 для Украины) пользователи могут столкнуться с критической ошибкой при попытке изменить параметры учета. Типичный сценарий: вы заходите в настройки параметров учета на вкладку «Сотрудники и зарплата», пытаетесь переключить способ ведения учета на вариант «Во внешней программе» и при нажатии кнопки «Записать и закрыть» получаете сообщение:

В текущей транзакции уже происходили ошибки! {ОбщаяФорма.ПараметрыУчета.Форма (61)}: Записать (ПараметрыЗаписи)

Давайте разберем, почему возникает эта ошибка и как поэтапно найти её истинную причину и устранить проблему.

Понимаем природу ошибки

Важно понимать, что сообщение «В текущей транзакции уже происходили ошибки» само по себе не объясняет причину сбоя. Это лишь констатация факта: внутри программного блока, обернутого в транзакцию (когда система пытается гарантированно записать набор данных), что-то пошло не так. Произошла первичная ошибка (например, не заполнено обязательное поле, нарушена логика или произошел программный сбой), транзакция пометилась как «битая», но код попытался выполнить следующую операцию записи, что и вызвало данное сообщение.

Наша задача — пробиться сквозь это вторичное сообщение и найти «первоисточник» проблемы.

Шаг 1: Анализ Журнала регистрации

Прежде чем открывать конфигуратор, проанализируем записи системы. Часто 1С успевает зафиксировать первичную ошибку в Журнале регистрации.

  1. Перейдем в раздел Администрирование — Обслуживание — Журнал регистрации.
  2. Установим фильтр по периоду (время возникновения ошибки) и по уровню важности «Ошибка».
  3. Внимательно изучим записи, предшествующие сообщению о транзакции. Мы можем увидеть сообщения типа: Поле 'Подразделение' не заполнено или Прекращение работы из-за нарушения прав доступа.
  4. Если в журнале пусто, переходим к более глубокой диагностике.

Шаг 2: Использование отладчика для поиска исключения

Это самый надежный способ для программиста. Нам нужно настроить отладчик так, чтобы он останавливался в момент возникновения самой первой ошибки, даже если она перехвачена блоком Попытка ... Исключение.

Выполним следующие действия:

  1. Запустим базу в режиме Конфигуратор.
  2. Откроем меню Отладка — Остановка по ошибке.
  3. В появившемся окне установим флаг «Останавливаться по ошибке».
  4. Нажмем кнопку «ОК» и запустим сеанс в режиме «1С:Предприятие» (F5).
  5. Повторим действия, вызывающие ошибку (изменение параметров учета и запись).

Теперь система «замрет» именно на той строке кода, где возникла первичная проблема. Проанализируем значения переменных и текст ошибки в окне «Локальные переменные» или через «Вычислить выражение».

Шаг 3: Проверка существующих данных по зарплате

При смене режима учета зарплаты (с «В текущей программе» на «Во внешней») система выполняет проверку на наличие уже введенных документов. Если в базе уже есть созданные документы Прием на работу, Начисление зарплаты или ведомости, программная логика может блокировать запись настроек.

Проанализируем ситуацию:

Шаг 4: Тестирование и исправление базы данных (ТиИ)

Иногда корень проблемы кроется в нарушении логической целостности таблиц БД. Выясним, нет ли в базе «битых» ссылок.

Выполним процедуру ТиИ:

  1. Обязательно создадим резервную копию базы.
  2. В Конфигураторе выберем Администрирование — Тестирование и исправление.
  3. Установим флаги:
    • Реиндексация таблиц информационной базы.
    • Проверка логической целостности.
    • Проверка ссылочной целостности.
    • Пересчет итогов.
  4. Нажмем «Выполнить».

После завершения проверим, исчезла ли ошибка при записи параметров учета.

Шаг 5: Очистка кэша и проверка платформы

Для конфигураций на платформе 8.3 (особенно для редакции 2.0) характерны ошибки, связанные с кэшированием форм и метаданных. Если код конфигурации верный, но ошибка сохраняется, выполним очистку:

Рассмотрим вариант ручной очистки:

  1. Удалим информационную базу из списка в окне запуска 1С.
  2. Добавим её снова (это сбросит идентификаторы кэша для этого пользователя).
  3. Если это не помогло, проверим версию платформы. Убедимся, что версия платформы 8.3.х соответствует требованиям релиза конфигурации (в данном случае 2.0.17.2).

Шаг 6: Проверка программного кода записи

Если вы программист, проанализируйте, что происходит в момент вызова метода Записать() в форме параметров учета. В типовой конфигурации это может выглядеть примерно так:


Процедура ЗаписатьПараметры(ПараметрыЗаписи)
    НачатьТранзакцию();
    Попытка
        // Запись констант
        Константы.ИспользоватьВнешнююПрограммуДляЗарплаты.Установить(Истина);
        
        // Запись наборов записей регистров
        Набор = РегистрыСведений.ПараметрыУчетаЗарплаты.СоздатьНаборЗаписей();
        Набор.Записать();
        
        ЗафиксироватьТранзакцию();
    Исключение
        ОтменитьТранзакцию();
        ВызватьИсключение; // Здесь может возникнуть вторичная ошибка
    КонецПопытки;
КонецПроцедуры

Проанализируем ситуацию: если внутри блока Попытка происходит ошибка, вызывается ОтменитьТранзакцию(). Если после этого код все равно пытается выполнить Записать() для другого объекта в рамках той же процедуры, возникнет обсуждаемая ошибка транзакции. Проверьте все подписки на события ПередЗаписью и ПриЗаписи для регистров сведений, в которые вносятся изменения.

Резюме

Для исправления ошибки «В текущей транзакции уже происходили ошибки»:

← На главную