В процессе работы с программой 1С:ЗУП 3.1 пользователи периодически сталкиваются с ситуацией, когда при попытке сохранения документа БольничныйЛист система выдает критическую ошибку: «В данной транзакции уже происходили ошибки!». Эта ошибка не является первичной — она лишь сигнализирует о том, что ранее в рамках транзакции записи произошло другое исключение, которое привело к принудительному откату всех действий. Давайте разберем, как найти источник проблемы и устранить ее.
Поскольку сообщение «В данной транзакции уже происходили ошибки!» является «оберткой» над реальной причиной, нам нужно заглянуть глубже. Первым делом откройте ЖурналРегистрации в режиме «Администрирование». Отфильтруйте события по текущему пользователю и по времени возникновения ошибки.
Часто бывает так, что пользователь видит общую ошибку на экране, а в журнале за ту же секунду зафиксирована более подробная информация, например, «Ошибка при вызове метода контекста» или «Обнаружено пересечение периодов отсутствия». Это позволит нам понять, на каком этапе «падает» код: при проверке данных или при расчете.
Как показывает практика, одной из наиболее частых причин такой ошибки в 1С:ЗУП является конфликт данных между пересекающимися периодами. Если в системе уже существует документ, который покрывает те же даты, что и оформляемый больничный, программа может вызывать ошибку при попытке выполнить расчет до записи.
В частности, обратите внимание на документ ВходящиеЗапросыФССДляРасчетаПособий. Если в системе есть проведенный входящий запрос, который конфликтует с вводимым больничным листом, при попытке записи документа 1С может вызвать исключение в процедуре ВыполнитьРасчетСотрудникаПередЗаписьюДокумента.
Порядок действий:
ВходящиеЗапросыФССДляРасчетаПособий по сотруднику, на которого оформляется больничный.БольничныйЛист.Если распроведение запросов ФСС не помогло, проанализируйте табель и историю отсутствий сотрудника. Проверьте, нет ли у него уже введенных документов:
ОтпускПрогулКомандировкаСистема 1С:ЗУП выполняет проверку пересечений периодов на стороне клиента, и если обнаруживается коллизия, программный код выбрасывает исключение, которое и приводит к сбою текущей транзакции записи.
Если стандартные проверки не выявили причину, рассмотрим возможность влияния стороннего кода. Часто причиной ошибок в транзакциях становятся установленные расширения конфигурации. Разберем, как это проверить:
Если ошибка исчезла, значит, одно из расширений содержит неактуальный код, который несовместим с текущим релизом платформы или конфигурации.
Для опытных специалистов рекомендуется использовать отладчик. Установите точку останова в процедуре ВыполнитьРасчетСотрудникаПередЗаписьюДокумента общего модуля РасчетЗарплатыРасширенныйКлиент. Пошагово проследите выполнение кода. В момент, когда сработает исключение, вы сможете увидеть, какой именно метод вызвал ошибку:
// Пример логики в модуле расчета
Попытка
ПроверитьПересечениеПериодов(Сотрудник, Период);
Исключение
// Именно здесь генерируется ошибка, которая вызывает
// последующий откат всей транзакции
ВызватьИсключение ОписаниеОшибки();
КонецПопытки;
Используя этот подход, вы сможете точно локализовать, какой объект конфигурации препятствует записи документа. Помните: транзакция в 1С — это неделимая единица работы. Если внутри нее происходит «аварийный останов», платформа откатывает все изменения, произведенные с начала нажатия кнопки «Записать», поэтому диагностика должна быть сфокусирована на поиске именно того фрагмента кода, который выполнился первым и привел к нарушению логики.