В процессе автоматизации бизнес-процессов часто возникают нестандартные задачи, например, необходимость чтения данных из QR-кодов, которые хранятся внутри файлов Word. Вместо ручного копирования или использования сложных визуальных манипуляций, мы разберем наиболее эффективный технический подход к решению этой задачи, используя возможности платформы 1С.
Прежде чем приступать к коду, важно проанализировать структуру файла docx. Современные форматы документов Microsoft Word — это, по своей сути, ZIP-архивы. Внутри такого архива хранятся все компоненты документа: текст, стили и, что самое важное для нас, медиа-ресурсы. Все изображения, включая QR-коды, размещаются в подпапке word/media.
Рассматривая этот факт, мы можем отказаться от сложных манипуляций с объектами Word или эмуляции нажатия клавиш, что делает наше решение быстрым и стабильным.
Для реализации поставленной задачи выполним следующие шаги:
ZIP-архив (или XML-структуру для доступа к путям).media.ZBar для пакетного распознавания извлеченных файлов.Давайте посмотрим на пример реализации, который позволяет автоматизировать процесс обработки. Мы будем использовать ЧтениеXML для поиска путей к изображениям и метод ЗапуститьПриложение для вызова консольной команды распознавания.
ИмяФайлаРаспознования = ПолучитьИмяВременногоФайла("txt");
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.ОткрытьФайл(ПутьКФайлуDocuments);
Пока ЧтениеXML.Прочитать() Цикл
Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
Пока ЧтениеXML.ПрочитатьАтрибут() Цикл
Если ЧтениеXML.Имя = "Target" и Лев(ЧтениеXML.Значение, 6) = "media/" Тогда
// Фильтруем лишние изображения, если необходимо
Если НЕ (Найти(ЧтениеXML.Значение, "_app_ios") или Найти(ЧтениеXML.Значение, "_app_android_")) Тогда
ИмяФайлаИзображения = ПутьККаталогу + СтрЗаменить(ЧтениеXML.Значение, "/", "\");
ПутьКПрограммеРаспознования = "C:\Program Files (x86)\ZBar\bin";
// Формируем команду для ZBar
СтрокаЗапуска = "cmd /c zbarimg.exe --raw """ + ИмяФайлаИзображения + """ >> """ + ИмяФайлаРаспознования + """";
КодВозврата = 0;
// Запускаем процесс распознавания
ЗапуститьПриложение(СтрокаЗапуска, ПутьКПрограммеРаспознования, Истина, КодВозврата);
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
Проанализируем преимущества данного подхода:
COM-объект.ZBar, которая предназначена именно для анализа изображений, обеспечивает высокое качество считывания данных.При выполнении работы учитывайте следующие нюансы:
Организация логов: Всегда ведите журнал успешных и неуспешных операций. Поскольку 2700 кодов — это объем, при котором возможны ошибки распознавания из-за качества исходных картинок, ведение журнала поможет вам быстро найти проблемные файлы.
Фильтрация: Как показано в примере, используйте строковые методы Найти или Лев для того, чтобы отсечь изображения, не являющиеся QR-кодами, еще до начала процесса распознавания. Это существенно сократит время ожидания результата.
Масштабируемость: Если объем данных вырастет до десятков тысяч, рассмотрите возможность написания многопоточного скрипта (например, на Python с библиотекой pyzbar), который будет вызываться из 1С, что позволит задействовать все ядра вашего процессора параллельно.
Используя этот алгоритм, вы сможете перевести задачу из разряда «невозможной» или «рутинной» в категорию полностью автоматизированных процессов, требующих минимум вашего участия.