Довольно часто в производственных, складских и торговых процессах возникает задача прикрепления фотографий к документам информационной базы: снимки дефектов при приемке, фотоотчеты выкладки или фиксация погрузки. Прямая передача файлов через провод или беспроводные интерфейсы на рабочий компьютер отнимает много времени и неудобна для сотрудников. Разберем эффективное решение, позволяющее сотруднику со смартфона мгновенно отправить фото в конкретный документ с помощью QR-кода и автоматической фоновой обработки писем в 1С.
Проанализируем весь цикл передачи фотографии от мобильного устройства до информационной базы:
mailto: с указанием почтового ящика системы и идентификатора документа в теме письма.Рассмотрим, как заставить смартфон автоматически создать черновик письма без использования сторонних сайтов и приложений. Для этого применяется стандартная URI-схема почтовых ссылок RFC 6068. В строку QR-кода зашивается адрес получателя и тема, содержащая уникальный идентификатор целевого документа (УникальныйИдентификатор):
// Формирование строки mailto для QR-кода
СтрокаQR = "mailto:photo-receiver@company.ru?subject=" + Строка(ДокументСсылка.УникальныйИдентификатор());
Камера современного смартфона (как на базе Android, так и на iOS) распознает такой формат нативно и сразу предлагает открыть почтовый клиент по умолчанию.
Разберем процесс фонового сбора писем. Для автоматического выполнения операций без участия пользователя создадим объект конфигурации Регламентное задание с периодичностью выполнения (например, раз в 1–2 минуты) и свяжем его с процедурой в общем модуле с признаком Сервер.
Для подключения к почтовому ящику используем объекты платформы ИнтернетПочтовыйПрофиль и ИнтернетПочта. Рекомендуется использовать протокол IMAP вместо POP3, так как IMAP позволяет быстро получать только непрочитанные сообщения и корректно помечать их после обработки.
Процедура ЗагрузитьФотографииИзПочты() Экспорт
Профиль = Новый ИнтернетПочтовыйПрофиль;
Профиль.АдресСервераIMAP = "imap.company.ru";
Профиль.ПортIMAP = 993;
Профиль.ИспользоватьSSLIMAP = Истина;
Профиль.Пользователь = "photo-receiver@company.ru";
Профиль.Пароль = "СекретныйПароль";
Почта = Новый ИнтернетПочта;
Попытка
Почта.Подключиться(Профиль, ПротоколИнтернетПочты.IMAP);
Исключение
ЗаписьЖурналаРегистрации("ЗагрузкаФото", УровеньЖурналаРегистрации.Ошибка,,, ОписаниеОшибки());
Возврат;
КонецПопытки;
// Получаем только непрочитанные письма
ПараметрыОтбора = Новый Структура;
ПараметрыОтбора.Вставить("НеПрочитанные", Истина);
МассивПисем = Почта.Выбрать(Ложь, ПараметрыОтбора);
Для Каждого Письмо Из МассивПисем Цикл
ИдентификаторСтрокой = СокрЛП(Письмо.Тема);
ДокументСсылка = НайтиДокументПоИдентификатору(ИдентификаторСтрокой);
Если ЗначениеЗаполнено(ДокументСсылка) Тогда
Для Каждого Вложение Из Письмо.Вложения Цикл
// Проверяем расширение файла на соответствие изображениям
Расширение = ВРег(Вложение.ИмяФайла);
Если СтрЗаканчиваетсяНа(Расширение, ".JPG")
Или СтрЗаканчиваетсяНа(Расширение, ".JPEG")
Или СтрЗаканчиваетсяНа(Расширение, ".PNG") Тогда
СохранитьФотоВДокумент(ДокументСсылка, Вложение.Данные, Вложение.ИмяФайла);
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
Почта.Отключиться();
КонецПроцедуры
Посмотрим на пример процедуры сопоставления полученного из темы GUID со ссылкой на документ в информационной базе и сохранения вложенного файла:
Функция НайтиДокументПоИдентификатору(СтрокаGUID)
Попытка
УИД = Новый УникальныйИдентификатор(СтрокаGUID);
Возврат Документы.ПриходнаяНакладная.ПолучитьСсылку(УИД);
Исключение
// Если в теме передан некорректный GUID
Возврат Неопределено;
КонецПопытки;
КонецФункции
Процедура СохранитьФотоВДокумент(ДокументСсылка, ДвоичныеДанныеФото, ИмяФайла)
// Пример создания элемента справочника присоединенных файлов
НовыйФайл = Справочники.ПриходнаяНакладнаяПрисоединенныеФайлы.СоздатьЭлемент();
НовыйФайл.ВладелецФайла = ДокументСсылка;
НовыйФайл.Наименование = ИмяФайла;
НовыйФайл.ФайлХранилище = Новый ХранилищеЗначения(ДвоичныеДанныеФото, Новый СжатиеДанных(9));
НовыйФайл.ДатаМодификацииУниверсальная = ТекущаяУниверсальнаяДата();
НовыйФайл.Записать();
КонецПроцедуры
Выясним основные нюансы, которые необходимо учесть при промышленной эксплуатации решения:
Картинка), уменьшая разрешение до разумных пределов (например, Full HD).Рассмотрим другие способы интеграции мобильной фотосъемки с базой 1С, которые можно применить при необходимости прямой передачи:
СредстваМультимедиа.СделатьСнимок()), что полностью исключает сторонние протоколы передачи.