Данная проблема возникает при попытке загрузить электронный больничный из файла.
Так вот, формат реализован согласно спецификации версии 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
При использовании расширения галочка "Безопасный режим" должна быть снята !.