Как исправить ошибку XSD-схемы RESIDENT_CODE в реестре ФСС на рождение ребенка

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

При работе в конфигурации 1С:Управление производственным предприятием (УПП) 1.3.161.3 или Зарплата и Управление Персоналом (ЗУП) 2.5 многие пользователи столкнулись с критической ошибкой при отправке реестров в ФСС. Проблема возникает именно при оформлении пособий на рождение ребенка. После формирования и попытки отправки файла система выдает сообщение: «Ошибка: Не соответствует формату XSD: Элемент "RESIDENT_CODE" недействителен: значение "" недействительно с точки зрения его типа данных "String" — Сбой ограничения Pattern».

В этой статье мы подробно разберем, почему возникает эта ситуация, проанализируем структуру XML-файла и рассмотрим несколько способов решения проблемы — от быстрого «хака» до корректного исправления программного кода.

Причина возникновения ошибки

Выясним причину такого поведения программы. В середине 2021 года Фонд социального страхования (ФСС) перешел на новый формат электронных реестров версии 1.7.7. В этой спецификации поле RESIDENT_CODE (цифровой код страны резидентства) стало обязательным для заполнения. Согласно требованиям XSD-схемы, это поле не может быть пустым и должно соответствовать шаблону (три цифры кода по классификатору ОКСМ).

В старых конфигурациях 1С на обычных формах логика сбора данных для реестров по нетрудоспособности (больничных) и реестров на рождение ребенка различается. Если в реестрах по больничным листам данные о гражданстве подтягиваются корректно, то в реестрах на рождение ребенка механизм формирования временных таблиц часто «забывает» извлечь данные о гражданстве из карточки физического лица. В результате в XML-файл попадает пустой тег <RESIDENT_CODE/>, что и вызывает отказ в приеме файла на шлюзе ФСС.

Способ 1. Быстрое исправление в коде (для сотрудников — граждан РФ)

Рассмотрим ситуацию, когда на вашем предприятии работают только граждане Российской Федерации. В этом случае мы можем принудительно прописать код страны 643 в программном коде. Это самое быстрое решение, которое позволит немедленно отправить отчетность.

Нам необходимо найти в конфигураторе место, где формируется структура данных для выгрузки. Проанализируем общий модуль, отвечающий за обмен с ФСС. Обычно это ОбменСведениямиОПособияхСФСС. Найдем строку, где присваивается значение полю RESIDENT_CODE.

Вместо стандартной логики, которая может возвращать пустое значение:

НаборЗаписей.RESIDENT_CODE.Значение = СтруктураДанных.КодСтраны;

Мы заменим её на прямую установку кода России:


// Принудительная установка кода 643 (Россия)
НаборЗаписей.RESIDENT_CODE.Значение = "643";

Важно: этот метод подходит только в том случае, если среди получателей пособий гарантированно нет иностранных граждан. В противном случае ФСС получит недостоверные данные о гражданстве сотрудника.

Способ 2. Корректное исправление в общем модуле

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

Используем следующую конструкцию:


Если (СтруктураДанных.ВидВыплаты = "1" Или СтруктураДанных.ВидВыплаты = "6") И СтруктураДанных.СтатусНалогоплательщика <> 1 Тогда        
   НаборЗаписей.RESIDENT_CODE.Значение = СтруктураДанных.КодСтраны;
Иначе        
   // Если данных нет или это резидент РФ, удаляем узел, чтобы он не уходил пустым
   // Или заполняем значением по умолчанию
   Если ПустаяСтрока(СтруктураДанных.КодСтраны) Тогда
       НаборЗаписей.RESIDENT_CODE.Значение = "643";
   Иначе
       НаборЗаписей.RESIDENT_CODE.Значение = СтруктураДанных.КодСтраны;
   КонецЕсли;       
КонецЕсли;

В этом примере мы проверяем наличие данных в СтруктураДанных.КодСтраны. Если поле пустое, мы подставляем значение по умолчанию "643". Это гарантирует прохождение валидации по XSD-схеме.

Способ 3. Добавление реквизита в форму документа

Посмотрим на ситуацию со стороны метаданных. Как отмечают опытные разработчики, в реестре по рождению ребенка часто отсутствует реквизит «Гражданство» (или аналогичный) непосредственно в табличной части документа в самой конфигурации. Программа просто не «знает», что это поле нужно заполнять для данного типа реестра.

Попробуем выполнить следующие действия:

  1. Откроем конфигуратор и найдем документ РеестрСведенийВФССДляНазначенияИВыплатыПособий.
  2. Перейдем в табличную часть Пособия.
  3. Проверим наличие реквизита, отвечающего за код страны или гражданство. Если его нет, его можно добавить (тип — СправочникСсылка.СтраныМира или строка).
  4. Выведем этот реквизит на форму документа.

После этих манипуляций при выборе сотрудника данные о его гражданстве начнут сохраняться в документе и, соответственно, попадать в выборку при формировании XML. Это более трудоемкий путь, требующий понимания структуры метаданных, но он является наиболее архитектурно правильным для платформы 1С 8.3.

Способ 4. Ручная правка XML-файла

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

  1. Выгрузите реестр из 1С в файл на диск.
  2. Откройте файл с помощью любого текстового редактора (например, Notepad++).
  3. Найдите строку <RESIDENT_CODE/> или <RESIDENT_CODE></RESIDENT_CODE>.
  4. Замените её на <RESIDENT_CODE>643</RESIDENT_CODE>.
  5. Сохраните изменения.

Внимание: после ручной правки файл нельзя перевыгружать из 1С. Его нужно загрузить напрямую в программу для отправки отчетности (СБИС, Контур, или через функционал «Загрузить из файла» в 1С-Отчетности).

Резюме

Мы проанализировали проблему отсутствия кода резидента в реестрах ФСС для 1С:УПП 1.3. Основная причина кроется в недоработке механизмов формирования данных для старого типа документов в новых форматах обмена 1.7.7. Для системного решения рекомендуем использовать Способ 2 с модификацией общего модуля, так как он обеспечивает автоматизацию процесса и исключает человеческий фактор при последующих отправках.

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

← На главную