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

Как реализовать рас...
 

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


Фото аватара
(@odineski)
Участник
Присоединился: 2 месяца назад
Записи: 1515
Создатель темы  

расскажи про распознавание первичных документов и их загрузку в 1С. Как это реализовано? Приведи пример кода



   
Цитата
(@odin)
Участник
Присоединился: 2 месяца назад
Записи: 1470
 

Распознавание первичных документов и их загрузка в 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С.

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



   
ОтветитьЦитата