Как исправить ошибку 500 и Unmarshalling Error при отправке реестра ЭЛН в ФСС

Программист 1С v8.3 (Обычные формы) Налоговый учет
← На главную

В начале 2021 года многие пользователи столкнулись с внезапной остановкой обмена данными с ФСС. При попытке отправить «Реестр данных ЭЛН в ФСС» система выдает внутреннюю ошибку сервера (500) с подробным описанием Unmarshalling Error. Проблема актуальна для конфигураций «Управление производственным предприятием 1.3», «Зарплата и управление персоналом 3.1» и «Зарплата и кадры государственного учреждения». Рассмотрим причины возникновения этой ситуации и разберем по шагам способы ее решения.

Анализ технической причины ошибки

Проанализируем текст ошибки, который возвращает сервер ФСС. Ключевая фраза здесь: Attribute '...nil' must not appear on element 'eln:calcCondition1', because the {nillable} property of 'eln:calcCondition1' is false.

Разберемся, что это означает на техническом языке. Файловый обмен между 1С и шлюзом ФСС происходит по протоколу SOAP. Структура передаваемого XML-файла строго регламентирована XSD-схемой. В определенный момент ФСС обновил требования к валидации на своих серверах. В схеме для полей условий исчисления (например, calcCondition1) было установлено свойство nillable=false. Это означает, что данный элемент не может содержать атрибут xsi:nil="true", который 1С добавляет автоматически, если поле не заполнено.

Когда программа пытается передать пустые условия исчисления, она формирует тег следующим образом:

<eln:calcCondition1 xsi:nil="true" />

Сервер ФСС, видя этот атрибут в поле, где он запрещен, мгновенно прерывает обработку и возвращает ошибку 500. Ситуация усугубляется тем, что параллельно могла возникнуть ошибка The content of element 'eln:ROW' is not complete, указывающая на нарушение последовательности полей или отсутствие обязательных элементов, таких как NOT_INSUR_YY или CORRECTION_REASON.

Выяснение причин «потери» полей в реестре

Проанализируем ситуацию, когда при выгрузке реестра в XML-файл пропадают данные о периодах нетрудоспособности или коды причин. Это часто происходит после обновлений (например, в ЗУП 3.1.14.394). Если мы заглянем в программный код обработки выгрузки, то увидим новое условие, которое инициирует пропуск заполнения определенных структур данных:


Если Не СтруктураДанных.ЭтоЭЛН Или СтруктураДанных.ЭЛНКарантинПоКоронавирусу
    Или СтрНачинаетсяС(СтруктураДанных.НомерВходящегоДокумента, "9990") Тогда
    // В этой ветке часть полей может игнорироваться при заполнении
КонецЕсли;

Проблема заключается в том, что алгоритмы проверки для листков нетрудоспособности по карантину (код 03) или специфических номеров ЭЛН (начинающихся на 9990) стали работать некорректно. Программа ошибочно считает эти данные избыточными и не включает их в файл, в то время как шлюз ФСС продолжает ожидать их согласно формату 1.1.

Способ 1: Установка официального исправления (патча)

Фирма 1С зарегистрировала данную проблему как ошибку под номером 10229278. Основной и самый правильный способ решения — обновление конфигурации до актуального релиза, в котором эта ошибка исправлена.

Рассмотрим порядок действий для исправления:

  1. Проверьте текущую версию вашей конфигурации. Для УПП 1.3 исправления вошли в релизы, следующие за 1.3.153.
  2. Если возможность оперативного обновления всей базы отсутствует, проверьте наличие «патчей» (исправлений) в разделе поддержки 1С. Часто выпускается отдельный патч, исправляющий только модуль ОбменСведениямиОПособияхСФСС.
  3. После обновления обязательно очистите кэш конфигурации на сервере и локальных рабочих местах, так как старые структуры XML-схем могут сохраняться в памяти.

Способ 2: Использование АРМ «Пособия» от ФСС

Если реестры нужно отправить «еще вчера», а обновить 1С нет возможности, воспользуемся обходным путем через официальное программное обеспечение Фонда социального страхования.

Выполним следующие шаги:

  1. Перейдем на официальный портал ФСС в раздел загрузок и скачаем программу «АРМ Пособия».
  2. В 1С подготовим реестр и выгрузим его в виде файла XML (даже если он выгружается с ошибками структуры).
  3. Загрузим полученный файл в АРМ ФСС.
  4. Программа АРМ обычно имеет более лояльные или актуальные механизмы валидации. Внутри АРМ можно дозаполнить недостающие поля (код причины, периоды) вручную.
  5. Подпишем и отправим отчет непосредственно из АРМ ФСС, используя те же сертификаты ЭЦП, что и в 1С.

Способ 3: Ручная корректировка XML-файла

Для опытных пользователей и администраторов подойдет метод «хирургического» вмешательства в файл выгрузки. Этот метод позволяет обойти ошибку xsi:nil без изменения программного кода 1С.

Проанализируем процесс корректировки:

  1. Выгрузим реестр из 1С в файл на диск.
  2. Откроем файл любым текстовым редактором (лучше использовать Notepad++, так как он подсвечивает синтаксис XML).
  3. Выполним массовую замену в тексте документа. Нам нужно найти все вхождения атрибута xsi:nil="true" в проблемных тегах и удалить их.
  4. Если шлюз жалуется на пустое значение в calcCondition, попробуйте заменить <eln:calcCondition1 xsi:nil="true" /> на полностью отсутствующий тег или на <eln:calcCondition1>0</eln:calcCondition1> (если это допустимо по логике расчета).
  5. Сохраним файл и попробуем загрузить его для отправки через сервис «1С-Отчетность» (используя загрузку стороннего файла) или через личный кабинет страхователя на сайте ФСС.

Рекомендации по профилактике ошибок обмена

Чтобы избежать подобных проблем в будущем, особенно в периоды массовых изменений законодательства (как это было при переходе на Прямые выплаты), рекомендуем придерживаться следующих правил:

Следите за версией платформы. В сообщении автора упоминается платформа 8.3.18.1208. Хотя ошибка была программной (в модуле конфигурации), использование устаревших версий платформы может мешать корректной работе криптографии при обмене с ФСС.

Проверяйте сертификаты ГУЦ. Часто ошибка 500 может маскировать проблемы с доверием к сертификатам сервера ФСС. Убедитесь, что на сервере, где выполняется отправка, установлены все актуальные корневые сертификаты Головного Удостоверяющего Центра.

Разделяйте реестры. Если один из листков нетрудоспособности в реестре вызывает ошибку Unmarshalling Error (например, из-за специфического кода карантина), попробуйте исключить его из общего списка и отправить отдельным реестром. Это позволит успешно сдать основную массу пособий, не дожидаясь исправления сложного случая.

Рассмотренные методы позволяют восстановить работоспособность обмена данными с ФСС даже в условиях критических багов в тиражных решениях. Помните, что наиболее надежным способом остается своевременное обновление конфигурации до релизов, поддерживающих актуальные требования шлюзов ФСС.

← На главную