Загрузка электронного больничного из файла в ЗУП 3.1. Исправление ошибки

17.11.20

Учетные задачи - Зарплата

При попытке загрузки электронного больничного пишет: Не заполнено поле LN_HASH или Не заполнено поле LN_STATE. Готовое расширение, исправление для типовой конфигурации ЗУП 3.1.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
ЗУП 3.1 загрузка электронного больничного из файла. Исправление ошибки.:
.cfe 6,19Kb
29
29 Скачать (1 SM) Купить за 1 850 руб.

Данная проблема возникает при попытке загрузить электронный больничный из файла, полученного, например, из СБИС или Контур.

Так вот, формат реализован согласно спецификации версии 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

 

При использовании расширения галочка "Безопасный режим" должна быть снята !.

ЗУП ФСС Электронный Больничный Загрузка LN_HASH LN_STATE

См. также

Внешние источники данных Программист Бизнес-аналитик Пользователь Платформа 1С v8.3 Управляемые формы Анализ и прогнозирование Конфигурации 1cv8 Узбекистан Беларусь Кыргызстан Молдова Россия Казахстан Платные (руб)

Готовое решение для автоматической выгрузки данных из 1С 8.3 в базу данных ClickHouse, PostgreSQL или Microsoft SQL для работы с данными 1С в BI-системах. «Экстрактор данных 1С в BI» работает со всеми типовыми и нестандартными конфигурациями 1С 8.3 и упрощает работу бизнес-аналитиков. Благодаря этому решению, специалистам не требуется быть программистами, чтобы легко получать данные из 1С в вашей BI-системе.

15.11.2022    19024    17    SQV0    49    

37

Зарплата Внешние источники данных Бюджетный учет Перенос данных 1C Системный администратор Программист Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактических удержаниях, НДФЛ, вычетах, страховых взносах из базы Парус 8 учреждений в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (ЗГУ) и начать с ней работать с любого месяца года.

84000 руб.

19.08.2020    24067    22    1    

24

Внешние источники данных Кадровый учет Файловый обмен (TXT, XML, DBF), FTP Перенос данных 1C Программист Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактических удержаниях, НДФЛ, вычетах, страховых взносах из базы Парус 10 учреждений в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (ЗГУ) и начать с ней работать с любого месяца года.

60000 руб.

05.10.2022    10271    11    8    

13

Зарплата Роли и права Системный администратор Бухгалтер Платформа 1С v8.3 Бухгалтерский учет Управление правами 1С:Бухгалтерия 3.0 1С:Комплексная автоматизация 2.х Молдова Россия Казахстан Бухгалтерский учет Платные (руб)

Расширение позволяет максимально полно ограничить доступ пользователей к данным по заработной плате, а именно закрывает доступ к документам начисления и выплаты заработной платы, не позволяет просматривать бухгалтерские отчеты по счету учета зарплаты а также убирает зарплатные проводки из журнала проводок. Расширение запрещает просматривать платежные документы на выплату зарплаты, так же не доступны регламентные отчеты в ПФР и ИФНС. Расширение предлагает готовые настроенные профили "Бухгалтер без зарплаты", "Только просмотр без зарплаты".

5940 руб.

27.05.2021    36017    248    89    

195

Зарплата Производство готовой продукции (работ, услуг) Учет рабочего времени Рабочее место Бизнес-аналитик Пользователь Руководитель проекта Платформа 1С v8.3 1С:Управление торговлей 10 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Торговля и склад 7.7 Бытовые услуги, сервис Оптовая торговля, дистрибуция, логистика Электротехника и микроэлектроника Управленческий учет Платные (руб)

Модуль или расширение «Сервисный центр для 1С» позволяет принимать в ремонт оборудование (компьютеры, бытовая техника и т.п.), оформлять заявки инженеров на посещение клиентов и вести начисление заработной платы для сотрудников. Позволяет наладить автоматизированный учет в сервисном центре на уже существующей базе.

14800 руб.

01.11.2012    92749    106    1    

115

Зарплата Программист Бизнес-аналитик Бухгалтер Платформа 1С v8.3 1С:Зарплата и кадры государственного учреждения 3 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет Платные (руб)

При заполнении ведомости на выплату зарплаты вылазят задолженности прошлых периодов, которых быть не должно? Наша обработка позволяется убрать эти доходы прошлых периодов за пару секунд. Больше не нужно тратить часы на анализ каждого такого случая.

27600 руб.

14.09.2022    14942    70    26    

71

Производство готовой продукции (работ, услуг) Внешние источники данных Платформа 1С v8.3 1С:Управление нашей фирмой 1.6 Лесное и деревообрабатывающее хозяйство Россия Управленческий учет Платные (руб)

Обработка предназначена для загрузки файлов, выгруженных из системы Базис-мебельщик, в справочник 1С "Спецификации" для последующих процессов учета и диспетчирования полуфабрикатов и изделий.

10200 руб.

24.06.2021    20184    55    53    

33
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Kiber_ 14.05.20 15:53 Сейчас в теме
1. Еще ни разу не встречал ЭЛН с пустым LN_HASH.
2. Согласно спецификации ФСС поле LN_STATE обязательно к заполнению.

Данная доработка вредна, т.к. дает возможность под видом ЭЛН загружать всякую фигню.
Например, можно будет загрузить реестр прямых выплат, что не соответствует методике учета в 1С.
Сначала надо загрузить ЭЛН (настоящий!), рассчитать больничный, ввести заявление, а только затем выгрузить реестр прямых выплат.

