Загрузка ЭЛН (электронных листов нетрудоспособности) из файлов

Что делать, если по каким-то причинам нет возможности разместить 1С и Крипто-Про на одном рабочем месте?
Правильно — открывать конфигуратор и пилить. Благо, там не сложно.
Непосредственно решение для УПП 1.3.
Для ЗиК 2.5 и Комплексной автоматизации должно быть аналогично.

Крипто-Про не ставится,

Не растет кокос.

Итак, по какому-то стечению обстоятельств у вас нет никакой возможности организовать рабочее место, где одновременно есть

а) 1С

б) КриптоПро

в) доступ в интернет

но, слава Тенгри, вы научились добывать файлы ЭЛН из личного кабинета ФСС.

 

Что остается делать? Правильно — курить код и думать. 

По сути, нужно найти место, где 1Ска УЖЕ получила зашифрованный/подписанный файл ЭЛН, расшифровала его, но ЕЩЕ не успела загрузить — и попробовать аккуратно вклиниться туда.

ВНЕЗАПНО, оказывается, что нужная нам точка находится в модуле формы докумета НачислениеПоБольничномуЛисту:

В процедуре КнопкаПолучитьДанныеИзФССНажатие (это обработчик кнопки "ЭЛН из ФСС"):

вызов функции ОбменСведениямиОПособияхСФСС.ПолучитьДанныеЭЛНИзСервисаФСС(…)  в третий параметр (ФайлЗашифрованногоОтветаSOAP) возвращает путь к временному файлу с зашифрованным/подписанным ЭЛН,

следом идет вызов ПроверитьПодписьSOAPОтветаЭЛНВФСС(…) — собственно, проверка валидности подписи

и дальше — то самое ценное — непосредственно загрузка данных из файла в документ ОбменСведениямиОПособияхСФСС.ПолучитьДанныеЭЛНИзСервисаФСС(), где третьим параметром (РезультатПроверки.ФайлРасшифрованногоОтветаSOAP) передается путь к расшифрованному XML-файлу. 

ВНИМАНИЕ! Эта этот вызов функции приводит к удалению файла после загрузки данных! Просто имейте это ввиду.

 

В общем, дальше дело за малым. Я сделал так:

Процедура КнопкаПолучитьДанныеИзФССНажатие(Элемент)
ВыборФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
ВыборФайла.Фильтр = "XML файлы ЭЛН (*.xml)|*.xml";
ВыборФайла.МножественныйВыбор = Ложь;
ВыборФайла.Заголовок = "Укажите файл с ЭЛН из ФСС";
Если ВыборФайла.Выбрать() Тогда
ИмяФайлаЭЛН = ПолучитьИмяВременногоФайла();
КопироватьФайл(ВыборФайла.ВыбранныеФайлы[0], ИмяФайлаЭЛН);

ОбменВыполненУспешно = ОбменСведениямиОПособияхСФСС.ПолучитьДанныеЭЛНИзСервисаФСС(ДокументОбъект, Неопределено, ИмяФайлаЭЛН, Ложь, Истина);
Если ОбменВыполненУспешно Тогда
ПричинаНетрудоспособностиПриИзменении(ЭлементыФормы.ПричинаНетрудоспособности);
ДатаНачалаСобытияПриИзменении(ЭлементыФормы.ДатаНачалаСобытия);
ДатаНачалаПриИзменении(ЭлементыФормы.ДатаНачала);
КнопкаРассчитатьВсеНажатие(ЭлементыФормы.КнопкаРассчитатьВсе);

Иначе
Сообщить("Ошибка загрузки файла!", СтатусСообщения.Важное);
КонецЕсли;

Состояние();

Иначе
Сообщить("Файл не выбран!");
Возврат;
КонецЕсли;

Возврат;

// далее сохранен оригинальный код процедуры для упрощения последующей поддержки

 

4 Comments

  1. GlebHappy

    Благодарствуйте — как раз то, что нужно! 🙂

    Reply
  2. ljolsen

    Попробовали сделать -получили ошибку:

    {ОбщийМодуль.ОбменСведениямиОПособияхСФСС.Модуль(4942)}: Поле объекта не обнаружено (MESS)

    Возврат ?(WSResult <> Неопределено, WSResult.MESS, Неопределено);

    В какую сторону копать, чтоб исправить?

    1С:Предприятие 8.2 (8.2.19.130) релиз (1.3.120.1)

    Reply
  3. SatanClaws

    (2) Под полными правами тоже выдает ошибку?

    Reply
  4. ljolsen

    Да.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *