Как исправить ошибку «В данной транзакции уже происходили ошибки!» при переходе на ФИФО в 1С:Бухгалтерии

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

При работе в программе 1С:Бухгалтерия предприятия 3.0 (включая версию КОРП) пользователи и администраторы иногда сталкиваются с крайне неприятной ситуацией. При попытке изменить в учетной политике способ оценки материально-производственных запасов (МПЗ) со «Средней» на «ФИФО» система надолго зависает, после чего аварийно завершает операцию и выдает малоинформативное сообщение: «В данной транзакции уже происходили ошибки!».

В этой статье мы подробно разберем, почему возникает эта ошибка с технической точки зрения, что происходит в этот момент «под капотом» платформы 1С, как правильно диагностировать скрытую причину сбоя и как оперативно восстановить работоспособность системы без потери данных.

Почему возникает неинформативное сообщение об ошибке транзакции?

Для начала проанализируем природу самого сообщения. Ошибка «В данной транзакции уже происходили ошибки!» — это классическое поведение платформы «1С:Предприятие 8», связанное с механизмом транзакций и обработкой исключений в блоках Попытка — Исключение.

В процессе записи изменений учетной политики платформа открывает транзакцию. Если внутри этой транзакции происходит любой сбой на уровне базы данных (например, СУБД отклоняет операцию из-за нарушения ограничений целостности или структуры данных), транзакция переходит в состояние Rollback Only (так называемая «испорченная» транзакция).

Даже если разработчики конфигурации предусмотрели обработку ошибок и обернули код в конструкцию перехвата исключений, транзакция уже не может быть успешно зафиксирована. Любое последующее обращение к базе данных в рамках этого же процесса (например, вызов метода Записать() у другого объекта или регистра) приведет к тому, что платформа выдаст generic-ошибку транзакции. При этом стек вызовов укажет на последнюю строку кода, где произошло вторичное обращение (в нашем случае это строка записи регистра сведений МенеджерЗаписи.Записать(НЕ ЭтоФормаЗаписи)), полностью маскируя первоначальную, истинную причину сбоя.

Что происходит в системе при переключении на ФИФО?

Давайте выясним причину, почему именно переход на метод оценки «ФИФО» вызывает такую реакцию системы. Когда мы меняем способ оценки МПЗ со «Средней» на «ФИФО», программа выполняет масштабную реорганизацию структуры данных плана счетов:

  1. Для партионного учета, который является неотъемлемой частью метода ФИФО, на счетах учета ТМЦ (таких как 10 «Материалы», 21 «Полуфабрикаты собственного производства», 41 «Товары», 45 «Товары отгруженные» и др.) обязательно должно быть включено субконто «Партии».
  2. В момент записи новой учетной политики программные алгоритмы 1С автоматически перебирают все счета учета запасов и пытаются добавить туда предопределенный вид субконто «Партии».
  3. В типовом решении «1С:Бухгалтерия» установлено жесткое системное ограничение: максимальное количество видов субконто на одном счете не может превышать трех.

Если до этого момента пользователи или обслуживающие специалисты вручную добавили на какой-либо из счетов учета ТМЦ (например, на счет 21 или субсчета счета 10) свои собственные кастомные субконто, заняв все три доступных слота аналитики, система сталкивается с неразрешимым конфликтом. Программа пытается программно добавить четвертое субконто (Партии), СУБД возвращает ошибку превышения лимита, транзакция помечается как «испорченная», и пользователь получает зависание системы с последующей ошибкой транзакции.

Пошаговое руководство по диагностике проблемы

Если вы столкнулись с подобным поведением системы, разберем по шагам, как локализовать и выявить проблемный счет.

Шаг 1. Использование отладчика в Конфигураторе

Самый надежный способ увидеть реальную ошибку до того, как платформа замаскирует ее ошибкой транзакции, — это настройка остановки по ошибке в конфигураторе. Выполните следующие действия:

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

Отладчик остановит выполнение кода ровно в тот момент, когда система попытается добавить лишнее субконто к счету, и вы увидите реальный текст ошибки в окне локальных переменных или в табло. Код, который вызывает сбой, обычно выглядит следующим образом:


// Системный вызов добавления субконто в плане счетов
НоваяСтрокаСубконто = СчетОбъект.ВидыСубконто.Добавить();
НоваяСтрокаСубконто.ВидСубконто = ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Партии;
СчетОбъект.Записать(); // Здесь происходит первичное исключение СУБД

Шаг 2. Анализ Журнала регистрации

Если нет возможности запустить конфигуратор в режиме отладки (например, на рабочей базе в разгар рабочего дня), проанализируем ситуацию с помощью Журнала регистрации:

  1. Перейдите в раздел Администрирование -> Обслуживание -> Журнал регистрации.
  2. Установите отбор по критичности, выбрав только значение «Ошибка».
  3. Задайте интервал времени, соответствующий моменту зависания программы при записи учетной политики.
  4. Найдите событие, зафиксированное буквально за доли секунды до записи об откате транзакции. Там будет содержаться подробный текст, например: «Превышено максимальное количество субконто на счете 21!».

Как исправить ошибку и не допустить ее в будущем?

После того как проблемный счет обнаружен (в практике пользователей чаще всего страдают счета 21, 41 или субсчета 10 счета, куда бухгалтеры любят добавлять аналитику по проектам, спецификациям или дополнительным характеристикам), необходимо выполнить исправление.

Вариант 1. Освобождение слота субконто на плане счетов

Для того чтобы система смогла записать учетную политику и корректно добавить субконто «Партии», нам нужно освободить одно место в списке субконто проблемного счета. Посмотрим на алгоритм действий:

  1. Перейдите в План счетов (раздел «Главное» — «План счетов»).
  2. Найдите счет, на котором настроено три субконто (например, счет 21).
  3. Проанализируйте, какие из этих субконто были добавлены вручную (они обычно не имеют значка «предопределенный»).
  4. Временно удалите одно из пользовательских субконто из карточки счета (предварительно убедитесь, что вы зафиксировали, какая аналитика там использовалась, так как данные в проводках по этому субконто временно перестанут отображаться).
  5. Вернитесь в Учетную политику и успешно запишите переход на «ФИФО». Программа без препятствий добавит субконто «Партии».

Вариант 2. Использование правильной альтернативы (Рекомендуется)

Изменение предопределенного плана счетов в типовой конфигурации «1С:Бухгалтерия» путем добавления третьих и четвертых субконто — это крайне нежелательная практика. Это приводит к постоянным сбоям при обновлении конфигурации, ломает регламентные операции закрытия месяца и усложняет расчет себестоимости.

Для внедрения дополнительной аналитики мы рекомендуем использовать типовой механизм «Дополнительные реквизиты и сведения»:

  1. Включите данный функционал в меню Администрирование -> Общие настройки -> Дополнительные реквизиты и сведения.
  2. Добавьте необходимое свойство непосредственно к справочнику Номенклатура (например, реквизит «Спецификация» или «Проект»).
  3. После этого вы сможете детализировать любые стандартные отчеты (Оборотно-сальдовую ведомость, Анализ субконто) по этому новому реквизиту номенклатуры, используя стандартные группировки, без внесения изменений в структуру плана счетов.

Этот подход гарантирует стабильную работу всех последующих обновлений 1С и исключит появление подобных транзакционных ошибок при изменении глобальных параметров учетной политики предприятия.

← На главную