Проблема ручного ввода данных из бумажных сканов или PDF-файлов, присылаемых поставщиками, остается актуальной для многих компаний. Несмотря на развитие ЭДО, значительная часть документов (счета на оплату, ТОРГ-12, специфические формы спецификаций) по-прежнему поступает в виде изображений или неструктурированных файлов. Рассмотрим, как разработать гибкое решение для автоматизации этой задачи, разберем технические нюансы работы с OCR-движками и методы извлечения данных в 1С.
Разберем типичную ситуацию: у нас есть скан документа. Просто получить из него набор слов (текстовый слой) через бесплатные библиотеки часто бывает недостаточно для корректной загрузки в 1С. Основная сложность заключается в сохранении структуры документа. Для автоматизации загрузки в табличную часть (ТЧ) нам нужно понимать, где заканчивается колонка "Наименование" и начинается "Цена".
Проанализируем разницу между подходами:
Прежде чем подключать тяжелые внешние библиотеки распознавания (OCR), выясним, является ли ваш файл "картинкой" или "текстовым PDF". Если текст в PDF можно выделить мышкой, нам не нужен FineReader. Мы можем воспользоваться встроенным объектом платформы ИзвлечениеТекста.
Рассмотрим пример кода для извлечения текста из файла:
// Создаем объект для извлечения текста
Попытка
Экстрактор = Новый ИзвлечениеТекста(ПутьКФайлу);
ТекстДокумента = Экстрактор.ПолучитьТекст();
Сообщить(ТекстДокумента);
Исключение
Сообщить("Не удалось извлечь текст: " + ОписаниеОшибки());
КонецПопытки;
Важное ограничение: Метод ИзвлечениеТекста работает преимущественно в среде Windows и требует установленных iFilter (для PDF — например, от Adobe или Foxit). Кроме того, он не сохраняет визуальное расположение колонок, превращая таблицу в последовательный текст. Если вам нужно сохранить структуру, лучше использовать специализированные библиотеки или конвертацию в HTML через внешние компоненты.
Для работы с изображениями и сканами высокого качества часто применяется связка 1С и ABBYY FineReader. Проанализируем алгоритм работы такого расширения:
Использование формата HTML в качестве промежуточного позволяет программно обходить дерево DOM и точно определять значения в конкретных ячейках таблицы. Это решает проблему "слипшихся" строк, характерную для чистого текстового распознавания.
Даже если мы идеально распознали текст "Шина зимняя R16", в нашей базе 1С этот товар может называться "Покрышка R16 зима". Выясним, как решать задачу идентификации объектов:
1. Использование артикулов поставщика. Самый надежный метод. Рекомендуется создать в справочнике Номенклатура дополнительный регистр сведений или табличную часть "Номенклатура контрагентов", где будут храниться соответствия ваших кодов и кодов поставщика.
2. Алгоритмы нечеткого сравнения (Расстояние Левенштейна). Рассмотрим ситуацию, когда артикула нет. Нам нужно найти наиболее похожее наименование. Для этого в 1С можно реализовать функцию сравнения строк, которая вычисляет количество правок, необходимых для превращения одной строки в другую.
Пример логики для поиска соответствий:
// Пример упрощенного алгоритма сопоставления
Функция НайтиСхожесть(Строка1, Строка2)
// Здесь может быть вызов внешней компоненты или алгоритм Левенштейна на языке 1С
// Возвращает процент совпадения от 0 до 100
// ...
КонецФункции
// Логика подбора
Если ПроцентСхожести > 85 Тогда
// Автоматическая подстановка
ИначеЕсли ПроцентСхожести > 50 Тогда
// Предложить пользователю для выбора (желтая зона)
КонецЕсли;
Проанализируем, какие инструменты появились в последние годы и могут заменить классический FineReader:
Рассмотрим пошагово, как сделать загрузку данных гибкой, чтобы она не "ломалась" при изменении формы документа поставщиком:
Резюмируем: Создание полноценного коммерческого продукта для распознавания требует не только качественного OCR-движка, но и мощного интеллектуального алгоритма сопоставления номенклатуры (Data Mining). В современных реалиях наиболее перспективным выглядит использование облачных API (Yandex/1C), так как они обеспечивают высокую точность без привязки к локальным мощностям сервера и лицензиям стороннего ПО.