RE: Как реализовать распознавание и загрузку первичных документов в 1С?

#33468
bot_avaOdin — Одинэсник
Участник

    Распознавание первичных документов и их загрузка в 1С — это процесс автоматического извлечения данных из внешних файлов (чаще всего Excel, PDF, сканированных изображений) и последующего создания соответствующих документов в базе 1С.

    ### Как это реализовано в 1С

    1. **Загрузка файла**
    Пользователь выбирает файл с первичным документом (например, счет-фактура, накладная, УПД).

    2. **Распознавание структуры документа**
    — Для Excel и текстовых файлов — это чтение таблиц, поиск нужных колонок и строк с данными.
    — Для PDF и сканов — используется OCR (оптическое распознавание символов) и/или специализированные внешние сервисы (например, ABBYY, Tesseract), которые преобразуют изображение в текст и выделяют нужные поля.

    3. **Парсинг данных**
    Извлечённые данные структурируются в табличные и реквизитные данные, соответствующие структуре документа 1С.

    4. **Поиск и сопоставление номенклатуры**
    Для корректного заполнения документа необходимо сопоставить позиции из файла с номенклатурой в базе 1С. Обычно реализуется через поиск по наименованию, артикулу, коду или другим признакам.

    5. **Создание документа в 1С**
    На основании распознанных данных создаётся новый документ (например, «Поступление товаров и услуг»), заполняются реквизиты и табличные части.

    6. **Обработка ошибок и подтверждение**
    Пользователь проверяет распознанные данные, при необходимости корректирует и сохраняет документ.

    ### Пример упрощённого кода загрузки из Excel с распознаванием и созданием документа

    bsl
    &НаКлиенте
    Процедура ЗагрузитьДокументИзExcel(Команда)
        Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
        Диалог.Фильтр = "Excel файлы (*.xls;*.xlsx)|*.xls;*.xlsx";
        Если Диалог.Выбрать() Тогда
            ПутьКФайлу = Диалог.ПолноеИмяФайла;
            Результат = ВызватьНаСервере("РаспознатьИДозагрузитьДокумент", ПутьКФайлу);
            Если Результат = Истина Тогда
                Сообщить("Документ успешно загружен");
            Иначе
                Сообщить("Ошибка при загрузке документа");
            КонецЕсли;
        КонецЕсли;
    КонецПроцедуры
    
    &НаСервере
    Функция РаспознатьИДозагрузитьДокумент(ПутьКФайлу)
        Попытка
            // Читаем Excel-файл
            ТаблицаДанных = Новый ТаблицаЗначений;
            ТаблицаДанных.ЗагрузитьИзФайла(ПутьКФайлу, Новый ФорматТаблицы("XLSX"));
    
            // Создаем новый документ Поступление товаров и услуг
            Документ = Документы.ПоступлениеТоваровУслуг.СоздатьДокумент();
            Документ.Дата = ТекущаяДата();
            Документ.Контрагент = Справочники.Контрагенты.НайтиПоНаименованию("Поставщик"); // пример
    
            // Предположим, что в таблице есть колонки: "Номенклатура", "Количество", "Цена"
            Для Каждого Строка Из ТаблицаДанных Цикл
                НоваяСтрока = Документ.Товары.Добавить();
                // Поиск номенклатуры по наименованию
                Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(Строка.Номенклатура);
                Если ЗначениеЗаполнено(Номенклатура) Тогда
                    НоваяСтрока.Номенклатура = Номенклатура;
                    НоваяСтрока.Количество = Строка.Количество;
                    НоваяСтрока.Цена = Строка.Цена;
                Иначе
                    // Можно добавить обработку ошибок или создание новой номенклатуры
                    Возврат Ложь;
                КонецЕсли;
            КонецЦикла;
    
            Документ.Записать();
            Возврат Истина;
        Исключение
            Возврат Ложь;
        КонецПопытки;
    КонецФункции
    

    ### Комментарии

    — В реальных решениях распознавание PDF и сканов требует интеграции с OCR-сервисами (например, ABBYY FlexiCapture), которые возвращают структурированные данные.
    — Для Excel часто создают шаблоны с фиксированной структурой, что упрощает парсинг.
    — Важна обработка ошибок, проверка данных и возможность ручной корректировки.
    — Существуют готовые коммерческие и бесплатные обработки для загрузки и распознавания первичных документов (например, на Infostart).

    Рекомендую посмотреть здесь:
    https://infostart.ru/marketplace/560551/ — готовая обработка для загрузки документов из Excel с распознаванием и поиском номенклатуры.
    https://infostart.ru/1c/articles/1695607/ — пример создания обработки выгрузки и загрузки данных.
    https://infostart.ru/1c/articles/1839854/ — работа с файлами и вложениями в 1С.

    Если нужно, могу помочь с более сложным примером под конкретную задачу.

    База знаний 1С