Данная проблема возникает при попытке загрузить электронный больничный из файла, полученного, например, из СБИС или Контур.
Так вот, формат реализован согласно спецификации версии 1.1 Источник на сайте ФСС..
Согласно этой спецификации LN_HASH не обязательный реквизит, однако у 1С другая логика. По логике программы этот реквизит должен быть обязательно представлен, что не совсем корректно. Эта же логика относится и к LN_STATE.
Для того что бы исправить данный недочет необходимо внести исправление всего в одном модуле ОбменЛисткамиНетрудоспособностиФСС в функцию СтруктураОтветаСервисаПолученияЭЛН
Привожу код исправления:
&Вместо("ОтветСервисаПолученияЭЛН")
Функция FSSFix_ОтветСервисаПолученияЭЛН(LN_ROW, Отказ)
ИменаПолейИзСервиса =
"APPROVE1,
|APPROVE2,
|BASE_AVG_DAILY_SAL,
|BASE_AVG_SAL,
|BIRTHDAY,
|BOZ_FLAG,
|CALC_CONDITION1,
|CALC_CONDITION2,
|CALC_CONDITION3,
|CALC_CONDITION4,
|DATE1,
|DATE2,
|DT1_LN,
|DT2_LN,
|DUPLICATE_FLAG,
|EMPL_FLAG,
|EMPL_PARENT_NO,
|EMPL_PAYMENT,
|EMPL_REG_NO,
|EMPL_REG_NO2,
|EMPLOYER,
|FORM1_DT,
|FSS_PAYMENT,
|GENDER,
|HOSPITAL_BREACH,
|HOSPITAL_DT1,
|HOSPITAL_DT2,
|INN_PERSON,
|INSUR_MM,
|INSUR_YY,
|LN_CODE,
|LN_DATE,
|LN_HASH,
|LN_RESULT,
|LN_STATE,
|LPU_ADDRESS,
|LPU_EMPL_FLAG,
|LPU_EMPLOYER,
|LPU_NAME,
|LPU_OGRN,
|MSE_DT1,
|MSE_DT2,
|MSE_DT3,
|MSE_INVALID_GROUP,
|NAME,
|NOT_INSUR_MM,
|NOT_INSUR_YY,
|PARENT_CODE,
|PATRONIMIC,
|PAYMENT,
|PREGN12W_FLAG,
|PREV_LN_CODE,
|PRIMARY_FLAG,
|REASON1,
|REASON2,
|REASON3,
|RETURN_DATE_EMPL,
|SERV1_AGE,
|SERV1_FIO,
|SERV1_MM,
|SERV1_RELATION_CODE,
|SERV2_AGE,
|SERV2_FIO,
|SERV2_MM,
|SERV2_RELATION_CODE,
|SNILS,
|SURNAME,
|VOUCHER_NO,
|VOUCHER_OGRN";
ДанныеИзСервиса = Новый Структура(ИменаПолейИзСервиса);
ЗаполнитьЗначенияСвойств(ДанныеИзСервиса, LN_ROW);
//++ Начало исправления
Если НЕ ЗначениеЗаполнено(ДанныеИзСервиса["LN_STATE"]) Тогда
ДанныеИзСервиса["LN_STATE"]="010";
КонецЕсли;
//-- Конец исправления
ДанныеИзСервиса.Вставить("ТаблицаПолныхПериодов", СериализацияБЗК.СписокXDTO(LN_ROW, "TREAT_PERIODS.TREAT_FULL_PERIOD"));
ДанныеИзСервиса.Вставить("СНИЛС", "");
Если ТипЗнч(ДанныеИзСервиса.SNILS) = Тип("Строка") И ЗначениеЗаполнено(ДанныеИзСервиса.SNILS) Тогда
ДанныеИзСервиса.СНИЛС = УчетПособийСоциальногоСтрахованияКлиентСервер.СНИЛСВФорматеИБ(ДанныеИзСервиса.SNILS);
КонецЕсли;
ДанныеИзСервиса.Вставить("ЯвляетсяПродолжениемБолезни", Не СериализацияБЗК.ЗначениеXML(ДанныеИзСервиса.PRIMARY_FLAG, Тип("Булево")));
ДанныеИзСервиса.Вставить("НомерПервичногоЛисткаНетрудоспособности", Строка(ДанныеИзСервиса.PREV_LN_CODE));
// Базовые проверки спецификации.
// БазовыеПоля = СтрРазделить("SNILS, LN_CODE, LN_HASH", ", ", Ложь);
БазовыеПоля = СтрРазделить("SNILS, LN_CODE", ", ", Ложь); // Убираем LN_HASH из базовых полей
Для Каждого ИмяПоля Из БазовыеПоля Цикл
Если Не ЗначениеЗаполнено(ДанныеИзСервиса[ИмяПоля]) Тогда
ТекстОшибки = СтрШаблон(НСтр("ru = 'Файл не соответствует спецификации: Не заполнено поле ""%1"".'"), ИмяПоля);
ЗарплатаКадрыОтображениеОшибок.СообщитьОбОшибке(Отказ, ТекстОшибки, ИмяПоля);
КонецЕсли;
КонецЦикла;
СостояниеЭЛНВФСС = Перечисления.СостоянияЭЛНВФСС.НайтиПоКодуФСС(ДанныеИзСервиса.LN_STATE);
ДанныеИзСервиса.Вставить("СостояниеЭЛНВФСС", СостояниеЭЛНВФСС);
Возврат ДанныеИзСервиса;
КонецФункции
Применив это исправление, файлы прекрасно грузятся.
Проверял на релизах : 3.1.15.96
При использовании расширения галочка "Безопасный режим" должна быть снята !.