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

17.11.20

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

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

Файлы

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

Наименование Скачано Купить файл
ЗУП 3.1 загрузка электронного больничного из файла. Исправление ошибки.:
.cfe 6,19Kb ver:1.0
29 2 500 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Вы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

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

Так вот, формат реализован согласно спецификации версии 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С:Предприятие 8 1C:Бухгалтерия Узбекистан Беларусь Кыргызстан Молдова Россия Казахстан Платные (руб)

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

35000 руб.

15.11.2022    32765    50    49    

50

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

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

9675 руб.

27.05.2021    58777    519    129    

364

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

Расширение для создания и настройки обмена с консолидированной базой ЗУП. Код разработки под определенные требования проекта.

85400 руб.

11.07.2025    6209    6    1    

4

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

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

85400 руб.

05.10.2022    14188    16    8    

17

Зарплата Кадровый учет Бухгалтер Пользователь 1С 8.3 1С:Управление торговлей 11 Россия Управленческий учет Платные (руб)

Если не хотите ставить тяжёлую ЗУП? Нужен только табель и начисление по своим правилам? Рекомендуем этот модуль подключается к УТ, получаете табель, начисление и создание Расходный кассовый ордер/Списание безналичных денежных средств без типовой ЗУП

20740 руб.

27.04.2026    1195    5    0    

1

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

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

18800 руб.

01.11.2012    107849    134    1    

143

Розничная торговля Внешние источники данных Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист 1С:Предприятие 8 1С:Бухгалтерия 3.0 Фармацевтика, аптеки Россия Бухгалтерский учет Платные (руб)

Внешняя обработка загрузки данных из файла-выгрузки, сформированного в программе F3 TAIL версии 3.4 (и выше) или еФарма версии 2.1, в базу конфигурации 1С: Бухгалтерия предприятия 8, ред. 3.0 (Базовая, ПРОФ, КОРП, ФРЕШ (тонкий клиент)).

17080 руб.

19.12.2016    54975    126    107    

86
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
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 38 14.05.20 20:26 Сейчас в теме
(1)
Настоящий ЭЛН всегда содержит LN_STATE и LN_HASH, это его родо

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

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

В любом случае статья показывает один из вариантов исправления, не нравится пишите свой.
9. blackjack666 17 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 38 16.05.20 18:50 Сейчас в теме
Мне смешно читать ваши комментарии. Видимо это ради зароботка SM. Я предлагаю вам ознакомиться со спецификацией в том числе с той которую вы прикрепили к комментарию. В ней поле LN_HASH указано как не обязательное, о чем говорит 0 в колонке обязательно.
Что касается того, что вы не разу не видели ни разу файла без LN_HASH так это не значит что так и есть. На момент публикации названные сервисы выдавали файлы без этого реквизита.
И в обще я все описал в предыдущем комменте.
Не нравится не пользуйтесь, пишите свое, не надо писать ложных утверждении.
5. VasilyErmak 229 05.11.20 14:11 Сейчас в теме
Исправления уже устарели. Править надо другую функцию в этом же модуле.
6. Sergeevich 38 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 38 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 Сейчас в теме
Лучше не стоит этого делать, так как тогда придётся исправлять и логику макета заявления для подписания сотрудником:
Если не заполнен Хэш база считает, что это бумажный больничный и в соответствующих полях проставляет метки..
А учитывая, что они каждый раз что-то меняют в регламентированное не стоит лезть(ИМХО)..
От тех. поддержки пока не добился вразумительного ответа - Хеш приходит от ФСС при загрузки больничного, а они "заняты" постоянно..
Для отправки сообщения требуется регистрация/авторизация