В процессе работы бухгалтера или специалиста по кадрам в 1С нередко возникает ситуация, когда уже отправленный и принятый Фондом социального страхования (ныне СФР) электронный больничный лист (ЭЛН) требует корректировки. Это может быть связано с предоставлением сотрудником новых справок о доходах, обнаружением ошибки в стаже или иными обстоятельствами. Однако при попытке отправить исправленный расчет система может выдать критическую ошибку: «Ответ ФСС: Найдены ошибки при выполнении форматно-логических проверок ORA-20013: Не удалось обновить данные. Обновляемая запись потеряла актуальность».
Давайте проанализируем ситуацию, разберем причины возникновения этой технической коллизии и рассмотрим пошаговые алгоритмы решения проблемы в конфигурациях 1С.
Ошибка с кодом ORA-20013 генерируется не самой программой 1С, а сервером базы данных Oracle, на которой работает шлюз СФР. Сообщение «Обновляемая запись потеряла актуальность» (Stale Data) означает конфликт версий документа. В базе данных фонда уже существует запись по данному больничному с определенным статусом. Когда мы пытаемся отправить «исправление», система фонда сравнивает входящие данные с уже имеющимися. Если фонд считает, что документ уже «закрыт» для изменений или если номер версии (номер исправления) в вашем пакете данных не соответствует ожидаемому, сервер блокирует транзакцию, чтобы избежать порчи данных.
Чаще всего это происходит по следующим причинам:
Рассмотрим стандартный порядок действий в 1С:Зарплата и Управление Персоналом. Если вы обнаружили необходимость изменить данные в уже рассчитанном и отправленном больничном, ни в коем случае не пытайтесь просто изменить старый документ.
Алгоритм действий:
Больничный лист.При формировании нового Реестра прямых выплат или Ответа на запрос СФР программа должна автоматически подтянуть этот больничный как исправленный. Если вы используете СЭДО, убедитесь, что в Ответе на запрос стоит галочка «Исправление» и указан порядковый номер итерации.
Иногда ошибка ORA-20013 возникает из-за того, что в реестр «затянулись» старые идентификаторы. Попробуем выполнить техническую очистку связей внутри документа Реестр данных ЭЛН.
Разберем по шагам:
Больничный лист в реестр.Этот метод позволяет 1С перегенерировать внутренние метаданные пакета XML, что часто помогает шлюзу СФР воспринять документ как актуальное обновление, а не как «устаревшую запись».
Если ваша организация все еще использует старый механизм Реестров прямых выплат (которые постепенно выводятся из обращения), попробуйте воспользоваться механизмом «Исходящее сообщение о страховом случае».
Проанализируем ситуацию: фонд перешел на проактивные выплаты. Если стандартный реестр выдает ошибку актуальности, выполним следующее:
Входящий запрос, на который вы ответите актуальными данными.Если вы используете встроенный сервис 1С-Отчетность (через оператора «Калуга Астрал»), и вышеперечисленные методы не помогают, проблема может лежать в плоскости кэширования ответов на промежуточных серверах.
Посмотрим, что можно сделать в плане диагностики:
ЭЛН в личном кабинете страхователя на сайте СФР. Если там документ стоит в статусе «Исполнен» или «Выплата произведена», то любые попытки отправить электронный реестр из 1С могут блокироваться базой Oracle фонда.GUID (уникальный идентификатор) документа и скриншот ошибки, после чего направьте запрос в техподдержку вашего оператора отчетности (например, info@astral-ural.ru). Разработчики могут вручную «протолкнуть» пакет или сбросить зависшую сессию на шлюзе.Для тех, кто работает с кодом и структурой данных, приведем пример логики, которую можно реализовать через внешнюю обработку, если штатные средства не очищают идентификаторы (использовать с осторожностью!):
// Пример логики очистки идентификаторов в документе для сброса состояния
ДокументОбъект = СсылкаНаРеестр.ПолучитьОбъект();
Для Каждого Строка Из ДокументОбъект.Пособия Цикл
Если Строка.БольничныйЛист = ПроблемныйБЛ Тогда
// Очистка скрытых полей, если они заполнены
Строка.ИдентификаторСообщенияФСС = "";
Строка.СтатусДокументаВФонде = Перечисления.СтатусыДокументовСЭДО.ПустаяСсылка();
КонецЕсли;
КонецЦикла;
ДокументОбъект.Записать();
Важный момент: Ошибка ORA-20013 — это сигнал о том, что данные в вашей базе 1С «разошлись» с реальностью в базе фонда. Всегда начинайте решение с проверки Личного Кабинета Страхователя на сайте СФР, чтобы понять, какой статус документа является истинным на текущий момент.