В начале 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С зарегистрировала данную проблему как ошибку под номером 10229278. Основной и самый правильный способ решения — обновление конфигурации до актуального релиза, в котором эта ошибка исправлена.
Рассмотрим порядок действий для исправления:
ОбменСведениямиОПособияхСФСС.Если реестры нужно отправить «еще вчера», а обновить 1С нет возможности, воспользуемся обходным путем через официальное программное обеспечение Фонда социального страхования.
Выполним следующие шаги:
Для опытных пользователей и администраторов подойдет метод «хирургического» вмешательства в файл выгрузки. Этот метод позволяет обойти ошибку xsi:nil без изменения программного кода 1С.
Проанализируем процесс корректировки:
xsi:nil="true" в проблемных тегах и удалить их.calcCondition, попробуйте заменить <eln:calcCondition1 xsi:nil="true" /> на полностью отсутствующий тег или на <eln:calcCondition1>0</eln:calcCondition1> (если это допустимо по логике расчета).Чтобы избежать подобных проблем в будущем, особенно в периоды массовых изменений законодательства (как это было при переходе на Прямые выплаты), рекомендуем придерживаться следующих правил:
Следите за версией платформы. В сообщении автора упоминается платформа 8.3.18.1208. Хотя ошибка была программной (в модуле конфигурации), использование устаревших версий платформы может мешать корректной работе криптографии при обмене с ФСС.
Проверяйте сертификаты ГУЦ. Часто ошибка 500 может маскировать проблемы с доверием к сертификатам сервера ФСС. Убедитесь, что на сервере, где выполняется отправка, установлены все актуальные корневые сертификаты Головного Удостоверяющего Центра.
Разделяйте реестры. Если один из листков нетрудоспособности в реестре вызывает ошибку Unmarshalling Error (например, из-за специфического кода карантина), попробуйте исключить его из общего списка и отправить отдельным реестром. Это позволит успешно сдать основную массу пособий, не дожидаясь исправления сложного случая.
Рассмотренные методы позволяют восстановить работоспособность обмена данными с ФСС даже в условиях критических багов в тиражных решениях. Помните, что наиболее надежным способом остается своевременное обновление конфигурации до релизов, поддерживающих актуальные требования шлюзов ФСС.