Задача загрузки данных из PDF-файлов в 1С — одна из самых частых при автоматизации рутинных операций, например, при вводе первичной документации — для этой задачи есть готовая обработка автоматического распознавания PDF и сканов. Однако под «импортом» могут пониматься совершенно разные вещи: от простого прикрепления файла к документу до полного автоматического распознавания его содержимого и создания на его основе объектов в базе. Давайте разберемся, какие существуют подходы к решению этой задачи, и какой из них выбрать в вашей ситуации.
Прежде всего, проанализируем основную проблему. Файл PDF может быть двух типов:
Как видно из обсуждения на форуме, простая загрузка файла в хранилище — не то, что требуется — хотя для этого есть обработка автоматического прикрепления файлов к документам по имени. Цель — извлечь структурированную информацию (номер, дата, контрагент, табличная часть с номенклатурой и суммами) и перенести ее в форму документа 1С. Рассмотрим основные способы реализации этой задачи.
Самый простой и надежный способ для работы со стандартными документами — использовать официальные решения, разработанные фирмой «1С». Они глубоко интегрированы в типовые конфигурации и не требуют сложных настроек.
Сервис «1С:Распознавание первичных документов»
Это облачный сервис, предназначенный для автоматизации ввода первички. Он идеально подходит для бухгалтерии и является рекомендуемым решением для большинства пользователей.
Ключевые возможности:
Встроенные возможности «1С:Документооборот»
Если у вас используется конфигурация «1С:Документооборот» версии КОРП, то в ней уже есть встроенный механизм распознавания. Он работает локально, на вашем сервере, и требует установки нескольких бесплатных сторонних утилит (CuneiForm, ImageMagick, Ghostscript). Основная цель этого механизма — извлечь весь текст из документа и проиндексировать его. После этого вы сможете использовать полнотекстовый поиск по содержимому всех загруженных файлов, даже если это были сканы.
Этот вариант меньше подходит для автоматического создания структурированных документов, но может служить основой для дальнейшей кастомной разработки.
Рынок предлагает и другие коммерческие решения, которые можно интегрировать с 1С.
Мультисервисы распознавания
Существуют сервисы (например, Entera), которые предлагают еще более глубокую автоматизацию. Они могут не только распознавать файлы, которые вы загружаете вручную, но и автоматически забирать документы из указанных папок, с электронной почты или даже из систем электронного документооборота (ЭДО). Это позволяет построить полностью бесшовный процесс обработки первички.
Электронный документооборот (ЭДО)
ЭДО — это, по сути, лучший способ избежать проблем с распознаванием. При работе через ЭДО контрагент отправляет вам не скан или PDF-файл, а структурированный XML-файл, формат которого утвержден ФНС. 1С умеет напрямую загружать такие файлы, и все данные (контрагент, номенклатура, суммы) попадают в нужные поля документа автоматически и без ошибок. Распознавание здесь не требуется в принципе. Главное условие — и вы, и ваш контрагент должны быть подключены к одному или совместимым операторам ЭДО.
Если готовые сервисы не подходят (например, у вас нестандартные документы или вы не хотите зависеть от платных подписок), можно реализовать импорт силами программиста 1С. Этот путь сложнее, но дает максимальную гибкость.
Использование внешних утилит для конвертации в текст
Этот метод подходит для текстовых PDF с постоянной структурой. Алгоритм действий следующий:
ЗапуститьПриложение() вызовите эту утилиту, передав ей в параметрах путь к вашему PDF-файлу и путь к файлу, в который нужно сохранить результат.
// Пример вызова внешней утилиты из 1С
КомандаСистемы = """C:\Path\To\pdftotext.exe"" -layout ""C:\Input\MyDoc.pdf"" ""C:\Output\result.txt""";
ЗапуститьПриложение(КомандаСистемы, , Истина); // Третий параметр "Истина" означает, что 1С дождется завершения
result.txt.ТекстовыйДокумент) и напишите алгоритм его разбора (парсинга). Используя строковые функции (СтрНайти(), Сред(), СтрЗаменить()) и, возможно, регулярные выражения, ищите ключевые слова («Номер», «от», «Поставщик», «Итого») и извлекайте данные, находящиеся рядом с ними.Важно: этот способ абсолютно бесполезен, если PDF является сканом без текстового слоя.
Интеграция с OCR-движками
Если вы имеете дело со сканами, перед парсингом текст нужно сначала извлечь. Для этого можно использовать бесплатный и мощный OCR-движок Tesseract.
Процесс похож на предыдущий:
// Для распознавания может потребоваться сначала преобразовать PDF в изображение,
// например, с помощью Ghostscript, а затем передать его в Tesseract.
// Прямое распознавание PDF в Tesseract также возможно.
КомандаСистемы = "tesseract ""C:\Input\Scan.pdf"" ""C:\Output\recognized_text"" -l rus";
ЗапуститьПриложение(КомандаСистемы, , Истина);
-l rus указывает, что в документе используется русский язык.
recognized_text.txt обрабатывайте так же, как и в предыдущем способе.Точность распознавания сильно зависит от качества сканирования. Для повышения точности может потребоваться предварительная обработка изображений.
Подключение внешних библиотек (.NET / Java)
Для максимально полного контроля над структурой PDF-файла можно использовать внешние компоненты и подключать мощные сторонние библиотеки. Например, через технологию COM можно взаимодействовать с .NET-библиотеками (такими как iTextSharp) или через специальную обертку — с Java-библиотеками (например, Apache PDFBox). Эти инструменты позволяют не просто извлечь весь текст, но и получить информацию о координатах каждого слова, размерах шрифтов, таблицах и других элементах. Это самый сложный, но и самый мощный метод самостоятельной разработки.