Загрузка электронных листков нетрудоспособности (ЭЛН) — это критически важный процесс для бухгалтерии и кадровой службы. Однако пользователи часто сталкиваются с техническими сбоями: от внезапного закрытия программы до специфических программных ошибок кода. В данной статье мы подробно разберем, как диагностировать причины сбоев, исправить ошибки в программном коде и правильно настроить сертификаты для стабильного обмена данными с Социальным фондом России (бывшим ФСС).
Одной из наиболее распространенных проблем при работе в конфигурациях «Зарплата и управление персоналом» (особенно редакции 2.5) является ошибка Поле объекта не обнаружено (reason1). Давайте разберем причину ее возникновения. При обмене данными программа получает ответ от серверов ФСС в формате XML. В обычных больничных листах параметр reason1 (причина нетрудоспособности) находится в основном блоке данных. Однако в ЭЛН по уходу за ребенком структура XML-файла меняется: этот параметр «переезжает» во вложенный блок servData.
Стандартный программный код 1С не всегда учитывает это смещение. Когда система пытается обратиться к полю напрямую, не находя его в ожидаемом месте, происходит аварийное завершение процедуры. Рассмотрим, как исправить эту ситуацию в конфигураторе.
Нам необходимо внести изменения в общий модуль ОбменСведениямиОПособияхСФСС. Найдем процедуру ПроверкаРезультатаОбменаЭЛН (или соответствующую строку, указанную в тексте ошибки, обычно это район строки 5447).
Типовой код выглядит следующим образом:
Если ДанныеЛН["reason1"] = "03" Тогда
СтатусыДоступныхЛН.Добавить("010");
СтатусыДоступныхЛН.Добавить("020");
// ... добавление других статусов
КонецЕсли;
Для исправления ошибки мы должны добавить проверку на существование этого свойства в структуре данных, прежде чем обращаться к нему. Модифицируем код следующим образом:
// Добавляем проверку на присутствие "reason1" в блоке данных
Если ДанныеЛН.Свойства.Получить("reason1") <> Неопределено Тогда
Если ДанныеЛН["reason1"] = "03" Тогда
СтатусыДоступныхЛН.Добавить("010");
СтатусыДоступныхЛН.Добавить("020");
СтатусыДоступныхЛН.Добавить("060");
СтатусыДоступныхЛН.Добавить("070");
СтатусыДоступныхЛН.Добавить("080");
КонецЕсли;
КонецЕсли;
Важное примечание: Если вы используете конфигурацию на поддержке, данные изменения рекомендуется вносить через механизм расширений, чтобы не снимать замок с типового решения.
Часто пользователи жалуются на то, что программа постоянно «теряет» сертификат ФСС или выдает ошибку Не удалось зашифровать файл. Давайте проанализируем ситуацию, когда настройки обмена приходится перевыбирать практически при каждом сеансе связи.
Разберем основные причины «слета» сертификатов:
КриптоПро CSP.Эта ошибка часто возникает при попытке загрузить ответ, который содержит неожиданную структуру или пустые значения в обязательных полях. Рассмотрим шаги для исправления:
Во-первых, выполните очистку кэша конфигурации. Это стандартная процедура, которая помогает убрать «фантомные» ошибки после обновлений серверов ФСС или самой платформы. Для этого удалите базу из списка и добавьте ее заново или воспользуйтесь параметром запуска /ClearCache.
Во-вторых, проанализируйте настройки в регистре сведений Настройки обмена с ФСС. Если записи в нем повреждены или содержат неактуальные ссылки на сертификаты, система может выдавать ошибку индекса при попытке инициализации соединения. Рекомендуется удалить старые настройки и создать их заново, выбрав актуальные сертификаты организации и фонда.
Если 1С просто закрывается («вылетает») при попытке запроса данных, это может быть связано с сетевыми протоколами или работой криптографии на уровне операционной системы. Разберем алгоритм проверки:
КриптоПро CSP версии не ниже 4.0 (рекомендуется 5.0). Устаревшие версии могут вызывать критические ошибки платформы при обращении к функциям подписи.Проанализировав ситуацию, можно сделать вывод, что большинство проблем с ЭЛН решаются либо точечной правкой кода (в случае с reason1), либо корректной настройкой прав доступа к криптографическим объектам в операционной системе. Помните, что серверы фонда также могут проводить технические работы, поэтому, если ошибка возникла внезапно без изменений в программе, стоит повторить попытку через несколько часов.