Почему возникает ошибка ERR_PR_1210 "Не указан пол ребенка" при отправке в СФР и как её исправить в 1С:УПП?

Программист 1С v8.3 (Обычные формы) Бухгалтерский учет Промышленность, строительство и АПК
← На главную

Введение в проблематику обмена с СФР

В процессе работы с социальным электронным документооборотом (СЭДО) организации часто сталкиваются с ситуацией, когда форматы обмена данными обновляются быстрее, чем выходят официальные обновления для учетных систем. Особенно остро эта проблема стоит для конфигураций, находящихся на ограниченной поддержке, таких как "Управление производственным предприятием" (УПП, редакция 1.3).

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

Ошибки (1): ERR_PR_1210: Не указан пол ребенка.

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

Анализ причин ошибки ERR_PR_1210

Для начала проанализируем, что скрывается за этим кодом ошибки. Данное сообщение возвращается сервером СФР при прохождении форматно-логического контроля (ФЛК). Причина кроется в несоответствии структуры отправляемого XML-файла актуальной спецификации обмена.

Разберем ситуацию подробнее:

  1. Обновление спецификации: Фонд периодически обновляет требования к структуре XML-файлов (XSD-схемы). В недавних изменениях для пособий по уходу за ребенком блок данных child (сведения о ребенке) стал требовать обязательного наличия вложенного тега gender, что дополняет требования по подготовке формы сведения о застрахованном лице.
  2. Отсутствие выгрузки в типовом коде: В старых релизах конфигурации или в устаревших системах (как УПП 1.3) механизмы формирования XML могут просто "не знать" о том, что это поле теперь нужно включать в файл выгрузки, что напоминает ситуацию, когда требуется расчет по страховым взносам (РСВ-3) с особыми отборами.
  3. Специфический формат значений: Важно отметить, что формат СЭДО требует передачи пола не цифрами (1/2) и не русскими словами ("Мужской"/"Женский"). Спецификация строго регламентирует использование латинских констант: MALE и FEMALE.

Техническое решение задачи

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

В конфигурации УПП 1.3 за формирование данных для СЭДО обычно отвечают общие модули или модули менеджера соответствующих документов. В данном случае нас интересует процедура, связанная с выгрузкой информации о ребенке для отпуска по уходу.

Рассмотрим процедуру ВыгрузитьИнформациюОРебенкеОтпускаПоУходу. Именно в ней происходит сбор данных по СНИЛС, ФИО и дате рождения ребенка.

Алгоритм внесения изменений

Для исправления ошибки нам необходимо выполнить следующие шаги в конфигураторе (подобные доработки часто требуются, когда нужно реализовать импорт больничного из XML в нетиповых условиях):

Шаг 1. Откройте модуль, содержащий процедуру выгрузки (если вам часто приходится работать с конфигуратором, возможно, вам будет полезна и загрузка классификатора банков в УПП). Обычно это модуль объекта или менеджера документа, либо общий модуль, отвечающий за обмен с СЭДО.

Шаг 2. Найдите в коде место, где происходит добавление узла snils (СНИЛС ребенка). Это надежный ориентир, так как пол ребенка логически должен находиться в том же блоке данных.

Шаг 3. Сразу после выгрузки СНИЛС нам нужно добавить логику определения пола и запись нового узла. Обратите внимание, что мы должны преобразовать значение перечисления ПолФизическихЛиц в строку формата, требуемого СФР.

Посмотрим на пример кода, который решает эту задачу. В типовом коде выгрузка СНИЛС выглядит примерно так:


// СНИЛС.
МенеджерXML.ДобавитьУзел(УзелРебенок, "snils", СтрЗаменить(СтрЗаменить(Документ.РебенокСНИЛС, "-", ""), " ", ""), Истина, Истина);

Нам необходимо добавить следующий блок кода сразу после строк со СНИЛС:


// Определяем пол ребенка в формате, требуемом спецификацией СФР (MALE/FEMALE)
ПолРебенка = ?(Документ.РебенокПол = Перечисления.ПолФизическихЛиц.Женский, "FEMALE", "MALE");

// Добавляем узел gender в XML-структуру
МенеджерXML.ДобавитьУзел(УзелРебенок, "gender", ПолРебенка);

Разбор кода

Проанализируем, что делает этот код:

Рекомендации по безопасности данных

При внедрении данного решения стоит учесть несколько нюансов:

  1. Проверка заполненности: Желательно перед выгрузкой проверять, что поле РебенокПол в документе действительно заполнено. Если оно пустое, лучше выдать понятное предупреждение пользователю, чем отправлять некорректные данные (например, "MALE" по умолчанию).
  2. Двойняшки: Если документ поддерживает список детей (например, при расчете пособий на нескольких детей), убедитесь, что код выполняется внутри цикла обхода строк табличной части или коллекции детей, и пол берется именно для текущего обрабатываемого ребенка.
  3. Обновления: Поскольку мы вносим изменения в типовой код (если не используем расширения, которые в УПП 1.3 и режиме обычных форм имеют ограничения), при следующем обновлении конфигурации эти изменения могут затереться. Рекомендуем оставить комментарий в коде с пометкой // Исправление ошибки ERR_PR_1210, чтобы при сравнении-объединении конфигураций не потерять доработку.

Заключение

Ошибка ERR_PR_1210 является классическим примером рассинхронизации требований регулятора и возможностей устаревшего программного обеспечения. Предложенное решение с добавлением тега gender и значений FEMALE/MALE полностью соответствует актуальным XSD-схемам СФР и позволяет успешно сдать отчетность без ожидания официального патча от вендора.

← На главную