Настоящий ЭЛН всегда содержит LN_STATE и LN_HASH, это его родовой признак.
Более того, ФСС требует корректный LN_HASH, т.к. только так вы можете подтвердить что отправляете данные опираясь на последнюю версию ЭЛН.

Приложенный код в LN_HASH заполняет "мусором" и такой ЭЛН ФСС не примет и хорошо что 1С не принимает.
2. Sergeevich 37 14.05.20 20:26 Сейчас в теме
(1)
Настоящий ЭЛН всегда содержит LN_STATE и LN_HASH, это его родо

При чем тут "можно будет загрузить реестр прямых выплат" кто об этом говорит ?
Я прямо указал спецификацию на сайте ФСС и там реквизит LN_HASH НЕ ОБЯЗАТЕЛЬНЫЙ какие могут быть претензии.
Я оперировал с файлами которые выдавал SBIS и Контур и там не было этих полей и файлы не загружались в 1С.
Полагаю что ФСС генерирует этот хэш каждый раз по определенному алгоритму и потому не считает поле
обязательным. Если вам лично что то не нравиться вы можете переписать код под себя, он открыт.

Что касается выгрузки реестра то
В процедуре выгрузки ВыгрузитьЗапросДляОтправкиРеестраЭЛН есть строка
УстановитьЗначениеЕслиЗаполнено(ROW.LN_HASH, РегистрыСведений.СведенияОбЭЛН.ПрочитатьХеш(ДанныеЛН.НомерЛисткаНетрудоспособности));
как вы догадываетесь это значит что выгружать его если он заполнен.
Получается загружать ЭЛН без LN_HASH нельзя ,а выгружать можно, довольно противоречиво.

В любом случае статья показывает один из вариантов исправления, не нравится пишите свой.
9. blackjack666 15 18.01.21 15:05 Сейчас в теме
(1) ещё как бывают и без хэша, и без lnState.
3. Kiber_ 15.05.20 11:11 Сейчас в теме
Основная претензия в том, что вы предлагаете вредоносный код (либо по неполноте знаний, либо умышленно).
Вторая в том, что вы отказываетесь понять насколько вреден этот код.

Полагаю что ФСС генерирует этот хэш каждый раз по определенному алгоритму и потому не считает поле
обязательным.


Вывод не верен.
Хеш обязателен для передачи реестров ЭЛН. См. спецификацию на сайте ФСС: http://cabinets.fss.ru/Спецификация_ЭЛН_Страхователь_v_1_1_20191211.doc
Корректный Хеш выдает ФСС, только у них есть алгоритм его формирования.
И, о чудо, единственный способ его получить - загрузить ЭЛН из сервиса.

SBIS и Контур это прекрасно знают и у них есть способы выгрузить настоящий ЭЛН с Состоянием и Хешем.
Добивайте их поддержку чтобы они выносили эти возможности на видное место.
4. Sergeevich 37 16.05.20 18:50 Сейчас в теме
Мне смешно читать ваши комментарии. Видимо это ради зароботка SM. Я предлагаю вам ознакомиться со спецификацией в том числе с той которую вы прикрепили к комментарию. В ней поле LN_HASH указано как не обязательное, о чем говорит 0 в колонке обязательно.
Что касается того, что вы не разу не видели ни разу файла без LN_HASH так это не значит что так и есть. На момент публикации названные сервисы выдавали файлы без этого реквизита.
И в обще я все описал в предыдущем комменте.
Не нравится не пользуйтесь, пишите свое, не надо писать ложных утверждении.
5. VasilyErmak 214 05.11.20 14:11 Сейчас в теме
Исправления уже устарели. Править надо другую функцию в этом же модуле.
6. Sergeevich 37 06.11.20 13:51 Сейчас в теме
(5)
Исправления уже устарели. Править надо другую функцию в этом же модуле.

Да вы правы, я давно не обновлял публикацию.

Под рукой сейчас только Зарплата и управление персоналом, редакция 3.1 (3.1.14.183)
Для неё надо править функцию ОтветСервисаПолученияЭЛН

&Вместо("ОтветСервисаПолученияЭЛН")
Функция 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);
	ДанныеИзСервиса.Вставить("СостояниеЭЛНВФСС", СостояниеЭЛНВФСС);
	
	Возврат ДанныеИзСервиса;
КонецФункции
Показать
7. TrinitronOTV 16 18.11.20 06:32 Сейчас в теме
Непонятно, так вреден этот код или полезен?
8. Sergeevich 37 18.11.20 18:40 Сейчас в теме
(7) Если посмотрите то увидите что просто данное поле LN_HASH пропускается при загрузке ЭЛН и не более. Никакого вреда тут нет. К тому же выше всё уже и так описано и есть ссылка не спецификацию. А если детально посмотрите код 1С то при обмене LN_HASH выгружается только если он заполнен, в текущей версии исправления он пустой, что допустимо.
10. alegon 27.01.21 18:09 Сейчас в теме
А в техподдержку 1С или СБИС никто не пробовал обращаться? Есть официальная версия?
11. DimitrievEvg 29.01.21 10:38 Сейчас в теме
Лучше не стоит этого делать, так как тогда придётся исправлять и логику макета заявления для подписания сотрудником:
Если не заполнен Хэш база считает, что это бумажный больничный и в соответствующих полях проставляет метки..
А учитывая, что они каждый раз что-то меняют в регламентированное не стоит лезть(ИМХО)..
От тех. поддержки пока не добился вразумительного ответа - Хеш приходит от ФСС при загрузки больничного, а они "заняты" постоянно..
Оставьте свое сообщение