Як підключити JDOC до Вчасно.ЕДО та M.E.Doc
Це приклад для програміста 1С: як передати PDF із Вчасно.ЕДО або M.E.Doc у JDOC без ручного вибору файла.
Схема однакова для будь-якої обробки ЕДО: отримати PDF документа, покласти шлях до файла в масив ФайлыJDOC і відкрити зовнішню обробку JDOC.
Після відкриття JDOC додає передані PDF у таблицю документів. Користувачу залишається запустити розпізнавання.
Як це виглядає у Вчасно.ЕДО
У форму Вчасно.ЕДО додається кнопка «Передати на розпізнавання».
Бухгалтер відкриває Документи Вчасно → Зовнішні документи, відмічає потрібні документи флажками й натискає кнопку над таблицею.
PDF не потрібно вручну зберігати на робочий стіл і потім окремо завантажувати в JDOC. Це робить обробка.
Якщо в ЕДО вже є своє розпізнавання
У деяких сервісах ЕДО можуть бути власні інструменти розпізнавання. Але не кожній компанії зручно міняти під це свій процес, якщо основна робота з документами ведеться в 1С.
JDOC у такій схемі підключається як окремий шар розпізнавання: документи залишаються в ЕДО, а передача в JDOC виконується однією кнопкою з форми 1С.
Що саме робимо
Додаємо в обробку Вчасно.ЕДО або M.E.Doc кнопку, яка:
знаходить відмічені документи
↓
зберігає PDF у тимчасову папку
↓
відкриває зовнішню обробку JDOC
↓
передає в неї масив файлів ФайлыJDOC
У JDOC ці PDF автоматично з’являються в таблиці документів і готові до розпізнавання.
Код кнопки передачі у JDOC
&НаКлиенте
Процедура ПередатьВJDOC(Команда)
ВыбранныеДокументы =
ДокументыВчасноВнешние.НайтиСтроки(
Новый Структура("Пометка,Гиперссылка", Истина, Истина)
);
Если ВыбранныеДокументы.Количество() = 0 Тогда
Сообщить("Позначте документи Вчасно, які потрібно передати в JDOC.");
Возврат;
КонецЕсли;
КаталогJDOC = мКаталогВременныхФайлов + "JDOC\";
Попытка
СоздатьКаталог(КаталогJDOC);
Исключение
Сообщить("Не вдалося створити тимчасовий каталог JDOC: " + ОписаниеОшибки());
Возврат;
КонецПопытки;
ФайлыJDOC = Новый Массив;
Ошибки = Новый Массив;
Для Каждого ДокументВчасно Из ВыбранныеДокументы Цикл
РезультатСкачивания =
JDOC_СкачатьPDFВчасно(ДокументВчасно, КаталогJDOC);
Если РезультатСкачивания.Успех Тогда
ФайлыJDOC.Добавить(РезультатСкачивания.ПолныйПуть);
Иначе
Ошибки.Добавить(РезультатСкачивания.Сообщение);
КонецЕсли;
КонецЦикла;
Если ФайлыJDOC.Количество() = 0 Тогда
Сообщить("Не вдалося підготувати жодного PDF для JDOC.");
Возврат;
КонецЕсли;
JDOC_ОткрытьJDOC(ФайлыJDOC);
КонецПроцедуры
Завантаження PDF із Вчасно.ЕДО
Беремо PDF-форму документа. Якщо її не вдалося отримати — пробуємо отримати оригінальний PDF.
&НаКлиенте
Функция JDOC_СкачатьPDFВчасно(ДокументВчасно, Знач КаталогJDOC)
Если Не ЗначениеЗаполнено(ДокументВчасно.Идентификатор) Тогда
Возврат Новый Структура(
"Успех,ПолныйПуть,Сообщение",
Ложь,
"",
"У документа Вчасно не заповнений ідентифікатор."
);
КонецЕсли;
Идентификатор = СокрЛП(Строка(ДокументВчасно.Идентификатор));
Заголовки = Новый Соответствие;
Заголовки.Вставить("Authorization", мНастройки.Токен);
ПолныйПуть = КаталогJDOC + "Вчасно_" + Идентификатор + ".pdf";
ФайлСохранен =
мМодуль.HTTP(
"GET",
"https",
мСерверЕДО,
,
"/api/v2/documents/" + Идентификатор + "/pdf/print",
Заголовки,
,
,
ПолныйПуть
);
Если Не ФайлСохранен Тогда
ФайлСохранен =
мМодуль.HTTP(
"GET",
"https",
мСерверЕДО,
,
"/api/v2/documents/" + Идентификатор + "/original",
Заголовки,
,
,
ПолныйПуть
);
КонецЕсли;
Если Не ФайлСохранен Тогда
Возврат Новый Структура(
"Успех,ПолныйПуть,Сообщение",
Ложь,
"",
"Не вдалося отримати PDF Вчасно: " + Идентификатор + "."
);
КонецЕсли;
ФайлОбъект = Новый Файл(ПолныйПуть);
Если Не ФайлОбъект.Существует() Тогда
Возврат Новый Структура(
"Успех,ПолныйПуть,Сообщение",
Ложь,
"",
"PDF Вчасно не збережено на диску: " + Идентификатор + "."
);
КонецЕсли;
Возврат Новый Структура(
"Успех,ПолныйПуть,Сообщение",
Истина,
ПолныйПуть,
""
);
КонецФункции
Відкриття JDOC з готовими PDF
&НаКлиенте Процедура JDOC_ОткрытьJDOC(ФайлыJDOC) ПараметрыJDOC = Новый Структура( "ФайлыJDOC", ФайлыJDOC ); ОткрытьФорму( "ВнешняяОбработка.JDOC.Форма.Форма", ПараметрыJDOC, ЭтаФорма ); КонецПроцедуры
Як JDOC приймає файли
В обробці JDOC при відкритті форми перевіряється параметр ФайлыJDOC.
Якщо параметр є, PDF-файли додаються в таблицю JDOC.
&НаКлиенте
Процедура JDOC_ЗагрузитьФайлыИзВчасно()
ФайлыJDOC = Неопределено;
Если Параметры = Неопределено
Или Не Параметры.Свойство("ФайлыJDOC", ФайлыJDOC) Тогда
Возврат;
КонецЕсли;
Если ТипЗнч(ФайлыJDOC) <> Тип("Массив")
Или ФайлыJDOC.Количество() = 0 Тогда
Возврат;
КонецЕсли;
Для Каждого ПолныйПуть Из ФайлыJDOC Цикл
ПолныйПуть = СокрЛП(Строка(ПолныйПуть));
Если Не ЗначениеЗаполнено(ПолныйПуть) Тогда
Продолжить;
КонецЕсли;
ФайлОбъект = Новый Файл(ПолныйПуть);
Если Не ФайлОбъект.Существует() Тогда
Продолжить;
КонецЕсли;
НоваяСтрока = ТаблицаФайлов.Добавить();
НоваяСтрока.Выбран = Истина;
НоваяСтрока.ИмяФайла = ФайлОбъект.Имя;
НоваяСтрока.ПолныйПуть = ФайлОбъект.ПолноеИмя;
УстановитьСтатусСтроки(
НоваяСтрока,
"Новий",
""
);
КонецЦикла;
ОбновитьСтатистику();
КонецПроцедуры
Як підключити M.E.Doc
Для M.E.Doc принцип такий самий: отримати PDF документа і передати його в JDOC через ФайлыJDOC.
&НаКлиенте
Процедура ПередатьДокументMEDocВJDOC(Команда)
ФайлыJDOC = Новый Массив;
ПолныйПутьКPDF = ПолучитьPDFДокументаMEDoc();
Если Не ЗначениеЗаполнено(ПолныйПутьКPDF) Тогда
Сообщить("Не вдалося отримати PDF з M.E.Doc.");
Возврат;
КонецЕсли;
ФайлыJDOC.Добавить(ПолныйПутьКPDF);
ОткрытьФорму(
"ВнешняяОбработка.JDOC.Форма.Форма",
Новый Структура("ФайлыJDOC", ФайлыJDOC),
ЭтаФорма
);
КонецПроцедуры
Підсумок
Інтеграція зводиться до трьох дій:
отримати PDF передати шлях у ФайлыJDOC відкрити форму JDOC
Після цього бухгалтер бачить документи в JDOC і запускає розпізнавання без ручного завантаження файлів.