При работе в конфигурации 1С:Управление производственным предприятием (УПП) 1.3.161.3 или Зарплата и Управление Персоналом (ЗУП) 2.5 многие пользователи столкнулись с критической ошибкой при отправке реестров в ФСС. Проблема возникает именно при оформлении пособий на рождение ребенка. После формирования и попытки отправки файла система выдает сообщение: «Ошибка: Не соответствует формату XSD: Элемент "RESIDENT_CODE" недействителен: значение "" недействительно с точки зрения его типа данных "String" — Сбой ограничения Pattern».
В этой статье мы подробно разберем, почему возникает эта ситуация, проанализируем структуру XML-файла и рассмотрим несколько способов решения проблемы — от быстрого «хака» до корректного исправления программного кода.
Выясним причину такого поведения программы. В середине 2021 года Фонд социального страхования (ФСС) перешел на новый формат электронных реестров версии 1.7.7. В этой спецификации поле RESIDENT_CODE (цифровой код страны резидентства) стало обязательным для заполнения. Согласно требованиям XSD-схемы, это поле не может быть пустым и должно соответствовать шаблону (три цифры кода по классификатору ОКСМ).
В старых конфигурациях 1С на обычных формах логика сбора данных для реестров по нетрудоспособности (больничных) и реестров на рождение ребенка различается. Если в реестрах по больничным листам данные о гражданстве подтягиваются корректно, то в реестрах на рождение ребенка механизм формирования временных таблиц часто «забывает» извлечь данные о гражданстве из карточки физического лица. В результате в XML-файл попадает пустой тег <RESIDENT_CODE/>, что и вызывает отказ в приеме файла на шлюзе ФСС.
Рассмотрим ситуацию, когда на вашем предприятии работают только граждане Российской Федерации. В этом случае мы можем принудительно прописать код страны 643 в программном коде. Это самое быстрое решение, которое позволит немедленно отправить отчетность.
Нам необходимо найти в конфигураторе место, где формируется структура данных для выгрузки. Проанализируем общий модуль, отвечающий за обмен с ФСС. Обычно это ОбменСведениямиОПособияхСФСС. Найдем строку, где присваивается значение полю RESIDENT_CODE.
Вместо стандартной логики, которая может возвращать пустое значение:
НаборЗаписей.RESIDENT_CODE.Значение = СтруктураДанных.КодСтраны;
Мы заменим её на прямую установку кода России:
// Принудительная установка кода 643 (Россия)
НаборЗаписей.RESIDENT_CODE.Значение = "643";
Важно: этот метод подходит только в том случае, если среди получателей пособий гарантированно нет иностранных граждан. В противном случае ФСС получит недостоверные данные о гражданстве сотрудника.
Разберем более универсальный подход, который учитывает статус налогоплательщика и вид выплаты. Это решение позволяет избежать передачи пустого тега и при этом корректно обрабатывать разные ситуации. Нам потребуется внести изменения в общий модуль ОбменСведениямиОПособияхСФСС (ориентировочно строка 152, в зависимости от точного релиза).
Используем следующую конструкцию:
Если (СтруктураДанных.ВидВыплаты = "1" Или СтруктураДанных.ВидВыплаты = "6") И СтруктураДанных.СтатусНалогоплательщика <> 1 Тогда
НаборЗаписей.RESIDENT_CODE.Значение = СтруктураДанных.КодСтраны;
Иначе
// Если данных нет или это резидент РФ, удаляем узел, чтобы он не уходил пустым
// Или заполняем значением по умолчанию
Если ПустаяСтрока(СтруктураДанных.КодСтраны) Тогда
НаборЗаписей.RESIDENT_CODE.Значение = "643";
Иначе
НаборЗаписей.RESIDENT_CODE.Значение = СтруктураДанных.КодСтраны;
КонецЕсли;
КонецЕсли;
В этом примере мы проверяем наличие данных в СтруктураДанных.КодСтраны. Если поле пустое, мы подставляем значение по умолчанию "643". Это гарантирует прохождение валидации по XSD-схеме.
Посмотрим на ситуацию со стороны метаданных. Как отмечают опытные разработчики, в реестре по рождению ребенка часто отсутствует реквизит «Гражданство» (или аналогичный) непосредственно в табличной части документа в самой конфигурации. Программа просто не «знает», что это поле нужно заполнять для данного типа реестра.
Попробуем выполнить следующие действия:
СправочникСсылка.СтраныМира или строка).После этих манипуляций при выборе сотрудника данные о его гражданстве начнут сохраняться в документе и, соответственно, попадать в выборку при формировании XML. Это более трудоемкий путь, требующий понимания структуры метаданных, но он является наиболее архитектурно правильным для платформы 1С 8.3.
Если вам нужно отправить всего один реестр и вы не хотите вносить изменения в конфигурацию, можно прибегнуть к ручной правке выгруженного файла. Проанализируем шаги:
<RESIDENT_CODE/> или <RESIDENT_CODE></RESIDENT_CODE>.<RESIDENT_CODE>643</RESIDENT_CODE>.Внимание: после ручной правки файл нельзя перевыгружать из 1С. Его нужно загрузить напрямую в программу для отправки отчетности (СБИС, Контур, или через функционал «Загрузить из файла» в 1С-Отчетности).
Мы проанализировали проблему отсутствия кода резидента в реестрах ФСС для 1С:УПП 1.3. Основная причина кроется в недоработке механизмов формирования данных для старого типа документов в новых форматах обмена 1.7.7. Для системного решения рекомендуем использовать Способ 2 с модификацией общего модуля, так как он обеспечивает автоматизацию процесса и исключает человеческий фактор при последующих отправках.
Также помните, что подобные ошибки часто исправляются в официальных патчах от 1С. Если ваша конфигурация находится на поддержке, убедитесь, что вы обновились до версии 1.3.162 или выше, где разработчики уже внесли соответствующие исправления в логику формирования реестров.